By ribbon @
2025-12-21 17:39
Proxmox では、いくつか標準でコンテナイメージが用意されています。その中には openSUSE もあります。ただ、存在しているのは 15.6 で、16.0 はありません。しかし、コンテナソフトの開発をしている、Linux Containers のサイトには、openSUSE 16.0 のイメージが用意されていました。そこで、それを使って openSUSE 16.0 のコンテナイメージをインストールしてみることにしました。
コンテナイメージは https://images.linuxcontainers.org/ にあります。その中に openSUSE 16.0 があります。
opensuse 16.0 amd64 default
というエントリの所にリンク (2025/12/21 では 20251216_04:20) がありますので、そのリンクをクリックします。すると、ファイルの一覧が表示されますので、その中から rootfs.tar.xz をダウンロードします。このファイルを、たとえば opensuse16.tar.xz というファイルに改名して、proxmox が動いているサーバの /var/lib/vz/template/cache に配置します。
あとは通常通りコンテナを作成すると、openSUSE 16.0 のイメージをコンテナとして利用することができます。
追記(2025-12-30)
インストールはできるのですが、ネットワーク関係がかなり変です。インストール時に固定IPアドレス指定にしたのに、起動してみると DHCP でアドレスを取ってきます。NetworkManager の類も入っていないので、ネットワーク関連はまだきちんとできていないのかもしれません。
By ribbon @
2025-12-09 13:39
この記事は openSUSE Advent Calendar 2025 の8日目です。
openSUSE 16.0 から linux-pam のバージョンが1.7.0 になりました。オリジナルサイト
https://github.com/linux-pam/linux-pam
の最新は1.7.0 なので openSUSE は最新に追いついたと言えます。
openSUSE 15.x の pam は 1.3.0 だったのでかなり新しくなります。そのためいくつか違いがあるようです。どう違っているかを調べるため、マニュアル等を見てみることにしたのですが、オリジナルのマニュアルは xml なので、コンパイルして読みやすくしてみることにしました。
環境の準備
ソースを引っ張ってきてコンパイルするだけですので、わざわざそのために新しく環境を作るのは大変です。そこで、Proxmox VE の LXC コンテナを使うことにしました。単純なコンパイルとかはこれで十分です。フットプリントも小さいですし。
そして、とてもありがたいことに、 opensuse-15.6 のテンプレートがあります。それを使えばサクッと LXC 上の環境を作ることができます。
ただ、提供されているテンプレートはとても基本的なものなので、外から入ることができません。そこで、インストール後は zypper update し、さらに openssh-server、git と nano を入れます。また作業用のユーザも作っておきます。
ソースをダウンロード
git clone https://github.com/linux-pam/linux-pam.git
でソースをダウンロードします。
meson を使う
linux-pam のコンパイルには、meson が必要です。以前は autotools だったらしいですが。このため、いろいろ入れないと動きません。最低限コンパイラが必要です。今回は gcc を使います。
% cd linux-pam
で作業ディレクトリに移り、
% meson build
で configure を作り、さらに、
% meson -C build
で一応ビルドはできるようになります。ただし出来るのはバイナリだけ。マニュアルは出てきません。マニュアル作成には結局
libxslt-tools
docbook_5
docbook5-xsl-stylesheets
を追加インストールすることで、できるようになりました。
で、build/modules 配下ににある各モジュールディレクトリ中にマニュアルが、man 形式で生成されます。
ちなみにbuildした時点では、ディスク容量は 884M しか使っていませんでした。コンテナだと本当にフットプリント小さいですね。
By ribbon @
2025-12-01 00:02
この記事は openSUSE Advent Calendar 2025 の1日目です。
openSUSE 15.6 を teraterm から使っているのですが、何かの拍子にカーソルが■からアンダーラインになってしまいました。teraterm 側で端末リセットしてもダメ、コンソール側で clear コマンド叩いてもダメ。視認性が悪くなって困ってしまいました。
しかし、https://infrapod.net/teraterm/manual/4.74/html/usage/tips/vim.html にヒントが。teraterm 側でカーソルのコントロールシーケンスを受ける設定に変更後、
echo -en “\033[0 q”
と入力すれば元に戻りました。
コンソールでトラブったときにお試し下さい。
By ribbon @
2025-06-01 21:21
openSUSE の Proxmox LXC コンテナで、一般ユーザで ping を使うと、
ping: socktype: SOCK_RAW
ping: socket: Operation not permitted
ping: => missing cap_net_raw+p capability or setuid?
となって、動きません。しかしこれは、https://blog.ssrf.in/post/ping-does-not-require-cap-net-raw-capability/ に書いてあるように、カーネルパラメータを調整することで、通常通り使えるようになります。実際に、
# sysctl -w net.ipv4.ping_group_range="0 65534"
と入力してみたら正しく動くようになりました。
なお、/usr/bin/ping にケーパビリティの設定を
setcap cap_net_raw+p /bin/ping
ですることでも解決します。これは https://hanaokaiwa.hatenablog.jp/entry/2024/06/17/120533 に情報がありました。
By ribbon @
2025-05-31 21:03
Proxmox には openSUSE のLXCコンテナイメージが用意されています。そのイメージを使って openSUSE をインストールしたときには、 aaa_base-extras パッケージを入れてください。そうしないと、既定で用意されているはずの bash の alias などが使えません。
最初、openSUSE LXC コンテナにログインしたとき、ll とかの alias コマンドが使えないのに気がつきました。.bashrc が未設定なのかなと思ったのですが、.bash にも .profile にも alias コマンドの定義がありません。/etc 配下のファイルも同じでした。実際に使える、openSUSE の環境で見てみても同じです。
調べた結果、/etc/profile.d/ 配下にalias 等の定義があったのでした。が、それらは aaa_base-extras でインストールされているのですね。LXC コンテナイメージには aaa_base-extras が入っていなかったために、alias 等の定義が抜けてしまったのでした。
普段特に気にせず使っている alias 定義のコマンド、実は親切にも openSUSE があらかじめ用意していた物だったというのに気がついた次第です。
By ribbon @
2025-04-07 11:59
たぶん期待通りの動作になりました。
要は、IPaddr2に渡すパラメータを調整すれば良いわけで、いろいろ見て、clone-max=1 と言うパラメータを、crm 設定ファイルに追加すれば良さそうと。で
group g-storage dlm lvmlockd
group vip-group vip
clone cl-storage g-storage \
meta interleave=true target-role=Started
clone vip-clone vip-group \
meta clone-max=1
のように書き換えたところ、たぶん期待通りの動作になりました。ノードを standby 状態にすると、IP アドレスが相手側に移動します。
なので、IPaddr2 の動作としては問題ないし、heartbeat としての動作も問題ないけれど、パラメータの設定がミソ、という感じです。この辺 SLES のドキュメントには無いので、もう少し追記してもらえればありがたかったかなと。
By ribbon @
2025-04-06 17:58
IP_CIP が yes になる条件が分かりました。
ソースを見ると、IPaddr2 の ip_init() 関数の中で、
if [ "$IP_INC_GLOBAL" -gt 1 ] && ! ocf_is_true "$OCF_RESKEY_unique_clone_address"; then
IP_CIP="yes"
IP_CIP_HASH="${OCF_RESKEY_clusterip_hash}"
という行があるのですね。IP_CIP を yes にしているのはここだけです。で、IP_CIP を yes にする条件は、IP_INC_GLOBAL が2以上の時(1より大きいとき)、で、IP_INC_GLOBAL を設定しているのは、やはり ip_init() の始まりの方で、
IP_INC_GLOBAL=${OCF_RESKEY_CRM_meta_clone_max:-1}
IP_INC_NO=`expr ${OCF_RESKEY_CRM_meta_clone:-0} + 1`
という行の所。で、OCF_RESKEY_CRM_meta_clone_max を設定しているのは IPaddr2 内ではなくて、これを起動する heartbeat。情報は https://clusterlabs.org/projects/pacemaker/doc/2.1/Pacemaker_Administration/html/agents.html にあります。あとhttps://blog.drbd.jp/2017/12/advance_resource/ も参考になります。どうやら、OCF_RESKEY_CRM_meta_clone_max が2に設定されているみたいです。なので、iptables を動かすロジックに進んでしまったみたい。