Debian 6 “Squeeze” の LTS が終わって Debian 7 “Wheezy” もそろそろ Debian 8 “Jessie” にあげた方が良さそうな気がしてきたので、 さくらの VPS で使っている Debian 環境を Debian 7.9 から Debian 8.3 にあげてみました。

事前準備

第4章 Debian 7 (wheezy) からのアップグレード などを読んで事前に注意点を確認しておきました。

古いパッケージの削除

Squeeze から残っているパッケージを確認するため

aptitude search '~i!~Odebian'

で現在インストールできないパッケージを調べました。

pg_upgradecluster コマンドで移行したのに残したままだった postgresql-8.4 と postgresql-client-8.4 を purge しました。

scponly

scponly を設定しているユーザーがいたのですが、 wheezy で既にパッケージがなくなっていたことに気づいたので、 「scponly wheezy」で検索して出てきた http://chxor.chxo.com/post/74647790171/how-to-restrict-linux-users-to-only-sftp-without を参考にして設定を移行しました。

まず /home/hoge/ 以下の bin dev etc usr を削除しました。

次に sftponly グループを追加して、そのグループに該当ユーザーを追加しました。

% sudo usermod -a -G sftponly hoge
usermod: グループ 'sftponly' は存在しません
zsh: exit 6     sudo usermod -a -G sftponly hoge
% sudo addgroup sftponly
グループ `sftponly' (グループ ID 1001) を追加しています...
完了。
% sudo usermod -a -G sftponly hoge

/etc/ssh/sshd_config の設定を変更しました。 関連するところだけ抜き出すと以下のような変更をしました。

-Subsystem sftp /usr/lib/openssh/sftp-server
+#Subsystem sftp /usr/lib/openssh/sftp-server
+Subsystem sftp internal-sftp

+# sftponly users, chrooted
+Match group sftponly
+ChrootDirectory /home/%u
+AllowTcpForwarding no
+X11Forwarding no
+ForceCommand internal-sftp

sudo service sshd restart で設定を反映して、 sftp コマンドで接続して put や rm ができるのを確認しました。

その他古いパッケージの削除

sudo aptitude purge '~i!~Odebian' で古いパッケージを削除しました。

%  sudo aptitude purge '~i!~Odebian'
以下のパッケージが削除されます:
  doc-linux-text{p} libbind9-60{p} libboost-iostreams1.42.0{p} libdb4.6{p} libdb4.7{p}
  libdb4.8{p} libdns69{p} libevent-1.4-2{p} libisc62{p} libisccc60{p} libisccfg62{p}
  libkadm5clnt-mit7{p} libkadm5srv-mit7{p} libkdb5-4{p} liblwres60{p} liblzma2{p}
  libssl0.9.8{p} libtokyocabinet8{p}
更新: 0 個、新規インストール: 0 個、削除: 18 個、保留: 0 個。
0  バイトのアーカイブを取得する必要があります。展開後に 20.4 M バイトのディスク領域が解放されます。
先に進みますか? [Y/n/?]

/etc/init.d に余計なファイルが残っていると問題がおきるかもしれないので sudo aptitude purge '~c' で設定だけ残っているパッケージも purge しておきました。

%  sudo aptitude purge '~c'
[sudo] password for adminuser:
以下のパッケージが削除されます:
  defoma{p} libept1{p} libexiv2-9{p} libgmp3c2{p} libgs8{p} libgsf-1-114{p} libgtk2.0-0{p}
  libgtk2.0-common{p} libmagickcore3{p} libmagickwand3{p} libmysqlclient16{p} libnl1{p}
  libopenipmi0{p} libpango1.0-common{p} libprotobuf6{p} libserf-0-0{p} libxcb-render-util0{p}
  libxcomposite1{p} libxcursor1{p} libxdamage1{p} libxfixes3{p} libxi6{p} libxinerama1{p}
  libxrandr2{p} mysql-server-5.1{p} odbcinst{p} odbcinst1debian2{p} php5-suhosin{p}
  update-inetd{p} x-ttcidfont-conf{p}
更新: 0 個、新規インストール: 0 個、削除: 30 個、保留: 0 個。
0  バイトのアーカイブを取得する必要があります。展開後に 0  バイトのディスク領域が新たに消費されます
。
先に進みますか? [Y/n/?]

sudo find /etc -name ‘.dpkg-

移行時の設定マージ作業が途中で残っていたファイルがあったので、 sudo find /etc -name '*.dpkg-*' で探して必要に応じて設定をマージして *.dpkg-old*.dpkg-dist は削除しておきました。

プロセス一覧の確認

pstree などでプロセス一覧をみて、アップグレード時に問題が起きそうなコマンドに目星をつけておきました。 一番の大物は apache 2.2 系から apache 2.4 系だと思いました。 slapd は 2.4.31-2+deb7u1 から 2.4.40+dfsg-1+deb8u2 でバージョン番号の変更も少なく互換性も高そうなので、問題はおきなさそうだと思いました。(実際大丈夫でした。)

apt-line の変更

コメントアウトされていない部分の wheezy を jessie に置き換えました。

--- a/apt/sources.list
+++ b/apt/sources.list
@@ -4,18 +4,18 @@

 #deb cdrom:[Debian GNU/Linux 6.0.1a _Squeeze_ - Official amd64 NETINST Binary-1 20110320-15:00]/ wheezy main

-deb http://ftp.jp.debian.org/debian wheezy main non-free contrib
-deb-src http://ftp.jp.debian.org/debian wheezy main non-free contrib
+deb http://ftp.jp.debian.org/debian jessie main non-free contrib
+deb-src http://ftp.jp.debian.org/debian jessie main non-free contrib

-deb http://security.debian.org/ wheezy/updates main contrib non-free
-deb-src http://security.debian.org/ wheezy/updates main contrib non-free
+deb http://security.debian.org/ jessie/updates main contrib non-free
+deb-src http://security.debian.org/ jessie/updates main contrib non-free

 # wheezy-updates, previously known as 'volatile'
-deb http://ftp.jp.debian.org/debian wheezy-updates main contrib non-free
-deb-src http://ftp.jp.debian.org/debian wheezy-updates main contrib non-free
+deb http://ftp.jp.debian.org/debian jessie-updates main contrib non-free
+deb-src http://ftp.jp.debian.org/debian jessie-updates main contrib non-free

-deb http://ftp.jp.debian.org/debian wheezy-backports main contrib non-free
-deb-src http://ftp.jp.debian.org/debian wheezy-backports main contrib non-free
+deb http://ftp.jp.debian.org/debian jessie-backports main contrib non-free
+deb-src http://ftp.jp.debian.org/debian jessie-backports main contrib non-free

 #deb http://ftp.jp.debian.org/debian wheezy-lts main non-free contrib
 #deb-src http://ftp.jp.debian.org/debian wheezy-lts main non-free contrib

upgrade, dist-upgrade

4.4. パッケージのアップグレード に以前は aptitude が推奨されていたこともあったが、今は apt-get がおすすめというようなことが書いてあったので、 apt-get で upgrade しました。

postgresql はまた /usr/share/doc/postgresql-common/README.Debian.gz をみて pg_upgradecluster が必要だと思いました。

Configuring libc6:amd64 のときに apache2 の restart に失敗しましたが、認証周りなどの設定の書き方が変わった影響だろうと思って、後で直せばいいということで気にせず進みました。

その他は特に問題なく dist-upgrade 自体は終わりました。

apache2 の設定調整

/etc/apache2/sites-available/*, /etc/apache2/sites-enabled/*.conf 化などは upgrade 前に作業しておけば停止時間が短くて済ませられたのに、と後から気付きました。

認証・認可設定の変更

/ はアクセス不可で DocumentRoot を個別にアクセス許可していたので、

Order allow,deny
Allow from all

Require all granted

に変更して回りました。

mod_python

apache の error.log を見ると

The mod_python module can not be used on conjunction with mod_wsgi 4.0+. Remove the mod_python module from the Apache configuration.

というエラーが出ていたので、 libapache2-mod-python を purge したら apache2 が起動しました。 しかし後で trac で使っていたのに気付いたので、入れ直して代わりに libapache2-mod-wsgi の方を purge しました。

.conf 化

設定ファイルに .conf が必須化されていたので、 site-available のファイルを hoge.example.com から hoge.example.com.conf のようにに改名して a2ensite しなおしました。

conf.d も available と enabled に仕組みが変わっていたので、 /etc/apache2/conf.d/passenger.confconf-available に移動して a2enconf しました。

passenger-install-apache2-module

sudo apache2ctl configtest で起動しない原因を調べてみると、エラーメッセージを記録し忘れたのですが、passenger がリンクエラーで起動しないということになっていたので、 passenger-install-apache2-module を実行し直しました。

初回は開発用パッケージが足りないということで出てきたメッセージに従い sudo apt-get install apache2-threaded-dev でインストールして再実行して解決しました。 apache2-dev パッケージが入りました。

wheezy のときは apache2-prefork-dev パッケージを入れていたのですが、自動移行はされなかったようです。

SSL 関連

SSLCertificateChainFile を指定していたところがあったので、 SSLCertificateFile に結合した証明書を指定するように移行しました。

NameVirtualHost

NameVirtualHost を指定していたところを削除しました。

trac

trac のプロジェクトごとのページを開くと

Error

TracError: The Trac Environment needs to be upgraded.

Run "trac-admin /srv/trac/fprog.org/testproject upgrade"

というメッセージが出ていたので、その通りに実行しました。

% sudo trac-admin /srv/trac/fprog.org/testproject upgrade
Warning: Detected setuptools version 5.5.1. The environment variable 'PKG_RESOURCES_CACHE_ZIP_MANIFE
STS' must be set to avoid significant performance degradation.
アップグレードが終了しました。

次のコマンドを実行すると Trac のドキュメントをアップグレードできます:

  trac-admin /srv/trac/fprog.org/testproject wiki upgrade

wiki upgrade も促されたので、実行しました。

すると http://www.fprog.org/projects/testproject が

設定エラー
None という名前の IRequestFilter インターフェイスの実装を見つけられません。コンポーネントが有効になっているかチェックするか、trac.ini の [trac] request_filters オプションを更新してください。

に変わったので、 /srv/trac/fprog.org/testproject/conf/trac.ini

request_filters = None

request_filters =

に変更しました。 キーワードが一般的すぎて検索しきれなかったので、バグ報告などはしていません。

http://www.fprog.org/projects の Available Projects を見て、他のプロジェクトも同様に upgrade と request_filters の修正をしました。

nadoka さん

iconv を使っていたところを kconv を使うように変更しました。

w3ml

apache のエラーログに

AH01215: ./w3ml:8:in `load'
AH01215: : /home/w3ml/etc/w3ml.conf:10: invalid multibyte char (UTF-8) (SyntaxError)
AH01215: /home/w3ml/etc/w3ml.conf:10: invalid multibyte char (UTF-8)
AH01215: \tfrom ./w3ml:8:in `<main>'
End of script output before headers: w3ml.cgi

と出ていたので、 /home/w3ml/etc/w3ml.conf の先頭に

# -*- coding: euc-jp -*-

を追加しました。 これで表示は問題なく見えるようになりましたが、メールの取り込みなどがちゃんと動くかどうかはまだ様子見です。

tdiary

ホスティングしている tdiary を確認してみると

no such file to load -- redcarpet.so (LoadError)
/usr/lib/ruby/vendor_ruby/redcarpet.rb:1:in `require'

とうエラーが出ていて、 dpkg -L ruby-redcarpet を確認してみると redcarpet.so は 2.1 用しかなかったので、 wheezy にあげたときに public_html/diary/index.rb#!/usr/bin/ruby1.8 に変更していたのを #!/usr/bin/ruby に変更しました。

すると次は 500 Internal Server Error とだけ出るようになったので、 apache のエラーログを確認してみると

AH01215: /usr/lib/ruby/2.1.0/cgi/util.rb:37:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
AH01215: \tfrom /usr/lib/ruby/2.1.0/cgi/util.rb:37:in `escapeHTML'
AH01215: \tfrom /usr/share/tdiary/index.rb:50:in `rescue in <top (required)>'
AH01215: \tfrom /usr/share/tdiary/index.rb:16:in `<top (required)>'
AH01215: \tfrom /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
AH01215: \tfrom /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
AH01215: \tfrom index.rb:2:in `<main>'

というエラーが出ていました。 そこで /usr/share/tdiary/index.rbcoding: utf-8 から coding: ascii-8bit に変更したところ、 public_html/diary/filter/antirefspam.rb:240: invalid multibyte char (UTF-8) というエラーが確認できたので、 コメントが euc-jp で書かれていたのが確認できたので antirefspam.rbcoding: euc-jp を追加しました。 public_html/diary/filter/default.rb でも同様のエラーが出たので coding: ascii-8bit を追加したところ、 正常に表示できるようになりました。

最初の 500 Internal Server Error については tdiary-core に報告したところ、直った ようです。

修正コミットでは update.rb も同様の修正がされていたので、 /usr/share/tdiary/update.rb も同様に coding: ascii-8bit にしておきました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published