前回は X でしたが、今回は K です。Kは、KDE関係が多いようです。そのほかに、kubernetes や kopano というツール群のファイルもかなりあります。

パッケージ名 kalzium
バージョン kalzium-20.12.2-1.2
動作 ◎
詳細
周期律表です。日本語も表示されます。ちゃんとメンテナンスされているようで、Nihonium も載っていました。起動した段階では、各元素毎の表示項目は最小限のみです。


しかしメニューを選ぶことでかなり色々な表示が出来ます。たとえば、その元素にまつわるイラストを表示してみたり

元素データの概要を表示することも出来ます。

パッケージ名 klavalo
バージョン klavaro-3.11-1.2
動作 ◎
詳細
タッチタイプ練習ソフトです。オーソドックスに、ステップバイステップで練習することが出来るようになります。

良く出来ているところは、キーマップを色々と替えられるところです。標準では qwerty USA キーボードですが、dvorakにも対応しています。dvorakにすると練習用データも dvorakに切り替わります。

日本語キーボードにも対応しています。特殊記号の位置が正しい場所に来ます。

タッチタイプ練習ソフトには、コンソール用の GNU typist (gtypist) がありますが、日本語キーボードに対応している点、GUIで見やすい点でこちらの方が使い勝手が良いでしょう。

パッケージ名 krename
バージョン krename-5.0.1-2.3
動作 ◎
詳細
ファイルリネームツールです。GUI で対話的にファイル名を変更できます。単に名前を置き換えるだけではなく、順番に番号を振るとか、接頭辞、接尾辞を付けるなども出来ます。

また、プラグインがあり、日付などの変更も出来ます。

パッケージ名 kstars
バージョン kstars-3.5.2-1.1
動作 ◎
詳細
いわゆるデスクトッププラネタリウムです。そこそこ日本語化されていて、星座名などは日本語で表示されます。オプションで星座の絵も表示できます。

観測地点も予め日本のいくつかの都市がプリセットされています。野辺山とか飛騨とか、たぶん天文台がある所も含まれているのが面白いところです。

パッケージ名 ksystemlog
バージョン ksystemlog-20.12.2-1.2
動作 ◎
詳細
システムのログを GUI で表示するツールです。kernelのログ、X.org のログ、systemd のログが選べます。

各行をクリックすることで詳細が表示されます。

時々刻々と追加されているログについても、常時モニタしていますので、手軽にログを見たいときには便利でしょう。ただ、任意のログを見ることは出来なさそうなのですが。

パッケージ名 ktouch
バージョン ktouch-20.12.2-1.2
動作 ◎
詳細
これもタッチタイプ練習ソフトです。最初にレベル指定をした後 練習モードに入ります。
いくつかコースは予め用意されています。

ただし、日本語キーボードには未対応、コースもそれほど多いわけではないので、先に紹介した klavaro と比べると見劣りがします。klavaro がある以上こちらを選ぶ必要性はなさそうです。

前回は I でしたが、今回は X です。
カテゴリ X では、やはり X Window System 関連のものがかなりあるようです。
また、xroach のような、プリミティブな X 機能を使うソフトウェアのいくつかは動きませんでした。

パッケージ名 xfishtank
バージョン fishtank-2.5-1.2
結果 ◎
詳細
昔ながらの、Xの画面を水族館にするソフトウェアです。最近では知らない人も多いかと思いますので取り上げてみました。全画面を使いますので、ちょっとした息抜き用です。スクリーンセーバの機能はありません。

パッケージ名 xpra
バージョン xpra-4.0.6-3.2
結果 ×
詳細
セッションを保持しながらリモートのサーバに接続できるソフトウェアです。X 版 screen であると、ドキュメントには記載があります。
しかし、Thumbleweed では、Pythonのコードでエラーを吐き、動きませんでした。openSUSE 15.2 では一応起動はしましたがうまく繋がりませんでした。たぶん色々と動かすためには調整が必要そうです。

前回 は W でしたが、今回は I です。

パッケージ名 i18nspector
バージョン i18nspector-0.26-1.2
結果◎
詳細
.po ファイルのエラーチェックをするプログラムです。.POT なども処理できます。試しに、linux jm project で翻訳しているファイルを処理してみたところ、結構エラーが出ました。

% i18nspector ./jm/jm/manual/util-linux/po4a/man8/lsblk.po
I: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: boilerplate-in-initial-comments 'Copyright (C) YEAR Free Software Foundation, Inc.'
I: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: boilerplate-in-initial-comments 'This file is distributed under the same license as the PACKAGE package.'
I: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: boilerplate-in-initial-comments 'FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.'
P: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: no-language-header-field
I: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: unable-to-determine-language
W: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: boilerplate-in-project-id-version 'PACKAGE VERSION'
W: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: no-report-msgid-bugs-to-header-field
W: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: boilerplate-in-last-translator 'FULL NAME <EMAIL@ADDRESS>'
E: ./jm/jm/manual/util-linux/po4a/man8/lsblk.po: inconsistent-trailing-newlines msgid 'B<lsblk> lists information about all available or the specified block devices.  The B<lsblk> command reads the B<sysfs> filesystem and B<udev db> to gather information. If the udev db is not available or lsblk is compiled without udev support than it tries to read LABELs, UUIDs and filesystem types from the block device. In this case root permissions are necessary.'

ちなみにファイルの最初の所は

# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2020-09-20 15:12+0900\n"
"PO-Revision-Date: 2020-10-10 18:04+0900\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Linux JM project <linuxjm-discuss@lists.osdn.me>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

となっているので、言語の指定が無いなどを指摘しています。
Qt の linguist などでもエラー表示を出しますが、マニュアルを見る限りかなり色々なチェックをしているようですので、翻訳終了後にこのプログラムを使って見るのも良いかもしれません。

パッケージ名 icmpinfo
バージョン icmpinfo-1.11-715.11
結果 ◎
詳細
icmp の受信状況を表示するだけのプログラムです。同等のことは tcpdump でも出来ますが、このプログラムはicmp の受信に特化しています。その分簡単に使えて見やすい、という利点はあります。
結果はこんな感じになります。

# icmpinfo -vv
icmpinfo: Icmp monitoring in progress...
Mar  2 11:38:44 ICMP_Echo < 192.168.3.11 sz=2008(+20)
Mar  2 11:38:45 ICMP_Echo < 192.168.3.11 sz=2008(+20)
Mar  2 11:38:46 ICMP_Echo < 192.168.3.11 sz=2008(+20)
Mar  2 11:38:47 ICMP_Echo < 192.168.3.11 sz=2008(+20)
Mar  2 11:38:48 ICMP_Echo < 192.168.3.11 sz=2008(+20)
Mar  2 11:38:50 ICMP_Echo < 192.168.3.11 sz=2008(+20)

パッケージ名 input-pad
バージョン input-pad-1.0.99.20140916-4.6
結果 ○
詳細
画面上に仮想キーボードを表示して、それをマウスでクリックしてテキストベースのアプリケーションに入力するツールです。細かくカテゴリが選べるなど、結構良く出来ています。


起動時にはカスタム文字表示になっていますが、ユニコードでのすべての文字を表示するモードや、キーボードレイアウトを表示することも出来ます。


コードポイントで入力することも出来ます。


ただ、インプットメソッドの一部として提供されているわけではないので、GUIなアプリケーションとのレン回は出来ないようです。ターミナルからinput-pad を起動し、そのターミナルで動作するアプリケーションに入力することになります。ターミナルから GUI なプログラム (たとえば Libre Office)を起動してもそちらには文字を入力できません。ですので、利用範囲は少し限定されてしまうかもしれません。

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

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

小ネタ:transactional serverでbtrfs balance

By Syuta Hashimoto @ 2020-12-23 01:30

諸事情で、MicroOSのルートにbtrfsの機能でディスクを追加したのですが、balasceを実行しようとすると「read onlyだよ」と警告が。

ユーザ会slackに投げてみた所、武山さんから「transactional-update shellの中ならいけるのでは?」との助言を頂きました。

結論

成功

コマンド

transactional-update shell

transactional-updateそのもののアップデートが行われた後、独自のシェルに移行しました。

transactional update #

この状態で書き込み可能になります。書き込み後、シェルを抜けてrebootすれば反映されるしくみですね。

btrfs balance /

前後の状態を撮り損ねてしまったのですが、無事にbalanceされてました。

transactional-updateの真価はまだ味わえてないので、ロールバック等含め、近いうちにまとめて検証してみたいですね。

そもそも、transactional-update shellが一体何をどうしているのかも追えていない・・・

日本語 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 というように指定すると、英語版のマニュアルを表示できます。ですので、マニュアルページを参照する際は、適宜英語版のマニュアルも参照して、日本語版と差がないかどうかを確認することをお勧めします。

お家ファイルサーバーの構築

By ftake @ 2020-12-18 01:59

この記事は openSUSE Advent Calendar 18日目です。 残り、あと少しですが、まだ埋まってなく3年連続の完走がピンチ。みなさんご協力下さい。

この内容は小江戸らぐのオフな集まり2月と、オフだけどオンライン開催だった5月の発表内容でもあります。

ことの始まり

この春、ファイルサーバーを組みました。これまで、写真等の大きめのファイルはデスクトップに置いていましたが、タブレットやスマフォを使用しているとデスクトップを起動しないこともあり、アクセスするにはちょっと不便でした。かといってクラウドに上げるには容量が大きいのが現状です。

このとき、電源の故障で引退した、ちょっと古いけどまだ使える一式(Socket FM2 の M/B, AMD A4-5300 APU, DDR3 8 GBメモリ)があったのと、鹿さん から、使わなくなったファイルサーバー用の MiniITX ケースを頂いたので、これでファイルサーバーを組んでみることにしました。

RAID カード調達

HDD は NAS 用のものを適当に買うとして、1度はRAID 5 や 6 で組んでみたい!ということで、RAID カードを探しました。一般のご家庭(誤変換)では、数万円クラスのカードを使っているかと思いますが、この「ありあわせ構成」には不釣り合いです。安く入手する方法としては、ヤフオクなどでサーバーから抜き取ったものを探す手がありますが、あまりに古いと EFI に対応していなかったり、4 KB セクタや 2TB の壁にあたる可能性があります。また、中古品はキャッシュ保護用のバッテリーが死んでいる可能性もあります。

そこで今回は eBay で3世代前の Adaptec ASR-71605 の新古品を買ってみました。キャッシュ保護用のコンデンサ付き、送料込みで 8500円くらいでした。ドライバはカーネルに入っているのですぐに使えます。

意外と高かったのがケーブルでした。Mini SAS HD から SATA ×4にするもので、Amazon で 2500 円くらいでした。

OS インストール

セットアップに困ることはないはずが、openSUSE 15.1 をインストールすると、なぜかディスプレイドライバが固まります。いろいろ試したところ modeset ドライバを ACPI が有効な状態で使うとダメなようです。今回はディスプレイはほとんど使わないので nomodeset を起動オプションに追加することで回避しました。(modeset ドライバだと、コンソールの解像度がディスプレイにあわせて変わるので良いのですが…)

ファイルサーバーの設定

Samba は入れるだけです。とっても簡単ですね。

Btrfs にしてスナップショットを取るようにしました。このあたりはOSCのスライドや Geeko Magazine を見てください。

iSCSI サーバーは4月に書いた別の記事で。

バックアップの設定

重要なディレクトリを選んで USB 接続の HDD に1日に1回、Snapper の最新スナップショットからバックアップを取るようにしました。単純に rsync でコピーを取ります。Btrfs のバックアップといえば、ファイルシステムレベルで差分転送をできる btrfs send があります。しかし、ファイルシステムが壊れてしまった場合に、btrfs send を行うとバックアップも壊れる可能性があるのではないかと考え、今回は使用しませんでした。

タイマーとスクリプトはこのような感じです。タイマーの時間は Snapper の実行中にならないように気をつける必要があります。

backup-to-usb-disk.timer

[Unit]
Description=Back up files to USB disk daily

[Timer]
OnCalendar=*-*-* 6:20:00
Persistent=true

[Install]
WantedBy=timers.target

backup-to-usb-disk.service

[Unit]
Description=Back up files to USB disk

[Service]
ExecStart=/usr/local/sbin/backup-to-usb-disk.sh
Type=oneshot

backup-to-usb-disk.sh

#!/bin/bash

set -e

if [ ! -f /var/backup/backupdisk ]; then
    echo "Back up disk is not found"
    exit 1
fi

# home
snapshot_root=/home/.snapshots

cd $snapshot_root
latest_snapshot=`ls -1 | grep "[0-9]*" | sort -nr | head -n 1`/snapshot/
echo "creating back up of /home/.snapshots/$latest_snapshot"

if [ ! -e $latest_snapshot ]; then
    echo "Snapshot directory error"
    exit 1
fi

target_dir=/var/backup/home/

rsync -va --delete $latest_snapshot $target_dir 

様子見中

Snapper が走る時(おそらく)に btrfs-cleaner がかなり CPU を使うので、試しに Quota 機能を無効にしています。

おわりに

簡単にではありますが、ファイルサーバーを構築したときのいろいろを紹介しました。このファイルサーバーでは、先日書いた Spotify クライアント も動いています。新たな活用を始めたら記事にしたいと思います。