この記事は openSUSE Advent Calendar 2022 の18日目です。

systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。

今回は、wdctl を紹介します。

コマンド名: wdctl
パッケージ: util-linux-2.37.2-150400.8.8.1.x86_64
動作: ○

wdctl は、システムのウオッチドッグ情報を表示するコマンドです。引数なしで起動すると以下のように表示します。

% wdctl
Device:        /dev/watchdog0
Identity:      Software Watchdog [version 0]
Timeout:       10 seconds
Pre-timeout:    0 seconds

オプションによって表示形式を変更することは出来ますが、基本的に上記のような情報を表示するだけです。ですので、あまり使い道はないかと思います。

Combustionに至るまで

By Syuta Hashimoto @ 2022-12-15 08:59

この記事は openSUSE Advent Calendar 2022 の15日目です。

CombustionはMicroOSのプリメイドイメージをプロビジョンしてくれるスクリプトです。

ここ数年でMicroOSのプリメイドイメージのプロビジョンソフトが移り変わったので、紹介させて頂きます。

cloud-init

cloud-initはもともとUbuntuのクラウドイメージのプロビジョンソフトウェアでした。MicroOSは初期の頃対応していました。今はOpenStack用のプリメイドイメージ専用になっています。

ignition

CoreOSのプロビジョンソフトウェアで、JSONで記述した設定ファイルを使います。

MicroOSは今もignitionに対応しています。MicroOSのignitionのwikiはこちらです。

Combustion

MicroOS専用のプロビジョンソフトウェアです。スクリプトを書くことで、かなり柔軟な設定をすることが出来ます。dracatモジュールとのことですので、追っていろいろ見てみたいと思います。Combustionのwikiはこちらです。

Linodeでスピードテスト

By Syuta Hashimoto @ 2022-12-13 08:38

この記事は openSUSE Advent Calendar 2022 の13日目です。

さて、前回 AkamaiさんがLinodeサービスアピールしてますと紹介させて頂いたのですが、各リージョンのスピードテストが出来る場所があったので紹介させて頂きます。

なお、ちゃんとリージョンに日本もありました。

このページはログインせずとも使えるみたいですね。

日本で測定してみました。

試しに、ムンバイで測定してみました。

それぞれ一回測定しただけなので信憑性は微妙ですが、確かにpingやDLで差が出ていますね。

Akamaiが親会社なので、近いところのリージョンへのアクセスは期待できるのでは無いでしょうか。

この記事は openSUSE Advent Calendar 2022 の12日目です。

systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。

今回は、timedatectl を紹介します。

コマンド名: timedatectl
パッケージ: systemd-249.11-150400.6.8.x86_64
動作: ○

詳細:
timedatectl は、システム時刻の表示/変更を行うコマンドです。引数なしで起動すると以下のような形で日付と時刻を表示します。また、引数 show を指定すると、機械で処理しやすい形で表示します。

% timedatectl
               Local time: 日 2022-12-11 14:27:55 JST
           Universal time: 日 2022-12-11 05:27:55 UTC
                 RTC time: 日 2022-12-11 05:27:55
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
% timedatectl show
Timezone=Asia/Tokyo
LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=yes
TimeUSec=Sun 2022-12-11 14:30:45 JST
RTCTimeUSec=Sun 2022-12-11 14:30:45 JST

日付の変更もできます。但し、NTP が動作している場合は、一旦 NTP の同期を止めてからでないと変更ができません。ここは date コマンドと違うところです。

# timedatectl set-time "2022-12-11 15:40:00"
Failed to set time: Automatic time synchronization is enabled
# timedatectl set-ntp no
# timedatectl set-time "2022-12-11 15:40:00"
# timedatectl
               Local time: Sun 2022-12-11 15:40:07 JST
           Universal time: Sun 2022-12-11 06:40:07 UTC
                 RTC time: Sun 2022-12-11 06:40:07
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

日付や時刻の変更は、時刻同期機能を入れておけば使う事は少ないと思いますが、date コマンドよりは情報量が多いので、場合によっては便利かもしれません。

この記事は openSUSE Advent Calendar 2022 の10日目です。

systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。

今回は、powerprofilesctl を紹介します。

コマンド名: powerprofilesctl
パッケージ: power-profiles-daemon-0.12-1.2.x86_64
動作: ○

詳細:
powerprofilesctl は、電源モードの表示や変更を行うプログラムです。powerprofiles は GNOME の 設定→電源 で表示される電源モードになります。プロファイルの一覧、現状のプロファイル状態は以下のようにして表示できます。

% powerprofilesctl list
  balanced:
    Driver:     placeholder

* power-saver:
    Driver:     placeholder
% powerprofilesctl get
power-saver

また変更は下記のように行えます。

# powerprofilesctl set balanced
# powerprofilesctl get
balanced

ただ、電源プロファイルを変更することはほとんど無いので、このコマンドの出番はあまりないのかもしれません。

この記事は openSUSE Advent Calendar 2022 の5日目です。

systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。

今回は、hostnamectl を紹介します。

コマンド名: hostnamectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○

詳細:
hostnamectl は、システムのホスト名や関連する情報の表示や変更を行うプログラムです。昔ながらの、ホスト名を表示するプログラム hostname は、引数を指定しないで入力すると、単にホスト名を返すだけですが、hostnamectl を引数を指定しないで実行すると、

 Static hostname: suse154
       Icon name: computer-vm
         Chassis: vm
      Machine ID: 61ee5253e44f403c9918308e232c84b8
         Boot ID: 2dc4f7eae3724c6497708a64e08a516c
  Virtualization: kvm
Operating System: openSUSE Leap 15.4
     CPE OS Name: cpe:/o:opensuse:leap:15.4
          Kernel: Linux 5.14.21-150400.24.33-default
    Architecture: x86-64
 Hardware Vendor: QEMU
  Hardware Model: Standard PC _i440FX + PIIX, 1996_

と、たくさんの情報を表示します。今回テストしている環境が KVM 配下であることもバレてしまいます。旧来の hostname コマンドと互換を取るには、引数として hostname を指定すれば良いです。単に hostname を返します。
もちろん、root でないとできませんが、host 名を変更することも可能です。

# hostnamectl hostname suse154A
# hostnamectl hostname
suse154A

そのほかに、JSON形式で出力することも可能です。

hostnamectl --json=pretty
{
        "Hostname" : "suse154",
        "StaticHostname" : "suse154",
        "PrettyHostname" : null,
        "DefaultHostname" : "localhost",
        "HostnameSource" : "static",
        "IconName" : "computer-vm",
        "Chassis" : "vm",
        "Deployment" : null,
        "Location" : null,
        "KernelName" : "Linux",
        "KernelRelease" : "5.14.21-150400.24.33-default",
        "KernelVersion" : "#1 SMP PREEMPT_DYNAMIC Fri Nov 4 13:55:06 UTC 2022 (76cfe60)",
        "OperatingSystemPrettyName" : "openSUSE Leap 15.4",
        "OperatingSystemCPEName" : "cpe:/o:opensuse:leap:15.4",
        "OperatingSystemHomeURL" : "https://www.opensuse.org/",
        "HardwareVendor" : "QEMU",
        "HardwareModel" : "Standard PC _i440FX + PIIX, 1996_",
        "ProductUUID" : null
}

JSON 形式で出力する場合、hostname オプションを指定すると、json 機能は無効になってしまうようです。

従来からの hostname コマンドもたぶん残っていくとは思いますが、新しい hostnamectl コマンドも覚えて置いた方が良いかもしれません。

この記事は openSUSE Advent Calendar 2022 の7日目です。

systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。

今回は、loginctl を紹介します。

コマンド名: localectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○

詳細:
loginctl は、systemd の login マネージャからの情報を表示したり設定するためのツールです。表示に関しては、従来の w コマンドや ps コマンド などの機能が含まれています。たとえば、現在ログインしている情報は、下記のように表示されます。

%loginctl
SESSION  UID USER   SEAT  TTY
     11 1000 ribbon       pts/0
     12 1000 ribbon       pts/2
     13    0 root
      6 1000 ribbon seat0 tty2

w コマンドではこのように表示されます。表示する内容がかなり異なります。

%w
 20:10:49 up 12:55,  5 users,  load average: 0.00, 0.01, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ribbon   :        :                15:20   ?xdm?   2:18   0.07s gdm-session-worker [pam/gdm-password]
ribbon   tty2     tty2             15:20   12:55m  0.08s  0.08s /usr/lib/gnome-session-binary
ribbon   pts/0    192.168.X.Y      18:17   10:29   0.28s  0.00s less
ribbon   pts/2    192.168.X.Y      19:46    1.00s  0.11s  0.01s w
root     pts/3    ::1              20:02    7:58   0.09s  0.09s -bash

自分自身のセッション情報は session-status サブコマンドで表示できます。

%loginctl session-status
12 - ribbon (1000)
           Since: Sat 2022-12-03 19:46:34 JST; 28min ago
          Leader: 7798 (sshd)
             TTY: pts/2
          Remote: 192.168.X.Y
         Service: sshd; type tty; class user
           State: active
            Unit: session-12.scope
                  ┣ 7798 "sshd: ribbon [priv]" ""
                  ┣ 7800 "sshd: ribbon@pts/2" "" ""
                  ┣ 7801 -bash
                  ┣ 8134 loginctl session-status
                  ┗ 8135 less

さらに、 user-status サブコマンドで、詳細な情報を得ることができます。pstree コマンドにも似た感じです。

%loginctl user-status
ribbon (1000)
           Since: Sat 2022-12-03 15:20:50 JST; 5h 8min ago
           State: active
        Sessions: 12 11 *6
          Linger: no
            Unit: user-1000.slice
                  ┣session-11.scope
                  ┃┣ 7431 "sshd: ribbon [priv]" ""
                  ┃┣ 7437 "sshd: ribbon@pts/0" "" ""
                  ┃┣ 7438 -bash
                  ┃┣ 7780 man loginctl
                  ┃┗ 7792 less
                  ┣session-12.scope
                  ┃┣ 7798 "sshd: ribbon [priv]" ""
                  ┃┣ 7800 "sshd: ribbon@pts/2" "" ""
                  ┃┣ 7801 -bash
                  ┃┣ 8270 loginctl user-status
                  ┃┗ 8271 less
                  ┣session-6.scope
                  ┃┣ 4748 "gdm-session-worker [pam/gdm-password]"
                  ┃┣ 4778 /usr/bin/gnome-keyring-daemon --daemonize --login
                  ┃┣ 4784 /usr/lib/gdm/gdm-wayland-session /usr/bin/gnome-session
                  ┃┣ 4788 /usr/lib/gnome-session-binary
                  ┃┗ 7997 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
                  ┗user@1000.service
                    ┣app.slice
                    ┃┣app-gnome-YaST2\x2dorg.opensuse.yast.LAN-5394.scope
                    ┃┃┣ 5523 dbus-launch --autolaunch 61ee5253e44f403c9918308e232c84b8 --binary-syntax>
                    ┃┃┗ 5524 /usr/bin/dbus-daemon --syslog-only --fork --print-pid 5 --print-address 7>
                    ┃┣app-gnome-gnome\x2dsoftware\x2dservice-5036.scope
                    ┃┃┗ 5036 /usr/bin/gnome-software --gapplication-service
                    ┃┣app-gnome-org.gnome.Evolution\x2dalarm\x2dnotify-5045.scope
                    ┃┃┗ 5045 /usr/lib/evolution-data-server/evolution-data-server/evolution-alarm-noti>
                    ┃┣app-gnome-org.gnome.SettingsDaemon.DiskUtilityNotify-5018.scope
                    ┃┃┗ 5018 /usr/lib/gsd-disk-utility-notify

そのほかに、セッションを強制切断する kill-session サブコマンドがあります。たとえば、ssh でログインしているセッションを強制切断するためには、
1) w コマンドでユーザを調べる
2) そのユーザが使っている sshd プロセスを ps コマンドで調べる
3) kill コマンドでそのプロセスを終了させる。
というステップが必要でしたが、loginctl では、セッション番号を表示させた後、そのセッションを終了するコマンドを入力することで作業が行えますので、手間が減ります。

# loginctl
SESSION  UID USER   SEAT  TTY
     11 1000 ribbon       pts/0
     12 1000 ribbon       pts/2
     13    0 root
      6 1000 ribbon seat0 tty2

4 sessions listed.
# loginctl kill-session 13
# loginctl
SESSION  UID USER   SEAT  TTY
     11 1000 ribbon       pts/0
     12 1000 ribbon       pts/2
      6 1000 ribbon seat0 tty2

3 sessions listed.

loginctl は、表示形式が見やすいので、w コマンドなどと併用すると便利でしょう。