<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RomanZo</title>
    <description>The latest articles on DEV Community by RomanZo (@itprogresscorp).</description>
    <link>https://dev.to/itprogresscorp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3977565%2Fc8c73419-51b2-441f-893a-a08133259024.jpeg</url>
      <title>DEV Community: RomanZo</title>
      <link>https://dev.to/itprogresscorp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/itprogresscorp"/>
    <language>en</language>
    <item>
      <title>Mini bucket v 3.6.6: Multilingual Support, Translation Manager, and a Bunch of System Fixes</title>
      <dc:creator>RomanZo</dc:creator>
      <pubDate>Fri, 03 Jul 2026 08:12:07 +0000</pubDate>
      <link>https://dev.to/itprogresscorp/mini-bucket-v-366-multilingual-support-translation-manager-and-a-bunch-of-system-fixes-33i3</link>
      <guid>https://dev.to/itprogresscorp/mini-bucket-v-366-multilingual-support-translation-manager-and-a-bunch-of-system-fixes-33i3</guid>
      <description>&lt;p&gt;I promised to add multilingual support. Now that time has come. However, while diving into the code, I also rewrote a couple of system modules. That's how release 3.6.6 turned into a triple update: multilingual support, interface fixes, and a new plugin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 Full Multilingual Support&lt;/strong&gt;&lt;br&gt;
Starting from this version, the interface and system dialogs can be displayed in multiple languages. English remains the default, but I've included a Russian language pack with the distribution.&lt;/p&gt;

&lt;p&gt;I extracted over 4000 strings from the interface for the English pack. The switching mechanism relies on user settings and loads the appropriate language file, which is a set of PHP variables like &lt;code&gt;$lang1234 = “SOME TEXT”&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠 Lang Editor Plugin for Managing Translations&lt;/strong&gt;&lt;br&gt;
Editing 4000 strings manually is insane, so I built a special plugin. It can:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F27tmqxae1rob41l8k9cb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F27tmqxae1rob41l8k9cb.jpg" alt=" " width="799" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and copy language packs.&lt;/li&gt;
&lt;li&gt;Edit variables directly from the interface.&lt;/li&gt;
&lt;li&gt;Automatically generate ready-to-use PHP code (plain or with echo for HTML/JS).&lt;/li&gt;
&lt;li&gt;Make third-party plugins multilingual.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; &lt;br&gt;
type the text, press Enter — the variable is created, and the ready-made code is already in your clipboard. You can click variable names on the left to copy them, or use buttons on the right for complete constructs. It's incredibly convenient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧩 Updated Plugin Architecture&lt;/strong&gt;&lt;br&gt;
To make multilingual support work seamlessly, I had to revisit the plugins. Now the architecture correctly loads language files in any existing plugin (except the Template one).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;🔧 System Module Fixes&lt;/strong&gt;&lt;br&gt;
While translating the interface, I decided to fix some old issues:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disk Manager:&lt;/strong&gt; Fixed mounting issues with LVM volumes and editing /etc/fstab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LVM Manager:&lt;/strong&gt; Rewrote the mounting logic and synchronization with fstab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAID Manager:&lt;/strong&gt; System disks are no longer shown in the list of available devices, preventing fatal errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mount Manager:&lt;/strong&gt; Completely reworked the logic for mount/unmount operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hostname &amp;amp; Domain:&lt;/strong&gt; Fixed the hostname editing function. Values are now correctly written to /etc/hostname and /etc/hosts without duplicates.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;📝 About the Translation&lt;/strong&gt;&lt;br&gt;
Translating 4000 strings manually would be crazy. I fed the text to an AI, and voila — a complete translation in minutes. It's machine translation, so there might be minor inaccuracies. However, you can easily fix any text using the Lang Editor directly in the web interface. Found a weird phrase? Open the plugin, find the variable, fix it — done.&lt;/p&gt;

&lt;p&gt;How to Switch the Language?&lt;br&gt;
For new installations: language selection appears at the first step of the installer.&lt;/p&gt;

&lt;p&gt;For updates: change the language in the system settings under the interface section.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's Next?&lt;/strong&gt;&lt;br&gt;
I remember mentioning support for new OS versions. It looks like I have more work to do. I'd appreciate it if you report any bugs or translation errors.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Useful Links:&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Forum section for languages: &lt;a href="https://mini-bucket.ru/community/community/languages/" rel="noopener noreferrer"&gt;https://mini-bucket.ru/community/community/languages/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you already have Mini Bucket installed, the update is available in the interface under the Update section.&lt;/p&gt;

</description>
      <category>nas</category>
      <category>controlpanel</category>
      <category>debian</category>
      <category>minib</category>
    </item>
    <item>
      <title>How I revived a 128MB RAM NAS by building my own control panel</title>
      <dc:creator>RomanZo</dc:creator>
      <pubDate>Wed, 10 Jun 2026 11:20:47 +0000</pubDate>
      <link>https://dev.to/itprogresscorp/how-i-revived-a-128mb-ram-nas-by-building-my-own-control-panel-3keg</link>
      <guid>https://dev.to/itprogresscorp/how-i-revived-a-128mb-ram-nas-by-building-my-own-control-panel-3keg</guid>
      <description>&lt;h1&gt;
  
  
  How I revived a 128MB RAM NAS by building my own control panel
&lt;/h1&gt;

&lt;h2&gt;
  
  
  It all started with boredom and old hardware
&lt;/h2&gt;

&lt;p&gt;I had an old &lt;strong&gt;Netgear Stora MS2000&lt;/strong&gt; sitting around — a box with just 128 MB of RAM. I had installed Debian 7 and OpenMediaVault on it once. Then the disk died, I reinstalled Debian 9, but OMV turned out to be &lt;strong&gt;way too heavy&lt;/strong&gt; for this hardware.&lt;/p&gt;

&lt;p&gt;Editing Samba and NFS configs in the console every time was a pain. All I needed was two simple pages to create shares. I thought, "I'll just write a couple of PHP scripts and be done with it."&lt;/p&gt;

&lt;p&gt;That's how &lt;strong&gt;Mini Bucket&lt;/strong&gt; was born.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Fair warning: I'm not a programmer. The code could be more beautiful, the architecture more elegant. But my goal was different — to build a useful tool for myself as a sysadmin on old hardware.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How "two pages" turned into 20+
&lt;/h2&gt;

&lt;p&gt;The first two pages were quick. Shares were being created.&lt;/p&gt;

&lt;p&gt;Then I thought: "It'd be nice to see some stats." So I added a dashboard with graphs.&lt;/p&gt;

&lt;p&gt;Then: "Since SMB and NFS are already there, let's add rsync and FTP." And I did.&lt;/p&gt;

&lt;p&gt;Day by day, my "two-page panel" grew into a project now called &lt;strong&gt;Mini Bucket — NAS Control Panel&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it actually runs:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Raspberry Pi 1&lt;/strong&gt; (256 MB RAM) — yes, the very first one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Netgear Stora MS2000&lt;/strong&gt; (128 MB RAM)&lt;/li&gt;
&lt;li&gt;Debian 9 on old laptops and VMs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What it can do (short version):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live dashboard with CPU, RAM, network, disk graphs&lt;/li&gt;
&lt;li&gt;Firewall (UFW) with CRUD and ready-made rules&lt;/li&gt;
&lt;li&gt;System monitor + diagnostics (ping, traceroute, speedtest)&lt;/li&gt;
&lt;li&gt;Web console (SSH through the browser)&lt;/li&gt;
&lt;li&gt;Cron scheduler with logs&lt;/li&gt;
&lt;li&gt;User management&lt;/li&gt;
&lt;li&gt;Disks, RAID (0,1,5,6,10), LVM, SMART&lt;/li&gt;
&lt;li&gt;Two-panel file manager&lt;/li&gt;
&lt;li&gt;SMB, NFS, FTP, Rsync&lt;/li&gt;
&lt;li&gt;System checker ("Check everything" button)&lt;/li&gt;
&lt;li&gt;API key rotation for multiple servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full list — 12 sections, 20+ pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first beta: critical mistakes I made
&lt;/h2&gt;

&lt;p&gt;In the first version (beta), I made some silly mistakes, and the Habr community rightly criticized me for them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Worker files, cron scripts, and temporary files were stored &lt;strong&gt;inside the web server's document root&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You could technically send a request to an executable file without authentication&lt;/li&gt;
&lt;li&gt;Everything was in a single SQLite database, so under load you'd get "database is locked"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm not denying it. I'm learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  What was fixed in version 3.6.2:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;All critical files moved outside the website folder (&lt;code&gt;/var/www/minib/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Apache configuration reviewed&lt;/li&gt;
&lt;li&gt;Temporary files and logs are no longer accessible from the outside&lt;/li&gt;
&lt;li&gt;Databases split across multiple SQLite files + request queuing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; A beta is a beta. But now it's a stable release.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTTPS and a self-signed certificate in 5 minutes
&lt;/h2&gt;

&lt;p&gt;Many asked: "What about security?"&lt;/p&gt;

&lt;p&gt;The whole process is documented, but here's the short version:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Host Manager → set the FQDN (e.g., &lt;code&gt;minib.local&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Security → SSL Manager → Create → Self-Signed Certificate&lt;/li&gt;
&lt;li&gt;System → Mini-B Settings → Enable HTTPS&lt;/li&gt;
&lt;li&gt;Apply &amp;amp; test config&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Yes, your browser will complain about the self-signed certificate. But the traffic is encrypted. For a home NAS — that's enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now with plugins (version 3.6.4)
&lt;/h2&gt;

&lt;p&gt;I realized that in any "out of the box" system, you get 80% of what you need — and the remaining 20% is whatever you personally miss.&lt;/p&gt;

&lt;p&gt;That's why from version 3.6.4, &lt;strong&gt;Mini Bucket becomes a plugin platform&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  First plugins:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Log Manager&lt;/strong&gt; — real-time log viewer, search, export, cleanup. No more SSH and remembering paths to &lt;code&gt;/var/log&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin Template&lt;/strong&gt; — a ready-made skeleton for your own plugins with built-in authentication, API, and SQLite support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyone can write their own plugin (backup to S3, Telegram bot, disk temperature monitoring) and share it with the community.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned (this is the most important section)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Never store executables in the webroot&lt;/strong&gt; — this is basic security, and I missed it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split your databases&lt;/strong&gt; — a single SQLite for everything is a pain under load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listen to criticism&lt;/strong&gt; — On Habr, people downvoted me for the donation requests and rookie mistakes. I fixed the mistakes. I kept the donations, but moved them out of the spotlight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can't please everyone&lt;/strong&gt; — my project is niche. It's for people with old hardware and a "let's just get it done" attitude.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source is not just code&lt;/strong&gt; — it's the community. Forum, wiki, docs, plugins.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A marketplace for plugins inside the panel&lt;/li&gt;
&lt;li&gt;Support for more languages (currently mixed Russian/English)&lt;/li&gt;
&lt;li&gt;Integration with popular backup tools (S3, Borg, Restic)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/itprogresscorp/Mini-Bucket" rel="noopener noreferrer"&gt;github.com/itprogresscorp/Mini-Bucket&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo &amp;amp; documentation:&lt;/strong&gt; &lt;a href="https://mini-bucket.ru" rel="noopener noreferrer"&gt;mini-bucket.ru&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forum:&lt;/strong&gt; see the website&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you'd like to support the project
&lt;/h2&gt;

&lt;p&gt;The project lives on donations from people who've found it genuinely useful. If you revived your old NAS with Mini Bucket — I'd appreciate any support. Links are on GitHub and the website.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; Installation on a clean Debian 9 — one command. Everything is described in the README on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.P.S.&lt;/strong&gt; I'm not a programmer. But it works. And it's Open Source.&lt;/p&gt;

</description>
      <category>sysadmin</category>
      <category>opensource</category>
      <category>nas</category>
      <category>php</category>
    </item>
  </channel>
</rss>
