普段使いのDebianをstretchにアップグレード

2017年6月24日Linux,ブログ

私が普段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関連を初期化して復帰。

などなど。