openSUSE Advent Calendar の14日目です。

オンラインイベント続きで Zoom が欠かせない今日この頃ですね。openSUSE 用のクライアントアプリの RPM パッケージは公開されていますが、なぜかリポジトリからの配信ではありません。そのため、アップデートが簡単にできなく不便です。

ということで、1コマンドで更新する小ネタです。単に zypper で URL を指定するだけです。自動更新がよければ、Systemd Timer で定期実行してもいいかもしれませんね。

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にしてテストするような場合にはあまり影響はないようです。

Kubernetesのメモリ使用量を測ってみる

By Syuta Hashimoto @ 2020-12-07 00:10

某LUGで、Kubernetesのメモリ使用量を気にされていたので、測ってみました。

結論

masterノードはKubernetes起動後、1.3G前後のメモリを使用。workerは、コンテナを動かせば動かしただけメモリを使用。15pod程度では、2つのworkerでそれぞれ1G使わない程度でした。

方針

KVM上にKubicを展開して、そこでKubernetesを動かします。

VMの起動のみの状態、Kubernetesを起動した状態、いくつかのpodを動かした状態、で、freeや、topのメモリ使用量上位10のプロセスを拾ってみます。

また、Kubernetes起動後はcrictl statsの結果も見てみます。今回、IDを名前で置き換えていますのでご注意下さい。(通常のcrictl statsですと、IDのみの表示となり名前は表示されません。)

環境

  • Kubernetes
    • master 1 worker 2 構成
    • KVM上で動かす
    • OSはKubic
    • CPU数 master 2 worker 1
    • メモリ それぞれ 3G
    • Kubernetes 1.19.4
  • ホスト
    • openSUSE 15.2
    • CPU Ryzen 3900
    • メモリ 32G

Kubic・・・openSUSEプロジェクトで開発している、Kubernetes専用OSです。Tumbleweedをベースにしていて、Kubernetesを動かすことに焦点を絞ったパッケージ構成&システム設定。プリビルドなイメージが毎日のように公開されるため、ignitionなどの初期設定ツールを使って手早く最新Kubernetesを展開できます。

Ryzen 3900・・・コア数12なので、VMは結構たてられます。目指せおうちクラウド。

ちなみに、saltstackのマスター用VMを別途立てていて、各ゲストは基本的にそこから制御しています。(今回のコマンド実行は直接各ゲストで行いました。)

VMの起動のみ

起動のみの状態

master

worker1

worker2

利用可能メモリが、3台とも2.5G程度であることがわかります。

Kubernetes起動後

Kubernetesとネットワークアドオンのweaveを起動します。

master

worker1

worker2

masterがさらに1G程使用しました。workerは数百程度の使用にとどまっています。

podを幾つか起動した後

15個程podを走らせてみます。

走らせたサービスは、Promeheus、Grafana、DokuWiki、Nextcloud、Harborなどです。

master

worker1

worker2

masterの使用量はほとんどかわりませんが、動いたpod分、両workerのメモリが使用された感じです。

参考までに、pod一覧です。

感想

色々と検証しているときは、clairが1G以上メモリを使ったりしていましたが、今回計測しているときは100Mいかないぐらいでした。当然ですが、podの起動だけでなく、実際に使ってみた時のメモリ使用量なんかが実運用上では参照値になると思います。

まだ、プロセスやコンテナの動作と使用メモリとの関連を掴みきれてないので、追って調査してみたいと思います。コンテナのメモリとディスクの関連も。

なお、今回動かしたサービスの殆どはiscsiのPersistentVolumeに接続しています。このあたりの方法も消費リソースと関わっていそうですね。

Kubernetesってメモリ使うんだよなー、よし、各ノードに6G割り当てるか、とかやっていたのですが、今回の計測で今の所3Gでも大丈夫なことがわかったので、設定を変更しました。やはり適切な設定は適切な計測から、ですね。ちなみに、Kubernetesでpodを動かす時に、CPU使用率やメモリ使用量の上限などを設定できます。このあたりについてもおいおい見ていきたいと思います。

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を動かすのには失敗しました。

Proxmox VEのLXCでopenSUSEを使う

By ribbon @ 2020-12-03 00:02

手軽な仮想化環境 Proxmox-VE は、LXC を使ったコンテナ環境も用意されています。コンテナ環境では、kernel は 仮想化環境のベースOSのものを使いますが、ユーザランドはopenSUSE のものが使われます。この記事を書いている時点で openSUSE 15.2 相当のコンテナ環境があったので使ってみることにしました。

openSUSE 15.2 のコンテナ環境は、Proxmox VE 標準で用意されていますので、それをWebインタフェースから選択するだけでダウンロード、インストールができます。

インストール完了後は、パッケージの総数は181個でした。見てみましたが、最低限の動作をするために必要なものだけしかない状態です。ssh,sshもないですし、yastも入っていませんでした。ほとんど何も出来ないと行っていいでしょう。/ ディレクトリも 213M しか使っていませんでした。必要最低限のユーザランドを一気に入れてしまうFreeBSDよりまさらにコンパクトです。さすがにzypper は入っていましたので、パッケージの追加は出来ます。

そこで、まずは zypper update を行ったのち、openssh を入れ、さらに yast (パッケージとしてはyast2) を入れてみました。

yast を入れた直後の画面は図1のようになります。

図1 yast を入れた直後の yast の画面

何もないですね。この時点では、yast2-ycp-ui-bindings, yast2-perl-bindings,yast2,yast2-core,yast2-xml,yast2-logs,yast2-ruby-bindings,yast2-hardware-detection,yast2-pkg-binding というものしか入っていません。 yast のサブメニューに対応するパッケージを何も入れていないため、何もないわけです。

そこで、他のサーバを参考にしつつ、yast パッケージを入れてみることにしました。取りあえずはSamba サーバにしたいため、yast2-samba-server を入れることにしました。すると、yast2-samba-client を含め、関連するパッケージが42個も入りました。

続いてSamba本体のパッケージ Samba を入れます。ここでも40パッケージが追加されました。

さて、Sambaをyast で設定するためには少し準備が必要です。useradd でユーザの追加、共有ディレクトリの準備とアクセス権の設定をします。また、pdbedit でSamba用ユーザの登録をします。その後に yast で Sambaの設定をします。しかし、起動すると、図2のように cups を無効にするかどうかを聞いてきます。

図2 capsは不要

今はSamba経由で印刷することはほぼ皆無なので、最初から無効にしておいてもいいんじゃないかと思うのですけどね。

さて、一通り設定が終わり、Sambaを起動しようとしたのですが、smbdがなぜか起動しません。ログを見ると、

ERROR: failed to setup guest info.

と言うエラーが出ていました。これはSambaが使うゲストユーザの定義がないということでした。調べて見ると、普通OSをインストールしたときには、nobody というユーザが作られているのですが、このLXC環境では入っていなかったのでした。そこで、uid 65534,gid 65533 の nobody を作りました。これでsmbの起動はOKとなりました。