openSUSEa suomeksi

openSUSE => Palvelinohjelmat ja ohjelmointi => Aiheen aloitti: SuperOscar - 13.09.2017 - klo:18:48

Otsikko: Miten irrottaa LUKS-osio nätisti sammutettaessa?
Kirjoitti: SuperOscar - 13.09.2017 - klo:18:48
Olen koonnut kaikki ”salaisuuteni” (salasanat eri sivustoille jne.) LUKS-salattuun tiedostoon, jonka tarvittaessa liitän loop-laitteena kansioksi /local/private/$user pienellä skriptillä. Koneen sammutus tiedoston ollessa liitettynä ei ole aiheuttanut ongelmia missään muussa Linux-jakelussa, ei muistaakseni vanhemmissa SUSEissakaan, mutta ainakin parissa viimeisemmässä Leapissä sammutus keskeytyy ikuisen oloisesti ”stop job running for” -viestiin: kello antaa irrottamiseen ensin aikaa jonkin verran, mutta kun se on kulunut loppuun, sitä tuntuu kerta toisensa jälkeen tulevan vain lisää.

Jos muistaisin aina ajaa ennen sammutusta irrotusskriptin, mitään ongelmaa ei olisi, mutta koska en muista, homma olisi hyvä saada jotenkin automatisoiduksi. Irrotusskripti koostuu oleellisesti vain riveistä:

Koodia: [Valitse]
umount /local/private/$user
cryptsetup luksClose ${user}privatefs

Miten tämän ajaminen sammutuksen yhteydessä kannattaisi automatisoida? SystemD:llä vai vanhanaikaisesti? Löysin joitakin malleja SystemD-uniteiksi googlaamalla, mutta en ole vielä kokeillut.
Otsikko: Vs: Miten irrottaa LUKS-osio nätisti sammutettaessa?
Kirjoitti: SuperOscar - 14.09.2017 - klo:08:20
Tällainen ratkaisu on nyt kokeilussa: /etc/rc.d/halt.local-tiedostoon lisätty rivi, jolla kutsutaan skriptiä /usr/local/sbin/umount-privatefss. Tämän sisältö on:

Koodia: [Valitse]
#!/usr/bin/zsh

emulate -L zsh

local mountpoint owner
local -a mountpoints

mountpoints=($(mount | grep /local/private | cut -d " " -f 3))
for mountpoint in $mountpoints; do
    owner=${mountpoint:t}
    umount $mountpoint
    cryptsetup luksClose ${owner}privatefs
fi

(zsh:lla, koska sitä osaan parhaiten.)
Otsikko: Vs: Miten irrottaa LUKS-osio nätisti sammutettaessa?
Kirjoitti: raimo - 15.09.2017 - klo:17:11
Viilaan pilkkua, mutta eikö fi tilalla pitäisi olla done  ;)
Otsikko: Vs: Miten irrottaa LUKS-osio nätisti sammutettaessa?
Kirjoitti: SuperOscar - 16.09.2017 - klo:09:12
Viilaan pilkkua, mutta eikö fi tilalla pitäisi olla done  ;)

Totta! Virhe lienee tullut siitä, kun poistin for-silmukkaa aiemmin ympäröineen ifin. (Eihän minun tietenkään tarvitse tarkistaa, onko $mountpoints tyhjä, koska for ei tee mitään tyhjälle listalle.)

Sitä paitsi en saanut vieläkään kokeiltua, toimiiko tämä. Kone oli erinäisistä syistä pari vuorokautta putkeen käynnissä, ja kun viimein lähdin sammuttamaan, sain ”stop job running” -viestin toisesta liitoksesta: olin mennyt sammuttamaan koneen, johon sammutettavalla koneella oli aktiivinen NFS-liitos.
Otsikko: Vs: Miten irrottaa LUKS-osio nätisti sammutettaessa?
Kirjoitti: SuperOscar - 18.09.2017 - klo:22:46
Pahus, ei toimi :( Mahdollisesti /etc/rc.d/halt.local suoritetaan liian myöhään.
Otsikko: Vs: Miten irrottaa LUKS-osio nätisti sammutettaessa?
Kirjoitti: raimo - 19.09.2017 - klo:20:39
Pahus, ei toimi :( Mahdollisesti /etc/rc.d/halt.local suoritetaan liian myöhään.

Kokeilepas sitä /etc/rc0.d hakemistoon, tai siis linkki skriptiin tuonne.
Tuo tarkoittaa runlevel 0:aa joka on sama kuin sammutus.
/etc/rc6.d on uudelleenkäynnistys.
Otsikko: Vs: Miten irrottaa LUKS-osio nätisti sammutettaessa?
Kirjoitti: SuperOscar - 20.09.2017 - klo:11:11
Kokeilepas sitä /etc/rc0.d hakemistoon,

Tarkoittanet /etc/rc.d/rc0.d? Täytyy kokeilla sitäkin, joskin jotenkin tuntuu, että tuo /etc/rc.d/halt.local on juuri tarkoitettu paikallisiin muutoksiin.

Tein tällä välin yhden kokeen SystemD:llä. Loin guuglaamalla löytyneen mallin mukaan alla olevan laisen .service-tiedoston, vein sen kansioon /usr/local/lib/systemd/system (joka täytyi ensin luoda) ja otin palvelun käyttöön systemctl enable -komennolla.

Ei toiminut sikäli, että tällä oli tasan yhtä vähän kykyä LUKS-liitoksen irrottamiseen kuin suoralla skriptilläkin. Toimi sikäli, että ”stop job running” -ilmoituksen sijaan kone vain mitään kertomatta jämähti odottamaan :o

Nyt olen poistanut tämän palvelun käytöstä, poistanut myös .service-tiedoston ja /usr/local/sbin-kansiossa olleen skriptin, mutta kone jämähtää sammutettaessa silti. Lokikaan ei kerro, mikä menee mönkään: ainoa pikaisesti löytämäni virheilmoitus sanoi, että /var/log-kansiota ei voitu irrottaa; sehän on BtrFS:n alitaltio ja tuskin liittyy asiaan.

Koodia: [Valitse]
[Unit]
After=network.target

[Service]
RemainAfterExit=yes
ExecStart=/bin/true
ExecStop=/usr/local/sbin/umount-privatefss

[Install]
WantedBy=multi-user.target