この記事は 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”
と入力すれば元に戻りました。

コンソールでトラブったときにお試し下さい。

openSUSE Leap 16.0 では、提供する 32bit パッケージ削減のため、steam パッケージの提供をしないことになりました。代替手段の1つは Flatpak です。

インストール自体は簡単です。

flatpak install com.valvesoftware.Steam

切り替えるときに困るのが、これまでダウンロードしたゲームのデータです。もちろん、再ダウンロードすることもできますが、rpm パッケージ版の Steam から引き継ぐこともできます。ただし、Flatpak のセキュリティで、アクセスできるディレクトリが制限されているため、従来の Steam のディレクトリにアクセスできるようにする必要があります。こちらもやり方は簡単。

flatpak override --user --filesystem=~/.local/share/Steam com.valvesoftware.Steam

あとは Steam の設定を開き、「ストレージ」で「ドライブを追加」し、上記のパスを設定するだけです。

補足: Leap 16 で 32 bit アプリケーションを実行するには

Leap 16 では、デフォルトで32 bitアプリケーションを実行する機能が、カーネルレベルでオフになっています。Steam と配信されているゲームには 32 bit アプリが多くあります。

有効にするには、grub2-compat-ia32 パッケージをインストールするか、起動オプションに ia32_emulation=on を指定する必要があります。

参考: https://lists.opensuse.org/archives/list/users-ja@lists.opensuse.org/thread/PRGTJQYWV6GOKMNIXZ7TFWBV3QB3F2ZY


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 に情報がありました。

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 があらかじめ用意していた物だったというのに気がついた次第です。

openSUSE で動かないので、では、本家本元の Red Hat Enterprise Linux ではどうなのか、を調べてみました。RHEL では IPaddr2 からのメッセージは ocf_log という関数を使っているようで、add_interface() 関数内にある ocf_log に少し細工をして、実行コマンドと引数が表示されるようにしてみました。すると、

4月 04 21:38:17 rh9-a IPaddr2(ClusterIP)[467709]: INFO: Adding inet address 192.168.3.179/24 with broadcast address 192.168.3.255 to device ens18 ip -f inet addr add 192.168.3.179/24 brd 192.168.3.255 dev ens18
4月 04 21:38:17 rh9-a avahi-daemon[749]: Registering new address record for 192.168.3.179 on ens18.IPv4.
4月 04 21:38:17 rh9-a IPaddr2(ClusterIP)[467715]: INFO: Bringing device ens18 up ip link set ens18 up

と表示されていたんですね。つまり、RHEL では ip コマンドを使って IP アドレスを設定していると。
おそらく、どこかの引数で、ip コマンドを指定していると思うのですが、そこが分かれば RHEL と同じように openSUSE でも設定すれば、うまくいきそうです。

2025/4/5 追記
で、IPaddr2 にあっちこっち logger 入れて調べてみたら、

Apr 05 20:59:41 clvm-a root[7827]: ip_served cur_nic=,IP_CIP=yes,OCF_RESKEY_ip=192.168.3.169
Apr 05 20:59:41 clvm-a root[7828]: ip_saved return no
Apr 05 20:59:41 clvm-a root[7829]: ip_start: IP_CIP=yes,IP_STATUS=no
Apr 05 20:59:41 clvm-a root[7830]: IP_CIP=yes,ip_status=noq
Apr 05 20:59:41 clvm-a root[7833]: iptables-legacy -I INPUT -d 192.168.3.169 -i eth0 -j CLUSTERIP –new –

と言うトレース結果が。あれ、IP_CIP は IP アドレスじゃなくて yes が入っている! RHEL だとここには何も入らないか、IPアドレスのどちらか。なので、IP_CIP に yes が入ることがおかしい。でソースを読むと、IP_CIP が 空 じゃなくて、 ip_status が no だとすると、iptables を呼び出す模様。どうやら IP_CIP が yes なので誤動作した感じ。

openSUSE でSLES のマニュアルを見ながら、クラスタのテストをしています。clvm 環境ができたので、今度は仮想IP のテストをしようとしたらハマりました。

仮想IP の定義後、ノードを再起動すると、syslog に

Mar 23 12:28:31 clvm-a IPaddr2(vip)[3495]: ERROR: iptables failed
Mar 23 12:28:31 clvm-a pacemaker-execd[3148]: notice: vip start (call 25, PID 3394) exited with status 1 (iptables failed) (execution time 73ms)
Mar 23 12:28:31 clvm-a pacemaker-controld[3151]: notice: Result of start operation for vip on clvm-a: error (iptables failed)
Mar 23 12:28:31 clvm-a pacemaker-controld[3151]: notice: vip_start_0@clvm-a output [ iptables v1.8.7 (legacy): chain name not allowed to start with -'\n\nTryiptables -h’ or ‘iptables –help’ for more information.\nocf-exit-reason:iptables failed\n ]

調べて見たところ、crm から呼び出している IPaddr2モジュールの中で、iptables を呼び出し、それがエラーを出していました。どうも、openSUSE 15.6 にインストールされている iptables バージョン1.8.7 ではクラスタ関係の機能が無いのですね。それで動作しなかったという次第。

さて、どう対処したものか。

Proxmox VE を使い、openSUSE (だけじゃなくて、たぶん他のLinuxディストリビューションも)を動かし、ネットデバイスを再作成すると、OSから見たデバイス名が変わることがあります。たとえば今まで eth0 だったものが eth1 になるなどです。どうやら、MAC アドレスが変わると別デバイスと認識して、デバイス名を割り当て直すようです。これは、 /etc/udev/rules.d/70-persistent-net.rules を観て気がつきました。

対応としては、70-persistent-net.rules を観て、Proxmox VE で、ネットデバイスの MAC アドレスを eth0 として認識しているデバイスのものに変えてあげればうまくいきます。

この辺も参考になります。
https://syu-m-5151.hatenablog.com/entry/2017/11/03/162656