So-net無料ブログ作成
検索選択

Debian 9.0へのアップグレード後の不具合対応 [Debian]

Debian 9.0 へのアップグレード後に発生した不具合の残件対応を行った。
詳細は、以下の通りである。

・発生した不具合の一覧
 cf. http://dan-project.blog.so-net.ne.jp/2017-06-25

1. 発生事象


X アプリでノード名を付けて指定したディスプレイを開けない。

(例)
% xterm -display localhost:0
xterm: Xt error: Can't open display: localhost:0


・パッケージのバージョン
 xserver-xorg 1:7.7+19
 xserver-xorg-core 2:1.19.2-1
 xinit 1.3.4-3+b1


2. 対処方法


/usr/bin/Xorg を変更し、起動時のオプションに '--listen tcp' を追加する。

# cd /usr/bin
# diff Xorg Xorg.org
8c8
<       exec "$basedir"/Xorg.wrap -listen tcp "$@"
---
>       exec "$basedir"/Xorg.wrap "$@"
10c10
<       exec "$basedir"/Xorg -listen tcp "$@"
---
>       exec "$basedir"/Xorg "$@"

3. 備考


(1) /usr/bin/Xorg の変更により、6000 番ポートが Listen 状態になる。

% netstat -an | grep 6000
tcp        0      0 0.0.0.0:6000            0.0.0.0:*           LISTEN
tcp6       0      0 :::6000                 :::*                LISTEN


(2) /etc/X11/xinit/xserverrc の変更では効果がない。

# cd /etc/X11/xinit
# diff xserverrc xserverrc.org
3c3
< exec /usr/bin/X "$@"
---
> exec /usr/bin/X -nolisten tcp "$@"


Debian 9.0へのアップグレード時に発生した不具合への対応 [Debian]

Debian 9 のテスト環境作成のため、Debian 8.8 から Debian 9.0 へのアップグレードを行った。
以下は、その際に発生した事象とその対応をまとめたものである。

1. アップグレードの手順


これまでのバージョンでの実施手順と同様である。
( https://www.debian.org/releases/stretch/i386/release-notes/ch-upgrading.ja.html )


2. 発生事象 (対応済)


(1) アップグレード後に LVM が認識されない


・ブート時に LVM が認識されない。
・マウントに失敗し、システムが正常に起動できない。
・emergency mode になる。


(a) 対処方法


下記の手順を実施し、initramfs image を更新する。

・emergency mode で、root のパスワードを入力
・lvscan を実行
・マウントに必要な VG に対して、'vgchange -ay ' を実行
・exit を実行(emergency mode の終了)
・/boot/initrd.img-* の更新
 (update-initramfs -c|-u -k `uname -r`)
・システムの再起動


(2) コンソールで、日本語キーボードとして認識されない


・/etc/default/keyboard は Debian 8 からの流用である。
・'localectl set-keymap jp106' の実行では改善されない。
・X 環境では日本語キーボードと認識される。


(a) 対処方法


/etc/rc.local に下記の設定を追加する。

loadkeys jp106


(3) 一般ユーザーで X を 起動できない。


・パッケージのバージョン: xserver-xorg 1:7.7+19
・/var/log/Xorg.0.log が作成されない。
 (~/.local/share/xorg/Xorg.0.log が作成される。)
・ログファイルのエラーメッセージは、下記の通りである。

Fatal server error:
(EE) parse_vt_settings: Cannot open /dev/tty0 (Permission denied)


(a) 対処方法


/etc/X11/Xwrapper.config を変更する。

# diff Xwrapper.config Xwrapper.config.org
14,15c14
< allowed_users=anybody
< needs_root_rights=yes
---
> allowed_users=console


・上記の対応後、/var/log/Xorg.0.log が作成されるようになる。


(4) mplayer で ~/.mplayer/{config,input.conf} の設定が反映されない。


(a) 原因


mplayer から mpv に変更されたためである。
・mplayer は mpv へのシンボリックリンクとなっている。
・mplayer と mpv では、設定ファイルのパスが異なる。


(b) 対処方法


下記のパスに設定ファイルを作成する。

~/.mpv/{config,input.conf}
または
~/.config/mpv/{mpv.conf,input.conf}


(c) 設定ファイルへの設定例

% cat ~/.mpv/config
# display size and aspect ratio
video-aspect=16:9
geometry=320

% cat ~/.mpv/input.conf
# key bindings
MOUSE_BTN3 volume 1
MOUSE_BTN4 volume -1


(5) gnome-session が想定通りの動作とならない。


・パッケージのバージョン: gnome-session-flashback 3.22.0-3
・'exec gnome-session --session=gnome-flashback' で起動できない。


(a) 対処方法


gnome-session の起動部分を下記のように変更する。
( cf. https://wiki.archlinuxjp.org/index.php/GNOME_Flashback )

(変更前)
exec gnome-session --session=gnome-flashback

(変更後)
export XDG_CURRENT_DESKTOP=GNOME-Flashback:GNOME
exec gnome-session --session=gnome-flashback-metacity


(b) gnome-session のバージョンの確認方法


・gnome-session --version: 出力なし
・/usr/lib/gnome-session/gnome-session-binary --version: 出力なし
・gnome-session-inhibit --version: バージョンを表示


3. 発生事象 (未対応)


(1) X アプリでノード名を付けて指定したディスプレイを開けない。


・パッケージのバージョン: xserver-xorg 1:7.7+19
・'Xt error: Can't open display' と出力される。
・'xhost +' を実行しても状況は変わらない。
・xauth を無効化しても状況は変わらない。
・':0' で指定した場合には開ける。

(例)
% xterm -display localhost:0
xterm: Xt error: Can't open display: localhost:0


bashでの配列の使用 [Linux]

Perl スクリプトをシェルスクリプト(bash on Linux) に移植する必要があり、対応を行った。
この過程で、スクリプトの可読性を良くするために配列(連想配列を含む)を使用した。

以下は、備忘録として、配列の使用に関して要点をまとめたものである。

1. 配列 (indexed array)


(1) 変数の宣言


通常の変数の場合と同じである。
・通常は変数の宣言は不要である。
・local により、関数内のローカル変数として宣言することが可能である。


(2) 値の設定


(a) 要素毎の設定

a_demo[0]=a
a_demo[1]=b


(b) 全要素の設定

a_demo=(a b)


(補足)
・空の配列の作成: a_demo=()
・配列の宣言と要素の設定を同時にすることが可能である。
 local a_demo=(a b)


(c) 配列要素の追加

a_demo+=(c)


(3) 値の参照

${#a_demo[*]} ... 要素数
${a_demo[*]} ... 全要素
${a_demo[n]} ... n 個目の要素


(補足)
* の代わりに @ を使用することも可能である。
両者の違いは、通常の変数参照時の "$*" と "$@" の違いと同様である。


2. 連想配列 (associative array、hash)


bash v4 で追加された機能である。
未対応のバージョンでは、エラーとなる。

(1) 変数の宣言


使用する前に、連想配列としての変数の宣言が必要である。

declare -A h_demo


(補足)
関数内で上記の変数宣言を行った場合には、当該関数内でのみ有効となる。
(関数内でのローカル変数となる。)


(2) 値の設定


(a) 要素毎の設定

h_demo[Jan]=1
h_demo[Feb]=2


(b) 全要素の設定

h_demo=([Jan]=1 [Feb]=2)


(補足)
・空の連想配列の作成: h_demo=()
・連想配列の宣言と要素の設定を同時にすることが可能である。
 declare -A h_demo=([Jan]=1 [Feb]=2)


(3) 値の参照

${#h_demo[*]} ... 要素数
${!h_demo[*]} ... 全要素(key)
${h_demo[*]} ... 全要素(value)
${h_demo[key]} ... 特定の要素(key に対応する value)


(補足)
* の代わりに @ を使用することも可能である。
両者の違いは、通常の変数参照時の "$*" と "$@" の違いと同様である。



xawtvのウィンドウサイズを変更すると画像が表示されなくなる [Debian]

[ソフトウェアのバージョン]
xawtv 3.103-3+b1
linux-image-3.16.0-4-686-pae 3.16.39-1+deb8u2

1. 発生事象


Debian 8 において、xawtv のウィンドウサイズを変更すると画像が表示されなくなる。

・xawtv を再起動すると回復する。
・Debian 7 (linux-image-3.2.0-4-686-pae 3.2.86-1)では発生しない。
・xawtv 3.102-3 (Debian 7 のパッケージ)に変更しても状況は変わらない。


2. 原因


kernel 3.16.x 上で発生する xawtv のバグである。
(詳細は、備考を参照。)


3. 対処方法


下記の手順を実施する。

(1) 更新するパッケージの入手


ubuntu 16.10 の下記のパッケージをダウンロードする。

fontconfig-config_2.11.94-0ubuntu2_all.deb
libfontconfig1_2.11.94-0ubuntu2_i386.deb
pia_3.103-4_i386.deb
scantv_3.103-4_i386.deb
xawtv-plugins_3.103-4_i386.deb
xawtv_3.103-4_i386.deb


(補足)
・Debian 8 用の更新パッケージはリリースされていない。
・Debian sid よりも ubuntu 16.10 の方が更新するパッケージの数が少ない。
https://pkgs.org/ 等から当該パッケージをダウンロードする。


(2) パッケージの更新

# dpkg -i *.deb


(補足)
更新内容は、下記の通りである。

・fontconfig-config
 2.11.0-6.3+deb8u1 => 2.11.94-0ubuntu2
・libfontconfig1
 2.11.0-6.3+deb8u1 => 2.11.94-0ubuntu2
・pia
 3.103-3+b1 => 3.103-4
・scantv
 3.103-3+b1 => 3.103-4
・xawtv-plugins
 3.103-3+b1 => 3.103-4
・xawtv
 3.103-3+b1 => 3.103-4

[備考]