研究室で自分だけでなく学生も使用する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コマンドを通してみると,エラーメッセージが出まして,そこから,PHPでPostgreSQLに接続することができないと分かりました.
パッケージを入れましょう.
$ 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サービスは,ファイルを書き換えることなく,動くようになりました.