10/18/2016

[note] ubuntu16.10導入 ※tcshユーザは回避推奨

半期に一度の恒例であるところのubuntuアップグレードがまたやって参りました。コードネームはYakkety Yak、おしゃべりなヤク(ヒマラヤ近辺に生息する毛長牛)さんです。

とはいえ、既にその変更の対象はクラウドはじめサーバ周りに移行して久しいところ、今回もクライアント関連については表面上は無論内部的にも殆ど変更はなく、従ってユーザ側では適用する理由に乏しいだろう事は周知の通り。また前回の16.04がLTS版だった事もあって、尚更適用を見送る向きも多いでしょう。しかし、どうせ次のLTSリリースまで全く上げないわけにもいかないだろうし、と最近の例と同じく極めて消極的ながらの適用に踏み切ったのでした。

今回の対象は、デスクトップ1台、ノート5台。全てubuntu、もしくはlubuntuの16.04LTSからのアップグレード適用です。手順はいつもの通り、update-managerの[設定]-[Ubuntuの新バージョンの通知]を[すべての新バージョン]に変更してからupdate-managerを再起動し、ダイアログに追加表示される[アップグレード]を選択します。後は画面の指示に従い、時々挿まれる確認に応答しつつ待つことしばし、で完了。

で、結論から言えば、lubuntuから上げたものはアップグレードの最後の辺りで一部パッケージのインストールに失敗し、不完全な状態になってしまうため、修正が必要になります。また、ubuntuから上げたものについても、アップグレード自体は特に問題なく完了したものの、tcshがtabキーを押しただけでクラッシュするようになる不具合に遭遇。総じて、久々に嫌な感じです。

<lubuntuのアップグレード時の一部失敗について>

まず、lubuntuの場合に問題が生じたパッケージは、lubuntu-desktopです。これのインストール時に失敗し、アップデートが不完全につき問題が生じるかもしれない旨警告が表示されます。もっとも、それをスルーすれば一応インストールは完了し、概ね普通に使用する事は可能ではあります。ただ、そのまま使い続けるにも、アップデートをしようとするとエラーが出るので、やはり支障なしとは到底言えない状態になってしまうのです。具体的には、下記のようなエラーが表示されます。

[lubuntuアップデート後、apt upgrade時エラーメッセージ]

($ sudo apt-get upgrade実行後)

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完
これらを直すためには 'apt-get -f install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 lubuntu-desktop : 依存: gnome-software しかし、インストールされていません
       依存: language-selector-gnome しかし、インストールされていません
       依存: software-properties-gtk しかし、インストールされていません
       依存: system-config-printer-gnome しかし、インストールされていません
E: 未解決の依存関係があります。-f オプションを試してください。

という。割と基本的なパッケージがインストールされていない感じでとてもいけません。仕方がないので、下記コマンド。

$ sudo apt-get -f install

これをすると、ざっと数十個ものパッケージが強制適用され、その後少し使ってみたところ、目に見える問題はなくなったように見えます。が、この手の強制適用は不整合を来す可能性も懸念されるわけで、やってしまった、という敗北感が漂う結果になってしまったのでした。

これについては、やはり適用を早まったかなと。というのも、後から確認してみたところ、適用した時点ではlubuntuはまだ16.10リリースを正式にはしていなかったようなのです。トップページにはまだアナウンスが出ていませんでした。あらかじめ確認しておけばよかった、と少し後悔及び反省。ただ、今はもうリリースが公表されているので、既にこの問題は解決されているだろうとは思いますけれども。

<tcshがtabキー押下で即落ちる不具合について>

次に、ubuntuからのアップグレードで発生した不具合について。具体的には、サーバとして運用しているデスクトップ(64bit版)について、アップグレード後にターミナルが落ちるようになってしまったのです。トリガーはTABキー。要するに、コマンドプロンプト上でオートコンプリートをしようとするとsegmentation faultで端末が落ちるのです。オートコンプリートの利用はもう身に染み付いているわけで、それが禁じられた状態では実際のところまともに使えません。ユーザ側からすれば、近年稀に見る程の酷い不具合と言えるでしょう。

本当に致命的なので、嫌でも早急に対処をせざるを得なくなったわけです。とにかく原因部分の絞り込み乃至特定が必要、という事で色々試してみたところ、本現象は、xtermとかLXTerm等の端末エミュレータや、Xではないコンソール等、ターミナルの種類を問わず再現しました。この事から、アプリケーションやライブラリの問題ではなく、シェルの問題だろうと見込み、端末上で各種シェルを起動して比較しつつ確認してみると、デフォルト設定にしていたtcsh上では必ず落ちて元の端末に戻る一方、bash上では問題なく機能する事が確認されました。ということであっさり原因はtcshに確定。バージョンは下記です。

[16.10アップグレード後に落ちるtcshのバージョン]

 $ tcsh --version

 tcsh 6.18.01 (Astron) 2012-02-14 (x86_64-unknown-linux) options wide,nls,dl,al,kan,rh,nd,color,filec

本件問題のtcshは、以前bashに酷いセキュリティ関連バグが発生した時に代替として切り替え、以来常用して来たものです。が、流石に補完が効かないというのでは使えませんので、bashの問題も片付いた筈だし、と下記コマンドでbashに戻し、環境変数等諸々の設定等も移行してひとまず解決。

 $ chsh -s /bin/bash

しかし冷や汗をかきました。心臓に悪いので勘弁して欲しいです。ていうか、何故にtcshのような、古くからあって枯れ切った、かつ重要極まりない基幹部分で、かように致命的な不具合が入り込み、極めて露見もしやすい症状の筈なのに見過ごされ、あまつさえそのまま正式リリースに乗ってしまうのか、全く以って理解し難いところなわけです。

なお、この16.10のtcshがtabキーで落ちる現象については、下記の通り8月末の時点でβテスト段階で各所でBug報告も上げられていたようなのですが、何故かリリース後の今になっても未だに対処されていません。基幹部分につき修正に困難を伴う等の事情はあるのかもしれませんが、こんな重大なバグを放置したままのリリースを正当化し得る理由とは到底考えられず、従って許容し難いものと言わざるを得ないところであり、把握していなかったというのならディストリビュータとしての最低限の注意義務を果たしていない事になるし、把握していたというのなら尚更悪質と言わざるを得ないわけで、率直に言って話にならないと思うのですよ。いずれにせよCanonicalには猛省を求めたいと思います。

tcsh crashed with SIGSEGV in __GI__rewinddir()

一応、本不具合は64bit版のみで発生するもので、32bit版では発生しません。が、64bitの方が圧倒的に多数だろう今、大した意味もないわけですけれども。

というわけで、久々に遺憾な経過を辿った今回のアップグレードですが、まあ一応修正は出来たという事で、ひとまずはこれでおしまい。やれやれです。

(追記)

これはubuntu自体の問題ではないのですけれども、16.10では、PNG画像ライブラリlibpngのバージョンが大幅に上がっていて(16.04LTSでは1.2.54、16.10では1.6.24or1.6.25)、これに伴いNULL定数等が廃止されたり、構造体メンバへの直接参照が禁止される等の変更がなされているため、それらを利用しているコードはビルドに失敗するようになっています。自身でコードを書くような人の場合は容易に対処出来るでしょうけれども、これも留意すべき点でしょうか。

(追記その2)
発生から待つこと約1ヶ月、ようやく修正版のtcshがリリース。少し不穏な感じもしますが。
[続き記事 [note] ubuntu16.10のtcshに修正版がようやくリリースされました]

[関連記事 [note] Lubuntuはやはり軽くて良いけれど]
[関連記事 [note] Ubuntu16.04LTS導入]
[関連記事 [IT] bashに最悪の脆弱性発覚]