Zbavte se konfigurace v ~ pomocí rewritefs

Jan Knížek 29. 2. 2016

Domovský adresář bývá plný konfiguračních souborů. Rewritefs je umožňuje všechny přesunout na jiné místo, aniž bychom při tom museli složitě upravovat nastavení jakékoliv aplikace.

Upozornění: před provedením jakýchkoliv kroků pečlivě zazálohujte svůj domovský adresář, především konfigurační soubory. Data, která smažete na virtuálním disku, se smažou i na reálném disku.

Princip

Domovské adresáře uživatelů přesuneme do /mnt/home. Poté připojíme virtuální souborový systém rewritefs do adresáře /home, který je postavený na FUSE (viz článek FUSE: celý svět je souborový systém). Za pomoci regulárních výrazů nadefinujeme, jak budeme měnit cesty k souborům. Pokud budeme chtít přečíst soubor /home/cesta/jmeno, rewritefs vrátí file deskriptor souboru /mnt/home/cesta/jmeno. Pokud se navíc ptáme na skrytý systémový soubor (začínající tečkou) s adresou /home/user/.soubor, přeložíme jeho adresu na  /mnt/home/user/.config/soubor.

Z našeho pohledu soubory vypadají, jako kdyby byly umístěné v adresáři /home, ale ve skutečnosti je čteme odjinud. K libovolnému souboru umístěnému v adresáři .config budeme moci přistupovat, jako kdyby byl umístěn přímo v adresáři uživatele. Protože tam ale ve skutečnosti není, neobjeví se ani ve výpisu adresáře. Tedy nás nebude otravovat a zároveň všechny aplikace budou mít přístup ke svým konfiguračním souborům.

Instalace

V Arch Linuxu stačí nainstalovat balíček rewritefs-git v AUR. Pro ostatní distribuce je nutno zkompilovat kód. Nainstalujeme závislosti FUSE a PCRE, které by měly být v hlavních repozitářích. Poté naklonujeme gitový repozitář https://github.com/sloonz/rewritefs a spustíme make && sudo make install. Poté by již měl být příkaz rewritefs v shellu dostupný.

Ještě je nutné přidat do souboru /etc/fuse.conf řádek user_allow_other, aby k souborům mohli přistupovat i jiní uživatelé než vlastník procesu rewritefs.

Automatické spuštění po startu

Rewritefs sice není nutné spustit až po té, co je připojen oddíl /mnt/home, ale rozhodně musí být zapnutý ještě před tím, než nějaká aplikace bude přistupovat k datům. Vytvoříme démona v systemd a protože můžeme snadno nastavit, které disky potřebuje mít připojené ještě před spuštěním, můžeme umístit bez obav svůj konfigurační soubor do domovského adresáře. Démon rewritefs.service bude sídlit v /etc/systemd/system (bude systémový a bude spouštěn ještě před načtením uživatelského prostoru) a vypadá následovně:

[Unit]
Description=rewritefs daemon
RequiresMountsFor=/mnt/home

[Service]
Type=forking
ExecStart=/usr/local/bin/rewritefs -o config=/mnt/home/knezi/config/rewritefs,allow_other /mnt/home/knezi /home/knezi


[Install]
WantedBy=default.target

V příkladu připojujeme oddíl /mnt/home/knezi do /home/knezi, rewritefs při spuštění provede fork. Rewritefs zachovává práva uživatele, který čte, upravuje nebo spouští soubory. Z tohoto důvodu musí démon běžet s právy superuživatele. Pokud z nějakého důvodu démona chceme pustit s oprávněními běžného uživatele, přidáme do sekce [Service] řádku User=uživatel. Pak ale nebude možné přistupovat k souborům v /home, k nimž má přístup pouze root. Přes /mnt/home to samozřejmě možné bude.

Konfigurace

Pokud chcete konfiguraci nějak více upravovat, doporučuji si ji nejdříve zkoušet na nějakých jiných adresářích. Rewritefs bere jako parametr dvě libovolné cesty. Tedy není potřeba mít více oddílů.

Za přepínačem -o následuje seznam nastavení oddělených čárkami. Využíváme dvě, cestu ke konfiguračnímu souboru a volbu allow_other, která umožňuje přístup i ostatním uživatelům do VFS. Pozor: i když volbu allow_other neuvedeme, ostatní uživatelé stále mohou mít práva číst /mnt/home/knezi. Seznam dalších voleb vypíše příkaz  rewritefs -h.

Konfigurační soubor vypadá následovně:

m#^(?!\.)# .
m#^\.(cache|config|local)# .
m#^\.# .config/

Obecná struktura regulárního výrazu je m#vzor# náhrada, kde # je libovolný oddělovač. Pokud je náhrada tečka, pak se soubor nechá beze změny. První řádka tedy říká, že libovolné soubory, které nezačínají tečkou se mají předat rovnou (tedy se v našem případě konfigurace jen přidá na začátek absolutní cesty /mnt), stejně tak mají zůstat stejné adresáře .cache, .config, .local. V .config  budeme mít přímo uloženy své soubory, takže bychom se zacyklili. Poslední řádka říká, že každý tečkový soubor se bude hledat v  .config.

Celou konfiguraci je nutné pečlivě si promyslet. Podle námi definovaných pravidel se totiž i například .localbin nebude překládat. Buď je tedy nutno přidat za local lomítko, nebo nechat .localbin v domovském adresáři.

Jediný program, u kterého jsem narazil na problém, byl ncmpcpp. Tento program standardně hledá konfigurační soubor v ~/.ncmpcpp/config  a v ~/.config/ncmpcpp/config. V obou lokacích samozřejmě našel stejný soubor a při čtení druhé konfiguračního souboru skončil s chybou: daná vlastnost je již definována. Řešením může být překládat adresy do jiného adresáře, nebo pouštět  ncmpcpp -c ~/.ncmpcpp/config.

Migrace dat

Odsud už je nutné změny provádět bez procesů, které mají otevřené nějaké soubory v domovském adresáři. Je tedy nutné všechny uživatele kompletně odhlásit a další úpravy provádět z terminálu pod superuživatelem (do terminálu se přepneme pomocí Ctrl+Alt+F2). Doporučuji si nejdříve celý článek dočíst a poté provést uvedené změny.

Musíme všechny své tečkové soubory přesunout z domovského adresáře do ~/.config/. S tím nám pomůže následující skript (není zcela univerzální, například soubor obsahující mezeru nepřesune; jedná se spíše o ilustraci):

widgety

for x in `ls -A|grep "^\." | grep -v "^.\(config\|local\|cache\)$"`; do
    mv "$x" .config/`echo "$x" | sed s/^.//`
done

Zbývá ještě správné připojení disků. Pokud pro domovský adresář není vyhrazen speciální oddíl, stačí přesunout /home do /mnt/home. V opačném případě je nutno v souboru /etc/fstab nahradit bod připojení /home za /mnt/home. Problém by ještě mohl nastat, pokud používáme GPT. Pak má domovský oddíl příznak Linux home a skript systemd-gpt-auto-generator jej připojí bez ohledu na fstab. Příznak odstraníme pomocí programu cgdisk. Spustíme cgdisk zařízení a nastavíme typ 8300 – Linux filesystem. Nyní by se po restartu počítače měl VFS oddíl správně připojit a příkaz df by jej vypsat:

Souborový systém  1K bloků     Užito    Volné Uži% Připojeno do
...
rewritefs        218267540 186067508 21720608  90% /home

Závěr

Rewritefs je efektivní způsob, jak se zbavit konfiguračních souborů. Používám jej delší dobu bez problému s přístupem k souborům či nějakým znatelným zpomalením. Pokud by jakýkoliv program přestal fungovat, podělte se s námi v diskusi.

Našli jste v článku chybu?
Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

Podnikatel.cz: Insolvence LevneElektro.cz? Začíná boj o peníze

Insolvence LevneElektro.cz? Začíná boj o peníze

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

Lupa.cz: Aukro.cz mění majitele. Vrací se do českých rukou

Aukro.cz mění majitele. Vrací se do českých rukou

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

Lupa.cz: Hackeři mají data z půlmiliardy účtů Yahoo

Hackeři mají data z půlmiliardy účtů Yahoo

120na80.cz: Hrbatá prsa aneb mýty o implantátech

Hrbatá prsa aneb mýty o implantátech

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Podnikatel.cz: EET pro e-shopy? Postavené na hlavu

EET pro e-shopy? Postavené na hlavu

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Vitalia.cz: 5 důvodů, proč jet na výlov rybníka

5 důvodů, proč jet na výlov rybníka

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Vitalia.cz: Inspekce našla nelegální sklad v SAPĚ. Zase

Inspekce našla nelegální sklad v SAPĚ. Zase

Podnikatel.cz: Znáte už 5 novinek k #EET

Znáte už 5 novinek k #EET

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT