{"id":1521,"date":"2014-12-26T23:37:33","date_gmt":"2014-12-26T22:37:33","guid":{"rendered":"http:\/\/majek.mamy.to\/?p=1521"},"modified":"2015-02-20T11:48:19","modified_gmt":"2015-02-20T10:48:19","slug":"initrd-in-slackware","status":"publish","type":"post","link":"https:\/\/majek.sh\/pl\/initrd-in-slackware\/","title":{"rendered":"Initrd w Slackware"},"content":{"rendered":"<p>W <strong>Slackware<\/strong> jest tylko ma\u0142e howto o initrd, troch\u0119 wi\u0119cej jest w manualu, ale reszta jest ju\u017c owiana tajemnic\u0105 \ud83d\ude42<\/p>\n<p>Przestawi\u0142em si\u0119 pe\u0142nego kernela (w zasadzie zawsze kompilowanego przeze mnie) na minimalne z initrd \u0142adnych kilka lat temu. Od tego czasu wiele si\u0119 nauczy\u0142em o initrd, czasem w dosy\u0107 bolesny spos\u00f3b \ud83d\ude42<\/p>\n<p>Dlatego tym razem opisz\u0119 swoj\u0105 wersj\u0119 radzenia sobie z initrd (troch\u0119 inn\u0105 ni\u017c w manie i oficjalnym readme).<\/p>\n<h1>Instalacja<\/h1>\n<p>W czasie instalacji Slackware potrzebne s\u0105 nast\u0119puj\u0105ce pakiety:<\/p>\n<ul>\n<li>kernel-generic (ale nie kernel-huge!)<\/li>\n<li>kernel-modules<\/li>\n<li>mkinitd<\/li>\n<\/ul>\n<p>i oczywi\u015bcie inne pakiety jakie lubi si\u0119 mie\u0107 \ud83d\ude42<br \/>\nNale\u017cy pami\u0119ta\u0107, \u017ceby NIE instalowa\u0107 pakietu kernel-huge.<\/p>\n<p>Trzeba zainstalowa\u0107 wszystko jak zwykle, przej\u015b\u0107 przez ustawienia Lilo, stref czasowych itd. Na koniec NIE robimy reboota, bo to jeszcze nie koniec!<\/p>\n<p>Teraz nadszed\u0142 czas na przygotowanie nowego initrd.<\/p>\n<ol>\n<li>Robimy chroot do <strong>\/mnt<\/strong> (tam ca\u0142y nowy system powinien by\u0107 nadal zamontowany)<\/li>\n<li>Robimy kopi\u0119 domy\u015blnej konfiguracji mkinitrd:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">cp \/etc\/mkinitrd.conf.sample \/etc\/mkinitrd.conf<\/div><\/div>\n<\/li>\n<li>Edytujemy <strong>\/etc\/mkinitrd.conf<\/strong> ulubionym edytorem i ustawiamy kilka zmiennych\/opcji:\n<ul>\n<li>odkomentowujemy i ustawiamy <strong>MODULE_LIST<\/strong> i <strong>ROOTFS<\/strong> na typ filesystemu u\u017cytego jako nasz root, na przyk\u0142ad:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">ROOTFS=&quot;ext3&quot;<br \/>\nMODULE_LIST=&quot;ext3&quot;<\/div><\/div>\n<p>Nie nale\u017cy martwi\u0107 si\u0119 o modu\u0142y zale\u017cne, bo te zostan\u0105 dodane automatycznie.<\/li>\n<li>je\u017celi u\u017cywamy softwarowego raida, to odkomentowujemy i ustawiamy\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">RAID=&quot;1&quot;<\/div><\/div>\n<\/li>\n<li>je\u017celi u\u017cywamy LVM-a lub szyfrowania, to trzeba odkomentowa\u0107\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">LVM=&quot;1&quot;<\/div><\/div>\n<\/li>\n<li>zalecam r\u00f3wnie\u017c nada\u0107 dla <strong>SOURCE_TREE<\/strong> i <strong>OUTPUT_IMAGE<\/strong> jakie\u015b unikalne nazwy, np.\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">SOURCE_TREE=&quot;\/boot\/initrd-tree-3.10.12&quot;<br \/>\nOUTPUT_IMAGE=&quot;\/boot\/initrd-3.10.12.gz&quot;<\/div><\/div>\n<p>Nie trzeba tego robi\u0107 je\u017celi nigdy nie b\u0119dziesz si\u0119 bawi\u0142 z innymi kernelami ni\u017c ten z dystrybucji.<\/li>\n<\/ul>\n<\/li>\n<li>Wygenerowa\u0107 nowe initrd przez: <strong>mkinitrd -F<\/strong><\/li>\n<li>Doda\u0107 nowe initrd do <strong>lilo.conf<\/strong> tu\u017c po linijce z nazw\u0105 kernela (zaczynaj\u0105c\u0105 si\u0119 od image=), czyli \u017ceby wygl\u0105da\u0142o to jako\u015b tak:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">image = \/boot\/vmlinuz-generic-3.10.12<br \/>\n&nbsp;initrd = \/boot\/initrd-3.10.12.gz<\/div><\/div>\n<\/li>\n<li>Wyj\u015b\u0107 z chroot-a i zainstalowa\u0107 jeszcze raz lilo z nowym konfigiem:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">mount --bind \/dev \/mnt\/dev<br \/>\nmount --bind \/proc \/mnt\/proc<br \/>\nlilo -r \/mnt<\/div><\/div>\n<\/ol>\n<p>Teraz ju\u017c mo\u017cna prze\u0142adowa\u0107 system i cieszy\u0107 si\u0119 ze <strong>Slackware<\/strong> z initrd:-)<\/p>\n<p>Jaka jest zaleta tego sposobu w por\u00f3wnaniu do r\u0119cznego odpalenia mkinitrd z mn\u00f3stwem dziwnych opcji? My\u015bl\u0119, \u017ce b\u0119dzie to wida\u0107 w dalszej cz\u0119\u015bci.<\/p>\n<h1>Utrzymanie systemu<\/h1>\n<p>Czasami przychodzi taki moment, gdy zmienimy kernel, co\u015b uaktualnimy i trzeba w ko\u0144cu przebudowa\u0107 initrd.<\/p>\n<p>S\u0105 2 podej\u015bcia do utrzymywania <strong>Slackware<\/strong> z initrd:<\/p>\n<ol>\n<li>Jedno initrd dla wszystkich kerneli<\/li>\n<li>Ka\u017cdy kernel lub nawet pozycja w lilo ma swoje initrd<\/li>\n<\/ol>\n<h2>Jedno initrd dla wszystkich<\/h2>\n<p>Na pocz\u0105tek nale\u017cy si\u0119 upewni\u0107, \u017ce mamy zakomentowane <strong>CLEAR_TREE<\/strong> lub ustawione na <strong>0<\/strong> w <strong>mkinitrd.conf<\/strong>!<\/p>\n<p>Po instalacji nowego kernela, ale dzia\u0142aj\u0105c jeszcze na starym, trzeba ustawi\u0107 <strong>KERNEL_VERSION<\/strong> na wersje nowego kernela, np.<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">KERNEL_VERSION=&quot;3.17.4&quot;<\/div><\/div>\n<p>Po tym wystarczy uruchomi\u0107 <strong>mkinitrd -F<\/strong><br \/>\nTo wszystko, teraz initrd ma modu\u0142y tak dla starego kernela jak i dla nowego.<br \/>\nOczywi\u015bcie trzeba doda\u0107 now\u0105 pozycj\u0119 w <strong>lilo.conf<\/strong> dla nowego kernela z dok\u0142adnie t\u0105 sam\u0105 nazw\u0105 initrd jak dla starego.<br \/>\nJe\u017celi robimy tylko upgrade kernela, to w takim wypadku nie trzeba nawet dotyka\u0107 <strong>lilo.conf<\/strong> (tak d\u0142ugo jak linijka image= odwo\u0142uje si\u0119 do linku vmlinuz wskazuj\u0105cego na aktualny kernel).<br \/>\nW obu przypadkach na ko\u0144cu trzeba oczywi\u015bcie uruchomi\u0107 <strong>lilo<\/strong>.<\/p>\n<p>Od czasu do czasu warto posprz\u0105ta\u0107 stare i nieu\u017cywane modu\u0142y z initrd. Robi si\u0119 to przez usuni\u0119cie jednego katalogu z <strong>\/boot\/initrd-tree\/lib\/modules\/old-kernel-version<\/strong> i wygenerowanie nowego initrd jak zwykle przez <strong>mkinitrd -F<\/strong>. I uruchomienie <strong>lilo<\/strong> na koniec \ud83d\ude42<\/p>\n<p>Mam nadziej\u0119, \u017ce teraz ju\u017c wida\u0107 przewag\u0119 u\u017cycia mkinitrd.conf zamiast pami\u0119tania wszystkich dziwnych prze\u0142\u0105cznik\u00f3w jakie ostatnio u\u017cyli\u015bmy do wygenerowania poprzedniego initrd (czasem \u0142adnych kilka miesi\u0119cy temu).<\/p>\n<h2>Osobne initrd dla ka\u017cdego kernela<\/h2>\n<p>To podej\u015bcie nie ma wi\u0119kszego sensu je\u017celi masz tylko jeden system i u\u017cywasz tylko jednego dystrybucyjnego kernela, kt\u00f3ry czasem uaktualniasz.<\/p>\n<p>Poza tym osobne initrd jest nawet \u0142atwiejsze ni\u017c podej\u015bcie 'jedno dla wszystkich&#8217;.<br \/>\nJedynym minusem jest to, \u017ce prze\u0142\u0105cznik -F do mkinitrd powoduje wczytanie zawsze tego samego konfiga (\/etc\/mkinitrd.conf) i nie ma innej opcji podania innego konfiga, wi\u0119c za ka\u017cdym razem trzeba sobie skopiowa\u0107 sw\u00f3j odpowiedni konfig w to miejsce.<br \/>\nCzyli dla pierwszego kernela powinni\u015bmy ustawi\u0107 sobie co najmniej unikalne <strong>SOURCE_TREE<\/strong>, <strong>OUTPUT_IMAGE<\/strong> i <strong>KERNEL_VERSION<\/strong>. Generujemy nowe initrd przez <strong>mkinitrd -F<\/strong> i robimy backup <strong>mkinitrd.conf<\/strong> do np. <strong>mkinitrd.conf.3.10.17<\/strong>.<br \/>\nDla ka\u017cdego nast\u0119pnego kernela zmieniamy sobie odpowiednie opcje w <strong>mkinitrd.conf<\/strong>, generujemy initrd, robimy backup i tak dalej.<br \/>\nTym sposobem mo\u017cna mie\u0107 wiele r\u00f3\u017cnych initrd i zapisanych konfig\u00f3w do przebudowania ka\u017cdego z nich. Jest to najbezpieczniejsza metoda przy zabawach z nowym kernelem czy opcjami initrd, bo zawsze mamy jeszcze star\u0105 i dzia\u0142aj\u0105c\u0105 wersj\u0119.<\/p>\n<p>Osobi\u015bcie u\u017cywam podej\u015bcia mieszanego &#8211; dla ka\u017cdej wersji systemu inne initrd (czyli Slackware 14.0 ma swoje, 14.1 ma inne). Kernele w obr\u0119bie jednej wersji zazwyczaj mam ju\u017c ze wsp\u00f3lnym initrd. Eksperymenty te\u017c zazwyczaj mam ju\u017c osobno.<\/p>\n<p>To by by\u0142o na tyle o tej prostszej cz\u0119\u015bci initrd \ud83d\ude42<br \/>\nNast\u0119pnym razem opisz\u0119 jak u\u017cy\u0107 initrd z zaszyfrowanym root-em lub nawet root-em na zaszyfrowanym lvm-ie \ud83d\ude42<\/p>\n<h2>Uaktualnienie 2015.02.20<\/h2>\n<p>Znalaz\u0142em ca\u0142kiem niez\u0142\u0105 dokumentacj\u0119 w tym temacie na <a href=\"http:\/\/docs.slackware.com\/slackbook:booting?s[]=initrd\" target=\"_blank\">Slackware Documentation Project<\/a>. Wygl\u0105da na to, \u017ce niezbyt dobrze sprawdzi\u0142em co jest ju\u017c dost\u0119pne w tym temacie \ud83d\ude42<br \/>\n<\/p>","protected":false},"excerpt":{"rendered":"<p>W Slackware jest tylko ma\u0142e howto o initrd, troch\u0119 wi\u0119cej jest w manualu, ale reszta jest ju\u017c owiana tajemnic\u0105 \ud83d\ude42 Przestawi\u0142em si\u0119 pe\u0142nego kernela (w zasadzie zawsze kompilowanego przeze mnie) na minimalne z initrd \u0142adnych kilka lat temu. Od tego <span class=\"excerpt-dots\">&hellip;<\/span> <a class=\"more-link\" href=\"https:\/\/majek.sh\/pl\/initrd-in-slackware\/\"><span class=\"more-msg\">Czytaj dalej &rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[64,65],"_links":{"self":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/1521"}],"collection":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/comments?post=1521"}],"version-history":[{"count":30,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/1521\/revisions"}],"predecessor-version":[{"id":1597,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/1521\/revisions\/1597"}],"wp:attachment":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/media?parent=1521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/categories?post=1521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/tags?post=1521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}