普段使いのDebianをstretchにアップグレード
私が普段1番使っているパソコンはWindowsではなくLinuxです。
色々あるLinuxの中でもDebianがお気に入りで、長いことdebianを愛用しています。
この度、そのDebianが最新バージョンの9のstretchが公開されたので、8のjessieから早速アップグレードしてみました。
いつもはしばらく様子見なのですが、ヒマな時にやってしまおうと珍しく速攻での更新です。
アップグレード前の下準備
まず状態を確認する
何らかの原因でパッケージを固定している場合問題が発生する可能性があります。
PINの確認
APTのpin機能で固定してる場合解除が必要な場合があります。
/etc/apt/preferences.d/
以下にファイルがあったら内容の確認が必要です。
例えば、vpsを利用していてそのサーバがOpenVZだったりすると、カーネルは更新できないので、起動システムも更新できないこととなります。
すると、debianの場合jessieからsystemdという仕組みで起動しますが、以前のsysvinitを使わなければならない場合sysvinitを固定してあると思います。
この場合は解除すると起動しなくなってしまうのでそのままで良いのですが、それ以外の項目があった場合はそのままで良いか解除するのかの調査が必要です。
ホールドしているパッケージは無いか
# dpkg --get-selections | grep 'hold$'
何も出なければOKですが、何かあった場合は自身で理由があってホールドしていないのであれば確認が必要です。
昔のパッケージの残骸は無いか
以前の古いバージョンのパッケージがアップグレードされて、古いバージョンの残骸が残っている場合があります。
トラブル発生時にややこしいことになるのでキレイにしておきます。
# dpkg -l | awk '/^rc/ { print $2 }'
何も出なければOKです。
何か出たら残骸が残っていますので下記コマンドで削除します。
# apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }')
purgeオプションは(removeはバイナリをアンインストールするだけ)設定ファイルもアンインストールするオプションです。
念の為、必要なくなったパッケージも削除しておきます。
# apt-get autoremove # apt-get autoclean
sources.listをstretch用に編集
準備が出来たら /etc/apt/sources.list を編集します。
ここで1点注意があります。
debianが提供しているサーバへのFTPの接続が廃止されるようなのでURLにftpを使っている場合は全てhttpに変更する必要があります。
あとはお気に入りのエディターでjessieの記載がある場所をstretchに書き換えるだけです。
例:ftpをhttpにして書き換え
#deb ftp://ftp.jp.debian.org/debian stretch main contrib non-free #deb ftp://security.debian.org/ stretch/updates main contrib non-free deb http://ftp.jp.debian.org/debian stretch main contrib non-free deb http://security.debian.org/ stretch/updates main contrib non-free deb-src http://security.debian.org/ stretch/updates main contrib #deb http://www.deb-multimedia.org stretch main non-free #deb http://ftp.debian.org/debian/ stretch-backports main contrib
まずはベースのアップグレード
最初にstretchのデータを読み込みます。
# apt-get update
次にベースのアップグレードを行います。
# apt-get upgrade
このアップグレードですが、リモートでやる場合、ネットワークトラブルなどの要因で途中でコンソールが落ちたりすると死亡します。(以前に経験あり)
なので、リモートでやる場合はコンソールが落ちても大丈夫なようにtmuxやscreenなどのコンソールを利用した方が安心です。
途中でエラーが出て止まったら
何かの依存かパッケージの問題で止まってしまったら、問題となるパッケージを削除してしまうのが1番手っ取り早いです。
# dpkg --remove パッケージ名
消えない場合プロセスを止めてからとか依存しているパッケージの削除とか色々やらないとダメですが、ここで再起動などしてしまうとおかしなことになる可能性があるので起動したまま対処します。
# dpkg -r --force-depends パッケージ名
解決したら再度アップグレードを実行すると続きが始まります。
# apt-get upgrade
タイミングによっては全てのパッケージが保留になっているかも知れません。
保留のパッケージは問題ないのでそのまま全体のアップグレードに進みます。
全体のアップグレード
次は全てのパッケージをアップグレードします。
1番量が多くて時間がかかります。
# apt-get dist-upgrade
ここでも問題が起きる可能性があります。
エラーで止まったら、先の項目のように問題のパッケージを削除してから再度 dist-upgrade を実行して完了させます。
再起動
完了したらいよいよ再起動です。
1番ハラハラする時です。
通常は問題ないでしょう。
起動してきたら
# apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }') # apt-get autoremove # apt-get autoclean
をして掃除しておきましょう。
debian stretchで変わったこと
aptコマンド
今まで定番だったapt-getコマンドですが、jessieから提供されていたaptコマンドが安定して利用できるようになりました。
apt-get update ==> apt update apt-get upgrade ==> apt upgrade apt-cache search hoge == apt search hoge
mysql削除
デフォルトのデータベースがmysqlからmariaDBに変わります。
オラクルのライセンスの問題などの影響だと思いますが、一度mariaDBに移行した後にmysqlへ戻すのは危険かも知れません。
コマンド関連はmysqlと互換性を保っていますのでそのまま利用できます。
phpやperlのバージョンアップ
かなり古いアプリを使っている場合色々と問題が起きると思います。
事前に確認が必要だと思います。
例えばphp、mysql_などのコマンドは無くなっているので、PDOに移行するかmqsqli_に書き換える必要があります。
mysqli_も引数の順番など変わっているので結構大変です。
perlもモジュールが変更になっていたりと、危険があります。
インターフェイスの名前
jessieからアップグレードした場合は何も変わりませんが、クリーンインストールした場合はudev管理のインターフェイスの名前が変わります。
再インストールした場合など注意が必要です。
例えばネットワークインターフェイスの場合
/etc/udev/rules.d/70-persistent-net.rules
にアップグレードした場合のデバイスIDやらMACやら名前が設定されて維持されていますので、再インストールの場合はこの内容のバックアップが必要かも知れません。
net-toolsが消えた
net-toolsで提供されていた色々とベーシックなコマンドがなくなり、iproute2パッケージに置き換えられました。
# apt install net-tools
でインストールできますが、新しく覚えたほうが簡単かも知れません。
よく使うコマンドだと、
ifconfig ==> ip a
arp ==> ip n
netstat ==> ss
route ==> ip r
LXQtを入れてみたがibusが上がってこない
仕方ないのでfcitxで我慢。
その後dpkg-reconfigure にてibus関連を初期化して復帰。
などなど。