openSUSE のパッケージを YaST からインストールするとき、そのパッケージの説明が表示されます。ただ、残念ながら、その多くは英文のままです。パッケージの多くは OS インストール時に自動的にインストールされてしまいますので、説明文を読むことはないのですが、後から個別にインストールする場合には、日本語の説明文があるとわかりやすいですね。
そこで、まだ訳されていないパッケージの説明文を訳してみることにしました。
また、訳していると結構おなじみなソフトウェアにお目にかかることもありますが、今まで聞いたことがないような、かつ、何か面白そうなソフトウェアに出くわすこともあります。そこで、そのようなソフトウェアを試しに動かしてみて、使えそうかどうか調べて見ることにしました。

パッケージ名 wkhtmltopdf
バージョン wkhtmltopdf-0.12.6-1.3
結果 △
詳細
これは、html を pdf に変換するためのツールです。が、残念ながらうまく変換してくれませんでした。情報がごっそり落ちてしまいます。

パッケージ名 w3c-markup-validator
バージョン w3c-markup-validator-1.3-10.4
結果 △
詳細
htmlファイルが w3c のマークアップ定義に準拠しているかどうかを調べるソフトウェアです。これは apache2 のcgiとして提供され、perl で書かれています。が、すんなりと動いてくれませんでした。起動時にエラーとなります。これは、
/etc/apach2/conf.d/w3c-markup-validator.conf の46行目に、
Order Deny,Allow と言う記述があり、Apache2.4では非推奨なためです。そのため、
https://www.adminweb.jp/apache/allow/index10.html
にあるように、 access_compat_module の導入が必要となります。
そこで、/etc/apache2/loadmodule.conf に下記の行を追加しました。

LoadModule access_compat_module /usr/lib64/apache2/mod_access_compat.so

が、やっぱりエラーとなります。原因は簡単で、/etc/sysconfig/apache2 の中にロードするモジュール一覧を記述するところがあり、そこに、access_compat という文字列を追加しなければならないのでした。
調べて見ると、まず最初に見るファイル、/etc/apache2/httpd.conf の内容から、openSUSEでは、apache の設定が、機能単位毎にファイルが分かれていることがわかりました。その中に、/etc/sysconfig/apache2 でモジュール設定をすることが書いてありました。動かなかったのはこういうことだったわけです。

次に、データの準備をします。w3c-markup-validation は /srv/www/w3c-markup-validation と言うディレクトリにデータをおいてくれます。今回はサクッとテストするので、これを /srv/www と置き換え(ディレクトリを1つ下げてディレクトリ名を入れ替え)てみました。これでブラウザを使ってアクセスしてみると動きました。

が、テストしてみるとやはり駄目です。

もう少し apache の設定ファイルに調整が必要なようです。
今回は、openSUSE の apacheの設定ファイルが、他のものとはかなり異なっていることが分かったというのが幸いでした。

パッケージ名 watchman
バージョン watchman-4.9.0-5.4
結果 △
詳細
ファイル変更を監視するプログラムらしいです。一応。コマンドを叩いて、サーバモードで動作することまでは動作確認が出来ました。しかし、ドキュメントを軽く読んで限りでは、使い方がよく分かりませんでした。一応試してみた方はいらっしゃるようです。

https://kore1server.com/260/ファイル監視のwatchman

パッケージ名 wcd
バージョン wcd-6.0.3-1.5
結果 ×
norton utility の wcd クローンです。最初にディレクトリをスキャンして、すべてのサブディレクトリを内部的に保持。次回からは、ずっとずっとしたのディレクトリ名を指定すれば一気に cd ができるというもののようです。
パッケージのバイナリは、 /usr/libexec/wcd.exe 。当然のことながら、パスが通ってないので直接指定しないと動きません。オプションで -g を付けると curses ベースのグラフィック表示になります。

ここまではいい感じでした。
が、実際にやってみると cd しないのです。元のまま。というわけで使えませんでした。

パッケージ名 wdiff
バージョン wdiff-1.2.2-6.8
結果 ◎
詳細
単語レベルでの比較をする diff です。たとえば


% wdiff COPYING COPYING2 | head
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, [-1991-] {+2021+} Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this [-license document,-] {+license-documents,+} but changing it is not allowed.

のように、差分を表示してくれます。
英単語では当然のことながらちゃんと動きます。が、やはり日本語での単語切り分けは無理のようです。
….と思ったのですが、なんと、jwdiff という日本語対応の wdiff があったのでした。

https://fumiyas.github.io/2013/12/12/jwdiff.sh-advent-calendar.html

https://github.com/fumiyas/home-commands/blob/master/jwdiff

mecab を使うところがポイントですね。
そのほかに docdiff というのもあるそうです。

https://github.com/hisashim/docdiff

パッケージ名 whohas
バージョン whohas-0.29.1-1.10
結果 ◎
詳細
これは、あるパッケージが、複数のディストリビューションに含まれているかを調べるコマンドです。たとえば、このコマンド自身を検索すると

Couldn't fetch "http://dl.fedoraproject.org/pub/fedora/linux/releases/26/Everything/x86_64/os/Packages/w/". Giving up.
AUR 0.29.1-1 5 http://aur.archlinux.org 0.29.1-1
Ubuntu whohas 0.29.1-1 179K all http://packages.ubuntu.com/xenial/whohas
Ubuntu whohas 0.29.1-1 179K all http://packages.ubuntu.com/bionic/whohas
Ubuntu whohas 0.29.1-1 179K all http://packages.ubuntu.com/focal/whohas
Ubuntu whohas 0.29.1-1 179K all http://packages.ubuntu.com/groovy/whohas
Ubuntu whohas 0.29.1-1.1 179K all http://packages.ubuntu.com/hirsute/whohas
NetBSD whohas 0.29.1nb2 192K 2020-09-01 misc https://pkgsrc.se/misc/whohas
Couldn't fetch "http://ftp.openbsd.org/pub/OpenBSD/6.0/packages/i386/". Giving up.
Source Mage whohas 0.29.1 test
Source Mage whohas 0.29 stable
Debian whohas 0.29-0.3 189K all http://packages.debian.org/jessie/whohas
Debian whohas 0.29.1-1 180K all http://packages.debian.org/stretch/whohas
Debian whohas 0.29.1-1 180K all http://packages.debian.org/buster/whohas
Debian whohas 0.29.1-1.1 180K all http://packages.debian.org/bullseye/whohas
Debian whohas 0.29.1-1.1 180K all http://packages.debian.org/sid/whohas

という感じで表示されます。検索は、各ディストリビューションの検索サイトを使って行い、その結果を表示するということをやっています。そのため、似たようなパッケージなども表示されるときがあります。複数のバージョンが表示されるときもあります。
対象となるディストリビューションはArch, Debian, Fedora, Gentoo, Mandriva, openSUSE, Slackware (と linuxpackages.net), Source Mage, Ubuntu, FreeBSD, NetBSD, OpenBSD, Fink, MacPorts, Cygwin and OpenMoko です。ただ、openSUSE については、うまく検索ができないようです。ソースコードが期待している結果が返ってきてないのかもしれません。
あるパッケージの移植状況などを調べるときには重宝しそうです。

パッケージ名 wmutils
バージョン wmutils-1.4-1.9
結果 ◎
詳細
X のウィンドウに対して情報を得たり種々の操作をするコマンドラインツールです。たとえば、現在のウィンドウのサイズを調べるには、pfw コマンドを使ってウィンドウの ID を取得し、wattr コマンドでサイズを取得します。

以下の機能が用意されています。

  • chwb - change window's border
  • chwso - change window's stacking order
  • ignw - ignore/unignore window
  • killw - kill windows
  • lsw - list windows
  • mapw - map/unmap windows
  • pfw - print focused window
  • wattr - show window's attributes
  • wmp - move the mouse pointer
  • wmv - move a window
  • wm_wtf - focus a window
  • wrs - resize a window
  • wtp - teleport a window

スクリプトなどでウィンドウの制御をするときには便利に使えそうです。

日本語 manpage には気をつけよう

By ribbon @ 2020-12-20 00:02

めでたくTumbleweedに20201115版の日本語マニュアルが入りましたが、必ずしも最新の日本語manpage が入ったわけではありません。たとえば、 od コマンドは、日本語訳が GNU textutils のバージョン2.1なのに対し、英語版の方はcoreutils のバージョン8.32になっています。coreutils にいくつかのパッケージが集約されたことも反映されていません。

たとえば od の日本語manpage には –endian オプションが含まれていません。また、接尾辞についての記述も、 b (512倍)しか記載がありません。8.32では、KB,K(KirobyteとKibibyte),MB,Mのように、単位を示す記述についての記載もあります(Mの上、G,T,P,E,Z,Yも使えます)。

openSUSEの場合、たとえば man od とすると、同じmanpage が複数ある場合、一旦マニュアルを選択する画面が表示されます。たとえば、環境変数で LANG=ja_JP.UTF-8 というように日本語を指定する場合、そのままEnterキーを入力すると、既定で日本語のmanpage が表示されます。しかし、1+1,あるいは +1 というように指定すると、英語版のマニュアルを表示できます。ですので、マニュアルページを参照する際は、適宜英語版のマニュアルも参照して、日本語版と差がないかどうかを確認することをお勧めします。

Geeko Blog » マニュアルのみのRPMファイルを作ってみた で、Sambaの日本語マニュアルパッケージを作成した時に参照したLinuxの日本語マニュアルページですが、2017年12月15日バージョンでした。これは openSUSE 15.0 から変わっていません。ちょっと古いですね。そこで、他のディストリビューションなどと比較して見ることにしました。結果は以下の通りです。なお、各ディストリビューションとも、各種コマンドでパッケージの最新化をして確認するか、配布サイトのパッケージ情報を見ています(※のもの)。

  • CentOS 7 20130615版
  • Debian10 20180315版
  • openSUSE 15.2 20171215版
  • openSUSE Thumbleweed 20191215版(※)
  • Fedora 20200315版(※)
  • Oracle Linux 20130615版(※)
  • Arch Linux なし(※)
  • Gentoo Linux 20180315版(※)

CentOS(=RedHat=Oracle Linux)はちょと古すぎますね。Fedora はやはりというか新しいです。しかし、Thumbleweed も結構新しい方でしょう。とりあえず15.2で使うのであれば、Thumbleweed版を持ってきて入れてしまうと言うのも手かもしれません。rpmファイルの中身はテキストだけなので、バイナリの互換性で引っかかることはないですから。

ちなみに、日本語マニュアルについては、Open Build Service で20201115版を作成し、更新をお願いしておきましたので、そのうちopenSUSE用の最新版が提供されるようになるのではないかと思います。

ただ、ls コマンドのマニュアルを見てみると、openSUSE 15.2 での日本語マニュアルはは GNU Fileutils のバージョンが4.1であると表示されますが、英語版は バージョン8.29 となっています。となると、日本語マニュアルに頼りすぎるのは少々危険かもしれません。

Samba には日本語マニュアルがあるのにパッケージ化されていません。ですので、日本語マニュアルのtar.gz ファイルを持ってきて展開することになります。このままですと管理が不便なので、RPMファイルを作ってみることにしました。ただ、一から作るのも大変なので、Linuxのコマンド日本語マニュアルのRPMファイルをベースにして作ってみることにしました。

まず、openSUSE 15.2 のSRPMファイルを入手し、rpm コマンドでインストールします。すると ホームディレクトリ配下のrpmbuild/SPECS ファイルにspecファイルが展開されます。これをベースに修正することにしました。…. が単にマニュアルファイルを所定のディレクトリにコピーするだけ、という単純なものかと思いきや、ちょっとしたテクニックが使われていました。

細かなことをやっているのは install セクション。ここでは、既存のディレクトリにインストールしようとするファイルと同じものがある場合、RPMファイルに含めないようにしています。また、複数のパッケージの日本語マニュアルをまとめているため(たとえば sudo とか tcpdump とか)、各パッケージ毎のサブディレクトリがあり、その中にさらにmanのカテゴリ毎(man1とかman8とか)に分けて日本語マニュアルが格納されています。このままではSambaの日本語訳ファイルアーカイブとは合わないため調整しました。そうして各ファイルをインストールする部分は以下のようになりました。

%install
mkdir -p %{buildroot}%{_mandir}/ja
for i in find output/manpages/ -name *.*
do
SUBDIR=man${i##*.}
mkdir -p %{buildroot}%{_mandir}/ja/$SUBDIR
install -m 644 $i %{buildroot}%{_mandir}/ja/$SUBDIR
done

#find の所、バッククォートがうまく入力できないのですが実際にはあります。

Samba日本語マニュアルのアーカイブはmanpages というディレクトリ配下にすべてのカテゴリ(man1からman8まで)が含まれています。そこで、カテゴリ毎に振り分けが必要です。そのため、

  • findでファイル一覧を作って do ループに渡す
  • ${i##*.} で、拡張子のみを抜き出し、振り分け先のディレクトリ名を作る
  • そこにinstall する

という形になります。拡張子のみをどうやって抜き出すかが大変なのですが、bash の変数名の後に ## を付けると、変数展開時に前方一致した部分を削除することが出来るのですね。そこで、ピリオドより前の部分を全部そぎ落としてしまえば、拡張子のみが残るというしくみです。この辺はbashシェル職人じゃないと思いつかないところですね。

後は多少調整して無事RPMファイルを作成できました。これで、openSUSE でも簡単にSamba の日本語マニュアルを参照できます。出来上がったものは
Samba翻訳プロジェクト のダウンロードの所に置いておきました。
….なのですが、openSUSE 15.2のSambaはバージョン4.11.x なので、作成したものとはバージョンが違ってました…. まあだいたいの所は同じですけれど。

参考URL
https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51
https://qiita.com/mriho/items/b30b3a33e8d2e25e94a8

Proxmox VE 6.3 が出ています

By ribbon @ 2020-12-08 00:02

仮想環境プラットフォームとしてとても便利なProxmox VEですが、バージョン6.3が出ています。

変更点は https://pve.proxmox.com/wiki/Roadmap#Proxmox_VE_6.3 にありますが、順当に少しずつ機能が強化されてるという所でしょうか。あと今回は、Proxmox Backup Server との統合機能がメインかな。

地味にモダンなインタフェースになっているところもあります。例えば、今までプルダウンメニューで選択していたブート順の指定が、GUIのドラッグ&度ラップで出来るようになっていたりします。

日本語訳については最新版が反映されていないようです(画面ではテスト環境なので最新版になってますが、まだバグがありますね)。

そのほか、クラスタ回りとかストレージ回りで少しずつ改良がされているようです。ただ、openSUSE をゲストOSにしてテストするような場合にはあまり影響はないようです。

2020-12-08 コマンドの引数にコメントをいただき、一部修正しました。

openSUSE でインストール済みのパッケージ一覧を表示するときには、 rpm -qa コマンドを使っていました。しかし、Proxmox VE で使うコンテナイメージには rpm コマンドが含まれていませんでした。もちろんzypper コマンドで rpmコマンドを入れれば良いのですが、zypper コマンドだけで出来る方法がないか考えてみました。結果、

zypper –no-refresh se -i -t package

で代用することが出来ることが分かりました。結果はこんな感じになります。リモートリポジトリの検索を全部やめてしまえばローカルだけになる、と言う仕掛けです。

S | Name | Summary | Type
—+———————————–+————————————————————————–+——–
i+ | aaa_base | openSUSE Base Package | package
i+ | apache2 | The Apache Web Server | package
i+ | apache2-example-pages | Example Pages for the Apache 2 Web Server | package
i | apache2-prefork | Apache 2 “prefork” MPM (Multi-Processing Module) | package
i | apache2-utils | Apache 2 utilities | package
i+ | apparmor-abstractions | AppArmor abstractions and directory structure | package
i+ | apparmor-parser | AppArmor userlevel parser utility | package
i | augeas | An utility for changing configuration files | package
i | augeas-lenses | Official set of lenses for use by libaugeas0 | package
i | bash | The GNU Bourne-Again Shell | package

Proxmox VE のCTでXは動くのか

By ribbon @ 2020-12-04 00:02

結論から先に書きます。Proxmox VEのLXC コンテナでX をぅこかすことは出来ませんでした。

コンソールとしてSPICEクライアントやxterm.js も指定できるので、出来るかなと思ったのですが、そうは問屋が卸しませんでした。

Xはインストール出来ます。しかし、xinit で起動してみると、 /dev/tty0 がないと言ってきて起動しません。確かに、/dev/ 配下を見ると、

ls -l

total 0

crw–w—- 1 root tty 136, 0 Nov 20 10:10 console

lrwxrwxrwx 1 root root 11 Nov 20 10:03 core -> /proc/kcore

lrwxrwxrwx 1 root root 13 Nov 20 10:03 fd -> /proc/self/fd

crw-rw-rw- 1 nobody nobody 1, 7 Nov 11 08:28 full

lrwxrwxrwx 1 root root 25 Nov 20 10:03 initctl -> /run/systemd/initctl/fifo

lrwxrwxrwx 1 root root 28 Nov 20 10:03 log -> /run/systemd/journal/dev-log

drwxrwxrwt 2 nobody nobody 40 Nov 20 10:03 mqueue

crw-rw-rw- 1 nobody nobody 1, 3 Nov 11 08:28 null

crw-rw-rw- 1 root root 5, 2 Nov 20 2020 ptmx

drwxr-xr-x 2 root root 0 Nov 20 10:03 pts

crw-rw-rw- 1 nobody nobody 1, 8 Nov 11 08:28 random

drwxrwxrwt 2 root root 40 Nov 20 10:03 shm

lrwxrwxrwx 1 root root 15 Nov 20 10:03 stderr -> /proc/self/fd/2

lrwxrwxrwx 1 root root 15 Nov 20 10:03 stdin -> /proc/self/fd/0

lrwxrwxrwx 1 root root 15 Nov 20 10:03 stdout -> /proc/self/fd/1

crw-rw-rw- 1 nobody nobody 5, 0 Nov 15 23:26 tty

crw–w—- 1 root tty 136, 0 Nov 20 10:03 tty1

crw–w—- 1 root tty 136, 1 Nov 20 10:03 tty2

crw-rw-rw- 1 nobody nobody 1, 9 Nov 11 08:28 urandom

crw-rw-rw- 1 nobody nobody 1, 5 Nov 11 08:28 zero

となっていて、/dev/tty0 がありません。そこで以下を試してみました。

  1. /dev/console を /dev/tty0 に ln しようとしたのですが、
    Invalid cross-device link エラーで駄目
  2. ln -s でやってみたのですが、xinit を動かしたときに
    parse_vt_settings: Cannot find a free VT: Inappropriate ioctl for device
    エラーで駄目
  3. mknod tty0 c 136 0 でデバイスファイルを作ろうとしたのですが、
    operation not permitted
    エラーで駄目

でした。これで行き止まり。

ちなみに、他のディストリビューションも見てみましたが、結果は同じ。そもそも tty0 がないところから同じでした。

というわけで、残念ながらコンテナ内でXを動かすのには失敗しました。