How to upgrade Ubuntu 16.04 from 14.04
2016-04-28にUbuntu 16.04(コードネームはXenial Xerus)がリリースされた。2年前に自分のデスクトップPCに初めてインストールしたLinuxであるUbuntu 14.04から16.04に更新した。いくつか問題があったので手順を記しておく。
結論からいうと,14.04から16.04へのアップグレードは2016-06-21まで待ったほうがいい。Ubuntuでは2年毎に長期サポート版(LTS:Long Term Support)がリリースされている。最初のリリースから3ヶ月後の16.04.1LTSのリリースで,14.04から16.04への移行用のアップグレードが可能となる予定となっている。このリリースがされたら,UbuntuのSynapticsからアップグレードが可能となる。それまでに,バグなどが直る可能性があるので,緊急でなければまだ待ったほうがいいだろう。
インストール手順
インストール手順は「Ubuntu 16.04 LTSをインストールする – Narrow Escape」を参考にした。以下にインストール手順を記す。
- 必要なデータをバックアップ。
アップグレードで何か問題があったときのために,HDDに大事なデータをバックアップする。ただし,時間がかかるので,バックアップするファイルは絞る。例えば,オンラインストレージやgithubで管理している データは既にバックアップがとれているようなものなので,対象外とし,本当にローカルPCでしか管理していないデータをバックアップする。例えば以下のファイルをバックアップした。
- VirttualBoxのイメージ:~/VirtubalBox VMs
- メール:~/.thunderbird
- 動画・音声:~/Videos
- Ubuntu 14.04のアップデートを完了させる。
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y - アップグレードに必要なパッケージをインストールしアップグレード。
sudo apt-get install update-manager-core -y
sudo do-release-upgrade -dコマンドを実行すると,最初に2回ほど質問されるのでyで回答しておく。
パッケージのダウンロードに20分ほどかかり,その後の展開・インストールで合計1-2時間ほどかかった。
不具合対応
通常であれば,この後に再起動すればうまくいくのだと思われる。しかし,この再起動で問題が起きた。「Broken Ubuntu 16.04 installation after upgrade (corrupt kernel?) – Ask Ubuntu」で質問されているように,起動時に以下のメッセージが表示されて起動できなかった。
[ 8.253532] Kernel panic - not synching: Attempted to kill init! exitcode=0x00007f00
おそらく,いくつか対処方法があるのだと思うが,自分が行った方法を記しておく。基本的には,「Ubuntu 14.04から16.04への更新でハマった場合の対処法 (Ubuntu) – Qiita」を参照した。
おそらく,一番確実なのはLive CDから起動することだろう。ただし,いちいちCDやUSBにOSを書き込むのは面倒くさいので,今回はこの方法は使わなかった。
PCの起動
参照:起動時にカーネルパニックする – Ubuntu 14.04から16.04への更新でハマった場合の対処法 (Ubuntu) – Qiita
上記のKernel panicが起きた状態ではどうしようもないので,電源を長押しして強制的に電断する。そして起動する。すると,GNU GRUBの画面(以下の画像の左側)が表示される。
ここで,[Advanced options for Ubuntu]>[Utuntu, with Linux 3.13.x-xx-generic (recovery mode)]にカーソルを合わせ,eキーを押下する。
起動時のコマンドの設定画面(以下の画像の左側)になるので,下から2行目のlinux
から始まる行の最後に,init=/sbin/upstart
を追加する。その後,C-x(CTRL+x)で保存して終了する。すると,リカバリーモードでPCが起動する(以下の画像の右側)。
ここで,[resume]を選択すると,PCを起動しようとするが,telinit
が見つからなくて失敗して固まる。
upstart-sysvのインストール
参照:telinitもしくはrunlevelが見つからなくて起動できない – Ubuntu 14.04から16.04への更新でハマった場合の対処法 (Ubuntu) – Qiita
これを防ぐために,[root]を選択し,upstart-sysv
のインストールを試みる。
しかし,リカバリーモードだと以下2点の制限を受ける。
- ファイル書き込みができない。
- インターネットにつながらない。
まず書き込みができるように以下のコマンドで,ファイルシステムをマウントしなおした。
mount -o remount,rw /dev/sda2
今回は/dev/sda2
を指定したが,別にルート/
を指定しても大丈夫な気がする。
書き込みができるようになったので,今度は以下のコマンドでインターネット接続を有効にする。
dhclient eth0
eth0がダメならeth1を試す。これでインターネット接続が有効になるので,以下のコマンドでupstart-sysv
パッケージをインストールする。
apt-get install upstart-sysv
なお,このインストール時に依存関係で他のパッケージをアンインストールしないと,upstart-sysv
がインストールできなかった。Ubuntu 16.04が起動できたらインストールし直そう。
ここまで終わったら,exit
かC-dでターミナルを終了させる。その後,[resume]でPCが起動できるはずだ。
起動後に,GUIが立ち上がらなければ,upstart-sysv
のインストール時に,依存関係を解消させるためアンインストールしてしまったのかもしれない。その場合,例えば以下のコマンドで必要なGUI環境をインストールすればよいだろう。
sudo apt-get install unity # Ubuntu default desktop
sudo apt-get install gnome-desktop # GNOME desktop
まとめ
ひとまずこれでUbuntu 14.04からUbuntu 16.04にアップグレードしてPCを操作できるようになった。
しかし,この他にコンパイラーのgccの実行時に以下のエラーが出るなど,他にも問題はありそうだ。
/home/senooken/local/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o: unrecognized relocation (0x2a) in section `.init' /home/senooken/local/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status
冒頭で説明したとおり,急ぐ必要がないのであれば,Ubuntu 14.04LTSから移行のためのリリースである2016-06-21のUbuntu 16.04.1LTSまで待ったほうがよいだろう。