わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Ubuntu 16.04 LTSへのアップグレードは簡単,Webサーバでひと苦労

研究室で自分だけでなく学生も使用するLinuxサーバについて,これまでUbuntu 14.04 LTSでしたが,16.04 LTSにアップグレードしました.
だいぶ前から,SSHでのログイン時に「アップグレード可能だよ,sudo do-release-upgradeしてね」といったメッセージが出ていましたが,学会発表の予稿を提出したタイミングで,更新することにしました.
まずは以下のページに目を通しました.

それと,自分専用のLinuxサーバで,アップグレードをしておきました.常用のscreen環境から,sudo do-release-upgradeを実行しました.途中で何度か「y」とEnterを打ち込みましたが,常に画面に貼りついている必要はありませんでした.
さて,研究室のサーバですが,Vagrantで運用しているゲストOSを停止させ,ほかはそのままの状態で,sudo do-release-upgradeを実行したところ,1時間もかからずに「再起動しますよ」のメッセージが出まして,うまく再起動できました.
帰宅して夕食をとり,子らを風呂に入れてから,SSHでそのサーバに入りました.ログインはできて,コマンド実行も問題なし,と思いきや,Vagrantfileのあるディレクトリに移動してから,vagrant upを実行すると,エラーが表示されました.
自分が管理しているWebアプリケーションはどうか…どれも,使い物にならなくなっていました.また学生からも,CGIが機能していないとメールが届いていました.
Webサーバは起動していましたので,CGIそのものというよりはsuEXECだろうと想像したところ,どうやら当たりで,/etc/apache2/mods-enabledにsuexec.loadがありません(/etc/apache2/mods-availableにはあるのですが).そこで以下のコマンドを実行しました.

$ sudo a2enmod suexec
$ sudo service apache2 restart

これで,環境変数を出力する単純なCGIが,うまく動くようになりました.
次はPHPの対策をしますか.研究としては,学生に「PHP禁止」を通達してかなりの年数になるのですが,1つだけ,サービスがPHPで書かれているのです.
次のページが有用でした.

以下のコマンドを実行しました.

$ sudo apt-get install php libapache2-mod-php
$ sudo vim /etc/apache2/mods-available/php7.0.conf
(「php_admin_flag engine Off」とその上下2行ずつの先頭に「#」をつける)
$ sudo service apache2 restart

なお,上記ページでは「sudo systemctl apache2 restart」とありますが,自分の環境ではうまくいかず,systemctlに替えて従来のserviceコマンドを用いました.
動作確認にはphpinfo…ですが,ブラウザからのアクセスでは「真っ白」です.コマンドラインからだと,こうです.

$ cd (略)
$ php phpinfo.php
<? phpinfo(); ?>
$ cat phpinfo.php
<? phpinfo(); ?>

えっと,これは,「<?php phpinfo(); ?>」とすべきでしたっけ? PHP: PHP タグ - Manualによると,php.ini で short_open_tag を有効にすれば,<?もOKとのことなので,設定しました.具体的には以下のコマンドを実行し,「short_open_tag = Off」となっていた箇所を「short_open_tag = On」に変更してから,保存しました.

$ sudo vim /etc/php/7.0/apache2/php.ini
$ sudo vim /etc/php/7.0/cli/php.ini

Apacheの再起動も忘れずに.

$ sudo service apache2 restart

これで,php phpinfo.phpのコマンドで詳細情報が表示され,ブラウザからのアクセスでも,うまくいきました.
しかし,PHPで作ったサービスは,動きません.phpコマンドを通してみると,エラーメッセージが出まして,そこから,PHPPostgreSQLに接続することができないと分かりました.
パッケージを入れましょう.

$ sudo apt-get install php-pgsql
$ sudo service apache2 restart

これで,サービスが動きました.
最後に,Vagrantの対応です.エラーメッセージは次のとおりです.

$ cd (略)
$ vagrant up
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:

Vagrant has detected that you have a version of VirtualBox installed
that is not supported. Please install one of the supported versions
listed below to use Vagrant:

4.0, 4.1, 4.2, 4.3

(この)Vagrantでは,VirtualBoxのバージョンは4.0〜4.3でないとダメなんだよ,と読めます.インストールされているバージョンを確認します.

$ sudo apt-get install vagrant
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
vagrant はすでに最新バージョン (1:1.7.2) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
$ sudo apt-get install virtualbox
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
virtualbox はすでに最新バージョン (5.0.24-dfsg-0ubuntu1.16.04.1) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。

VirtualBoxのバージョンが5に上がっているのは想定内ですが,Vagrantのバージョンが1.7.2で,これが最新というのは,腑に落ちません.
検索すると,解決策が見つかりました.

Vagrantのパッケージは,Ubuntuのapt-getコマンドとは別の方法でインストールせよ,ということでした.次のページも参照しました.

実行したコマンドは次のとおりです.

$ wget https://releases.hashicorp.com/vagrant/1.8.5/vagrant_1.8.5_x86_64.deb
$ sudo dpkg -i vagrant_1.8.5_x86_64.deb

それから「vagrant up」を実行すると,エラーなく起動処理を始めました.このホストOS(の中のデータベース)にアクセスする,CGIを使ったWebサービスは,ファイルを書き換えることなく,動くようになりました.