当ウェブサイトは安全と利便性向上のためにクッキー(Cookies)を使用しています。詳細はこちら

法人向けクラウド・ネットワークサービスのPacketFabric

Slackwareをアップグレードする話

2015年12月25日

思わずクレイジーケンバンドなど歌いつつ、世間の年末クリスマス気分なんか気にしないのがインターナップ流です。そう決めました。なので今回はSlackwareのアップグレードのお話。

秋葉原にかつてあった素敵ショップ、Laser5に通いつめていた皆さんならSlackwareや往年のJEパッケージとかのお話も懐かしく思い浮かばれる事でしょうが、Slackwareは今や14.1ですし、いや14.1出てから結構日もたちましたけど、ちょいと頑張ればDockerだって動いちゃう(これは寧ろSlackbuild Projectのおかげか)現役のdistroですから、Slackwareを使っている方も結構いらっしゃるかと思います。いや居て欲しいところです。「あのBSDライクな感じがたまらない」「シンプルでよい」「systemdなんて大嫌い!! なんちゃって」「GRUBもいいけどliloもね」ていう方々を具体的には想定しており、hp2133, Thinkpad X60, X200s などにSlackware-Current入れて使ってる人が対象です。居るかなあ。


Slackwareは、sourceからビルドがやっぱり基本

Slackwareを使っていて何が面白いといって、だいたいのインストールが

$./configure
$make
#make install
#ldconfig 

ていうあたりじゃないかな、と思います。前gccでこれやった時は./configureの結果見て別のlib落としてまた引っかかって、という依存関係の再帰ループを含めて2日くらいかかりました。大変面白い勉強にはなりましたが。

そんな「依存関係は./configureの結果から自分で調べて自分で解決するものだ」的発想に基づくSlackwareではありますが、これをずっとやってると/usr/lib と /usr/local/lib (lib64の場合もあります) が段々把握でき なくなるくらい大量に溜まっていって何がどうなってるのか分かりづらくなるので、パッケージがあるならそっちで済まそう、ていう意識になります。ちなみにこれが発展したのがSlackBuild Project だと理解しています。

素直にDebianにすればええやん、とか誘惑は多いですが、Slackwareを使い続けるのがいいんです。なので頑張ってみます。


Slackwareのパッケージ更新ツール、upgradepkg

SlackBuildなり、セキュリティの更新なり(MLに入るか、lwn.netとかこまめにチェックするのがよいです)バージョンやCURRENTパッケージの更新の際、distroに付属しているツールupgradepkg(とinstallpkg)を使います。

#upgradepkg --install-new

とかすれば即インストールなんですが、インストール後にパッケージの依存関係で引っかかる事もあるかと思うので、段々面倒になってslackware-currentをそのまま動作させることになるのも心情かと思います(特にDesktopとして利用している場合)。currentの更新とかはついつい、

#upgradepkg --install-new ./*/*t?z

で済ませちゃいますね。

…はい、私もこれで大失敗した人間です。ちゃんとマニュアルとかREADME読めよ、ていう話かもしれません。


アップグレードの場合に気をつけること

というわけで、SlackwareのアップグレードやCURRENTのアップデートをする際の注意点などを。

!! glibcは先にアップデートする !!

glibcのアップデートが入る場合に備える必要があります。glibcのアップデートがある時に、

#upgradepkg --install-new ./*/*t?z

とかやると悲惨な目にあいます。アップデートされた/bin のバイナリたちが「アップデートされたglibcのsoが無い」と騒ぎ出すため、結局復旧用ディスクのお世話になる破目に陥るわけです。いやー焦りましたねえあの時は。

なので、まずは、glibc関連を先に入れてあげる必要があります。こんな1行で済みます。

#for i in $(find ./a/ -name "*glibc*t?z") ; do upgradepkg $i ; done

これが済んだら、あとはワイルドカードで大丈夫です。

#upgradepkg --install-new ./*/*t?z

!! liloを忘れない !!

GRUBの場合もそうかな?SlackwareのGRUBは使ったことないのでわかりませんけど、標準のliloについては、kernelが更新された場合に必ず実行する必要があります。これを忘れて再起動すると、起動イメージが読み込めなくて起動不能に陥り、復旧用ディスクのお世話になるわけです。いやーこれも焦りました。失敗しすぎですね。

#/sbin/lilo

!! .newファイルが曲者 !!

Slackwareのパッケージをインストールすると標準の設定ファイルごとインストールされるんですが、すでにカスタマイズした設定ファイルがある場合、設定ファイルを上書きするのではなく.newというsuffixをつけた新しい名前のファイルができます。なんで新しい設定項目とかがある場合など、毎回、どの設定ファイルが更新されて新しいファイルができたのかを確認する必要があります。findとか使えば簡単ですね。

#find ./etc/ -name "*\.new" 

確認はすぐできるので、例えば見つけた.newファイルをそのまま上書きすることも、

#for i in $(find ./etc/ -name "*\.new") ; do \ # mv $i $(echo $i|sed -s "s/\.new$//g") ; done 

可能ではありますが、こういう事をすると、以下のファイルが存在していた場合とても悲惨な目にあいます。
/etc/group.new
/etc/passwd.new
/etc/shadow.new
/etc/ssh/sshd_config.new
/etc/wpa_supplicant.conf.new

rootのパスワードがいきなり真っ白になったり、sshd_configの場合は突然アクセスできなくなったり、wpa_supplicantなら無線LANが突然使えなくなります。とても怖いですね。なので、上書きする前にこういう危ないファイルは.newファイルができても消しておく作業が必要になります。

#rm /etc/group.new
#rm /etc/passwd.new
#rm /etc/shadow.new
#rm /etc/gshadow.new
#rm /etc/ssh/sshd_config.new
#rm /etc/wpa_supplicant.conf.new

結局再起動?

.newファイルを綺麗にすると、だいたい綺麗になってアップグレード・アップデートは完了しますが、やはり再起動する必要はどこかで出てくるものです。(4系は大丈夫とか、modprobeもあるんじゃないかとか、細かいツッコミはお待ちしています)

例えば、何回かアップデートを繰り返してるとなぜかUSBのブロックデバイスを認識しなくなったりします。モジュール再起動などで対応できるんじゃないかとか思いますが、モジュール探したりするのが面倒なので再起動で済ませます(試してるのノートPCだし)。

#reboot -n

こうやって、コマンドをまとめたshファイルを用意してcronで自動更新とかができます。まあcurrentなどはそもそも「安定」では無い んですが、どうです、Debianの apt-get update ; upgrade ; dist-upgrade とそれに続く dpkg 地獄と比べてもそんなに面倒ないと思います。かなり主観は入ってますが。


というわけで、一度シンプルかつ強力なdistroである、Slackwareを試してみるのもいかがでしょうか?

各種お問合せ、お見積もり、資料請求に関するご質問を承っております。まずはお気軽にご連絡ください。

ページトップ戻る