Debian 12¶
2023年6月にリリースされた DebianのLTS(Long Term Support)で、5年間のセキュリティサポートが提供されます。
Debian 12のコードネームは、"Bookworm"です。
OS設定(Minimal)¶
Windows OSの仮想環境 Hyper-V における仮想ゲスト用途で最小限のCLI(コマンドラインインタフェース)を提供するコンソールのみのOS設定について記載します。
仮想ゲストイメージの準備¶
クラウド(VM)向けDebian 12イメージのダウンロード¶
Debian Official Cloud Imagesサイトから、Debian 12のディレクトリ(bookworm)を辿ります。
https://cloud.debian.org/images/cloud/bookworm/
各種用途の仮想ゲストイメージが用意されています。Hyper-Vで動かすには、"nocloud"を使用します。2026-05-05時点で最新のイメージファイルは次です。ファイルサイズは400MBほどです。
https://cloud.debian.org/images/cloud/bookworm/20260502-2466/debian-12-nocloud-amd64-20260502-2466.qcow2
Hyper-Vで実行可能な形式に変換¶
Hyper-Vで動作するには、ファイル形式を qcow2形式からVHDX形式に変換する必要があります。Windows上で変換するには、WSL2のLinux上で qemu-imgコマンドを利用する方法があります。
$ qemu-img convert -f qcow2 -O vhdx debian-12-nocloud-amd64-20260502-2466.qcow2 \ debian-12-nocloud-amd64-20260502-2466.vhdx
このファイルを、Hyper-Vの仮想ディスクファイルの保管場所に保存します。
例)E:\Hyper-V\debian12-alfa\
Hyper-Vに仮想マシンを作成¶
- Hyper-Vマネージャを起動し、[新規] で「仮想マシンの新規作成」ウィザードを開く
- 名前欄に仮想マシン名を入力
- 場所欄に仮想マシンの設定・ディスクファイルを置く親ディレクトリを指定
- 世代の指定で[第2世代]を選択
- 起動メモリはデフォルト(4096MB)とし、[この仮想マシンに動的メモリを使用します]のチェックを外す
- ネットワークの接続は、[Default Switch]1を選択
- 既存の仮想ハードディスクを使用するにチェック、上で保管した場所を指定
作成後、仮想マシンを選択して[設定] > [セキュリティ] で[セキュアブートを有効にする]のチェックを外します。
同様に設定の[プロセッサ]で仮想プロセッサの数を2に変更します。
起動して root でログインできれば成功です。
1 Default Switchは、デフォルトでNAT、DHCPが起動しており便利なのですが、起動の都度サブネット番号が変わってしまい、実作業には不向きです。後で専用の内部スイッチを作成してそこに接続するよう設定変更を行います。
初期設定¶
デフォルトでは、ストレージ3GBとなっています。1GBほど使用済みでのこり1.5GBほどです。
ロケール¶
ロケールは、最小構成でいくのでデフォルトのC.UTF-8のままとします。
# localectl
System Locale: LANG=C.UTF-8
VC Keymap: (unset)
X11 Layout: (unset)
タイムゾーン¶
日本の時刻帯(Asia/Tokyo)を設定します。
# timedatectl set-timezone Asia/Tokyo
# timedatectl
Local time: Tue 2026-05-05 23:01:11 JST
Universal time: Tue 2026-05-05 14:01:11 UTC
RTC time: Tue 2026-05-05 14:01:12
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
キーボード¶
デフォルトではASCII配列キーボードなので、Hyper-Vを動かしているWindowsにJIS配列キーボードを接続している場合はキーが異なるので設定します。
loadkeysコマンド(とそれに必要なデータ)を含む console-data パッケージをインストールします。
# apt install console-data
一次的に日本語配列をロードして反映されるかを確認します。
# loadkeys jp106
この後で記号をキーボードから入れてみてJIS配列となっていることを確認します。loadkeysは再起動すると戻ってしまうので、永続設定を行います。
- etc/systemd/system/loadkeys.service をエディタで新規作成し次を記述
[Unit] Description=Set keyboard layout [Service] Type=oneshot ExecStart=/bin/loadkeys jp106 [Install] WantedBy=multi-user.target
# systemctl enable loadkeys.service
ホスト名¶
ホスト名の設定
# hostnamectl set-hostname deb-alfa
# hostnamectl
Static hostname: deb-alfa
:(略)
ユーザーアカウント作成¶
- グループの作成(groupadd)
- ユーザーの作成(useradd, passwd)
- ユーザーをsudoグループに追加(usermod)
ssh接続¶
# apt install openssh-server
/etc/ssh/sshd_configの設定¶
- rootのsshログイン禁止
PermitRootLogin no
ファイアウォール¶
UFWを使用します。細部は T.B.D.
時刻同期¶
デフォルトで、systemd-timesyncd サービスが実行、2.debian.pool.ntp.org に接続して時刻同期しています。
時刻同期状況の確認¶
# timedatectl timesync-status
Server: 172.105.192.74 (2.debian.pool.ntp.org)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
Leap: normal
:(略)
時刻同期先の指定¶
- /etc/systemd/timesyncd.conf
NTP=ntp.nict.jp
ネットワーク(固定IP)¶
デフォルト設定¶
クラウドイメージ(nocloudを含む)では、Netplanをフロントエンドとしてsystemd-networkdによるネットワーク設定が適用されています。
- systemd-networkd.service
- netplan.io パッケージ
- /etc/netplan/90-default.yaml
dhcp4/dhcp6を有効とする設定
固定IP設roo定¶
Hyper-VでDefault SwitchからInternal Switchに切り替えた後に設定します。
新規作成:/etc/netplan/95-static-ip.yaml
名前変更(無効化):/etc/netplan/90-default.yaml.orig
netplanでは、/etc/netplan/ディレクトリ下に存在する複数設定ファイル(YAML形式)を名前昇順に読み込み、それらの設定をマージします。同じキーで異なる値の設定がある場合後勝ちになります。
そこで、90-default.yamlより後に読み込まれる名前(例、95-static-ip.yaml)で固定IP設定を定義します。
network:
version: 2
ethernets:
eth0:
adresses:
- 192.168.150.31/24
dhcp4: false
routes:
- to: default
via: 192.168.150.254
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
- yamlの記述では、最上位キー
networkで開始 - versionキーに値2を設定
- もし NetworkManager をバックエンドに使用するなら、rendererキーにNetworkManagerを指定(デフォルトはnetworkdなので今回は省略)
- dhcp4 を無効に設定し、アドレスとデフォルトゲートウェイ、DNSアドレスを設定
ただし、90-default.yamlと95-static-ip.yamlとの共存が実際にはうまくいかなかったので90-default.yamlを削除(リネーム)して無効化することで対処
/etc/netplan/90-default.yaml を残したまま95-static-ip.yamlを追加したところ、DHCP待ちのままとなってしまい、eth0が degraded configuringのままとなって固定IPアドレスが付与されませんでした。netplan getでnetplan設定(複数設定ファイルをマージした後)を見ると、eth*に合致したインタフェースについてdhcp4/dhcp6がtrueとなり、eth0についてdhcp4/dhcp6がfalseとなり両方存在してしまっています。eth0については設定が上書きになっていないようなので、90-default.yamlを削除することで対処しました。
設定が完了したら、再起動します。
通常netplanの設定を変更した後は、コマンド netplan apply を実行することで設定反映します。そのためには、ovsdb-server.serivce が稼働している必要あります。ですが、今回使用したクラウドイメージではそのサービスを含む openvswitch-switch パッケージが未インストールのため、OS再起動で反映させています。
用途別¶
Cassandra DB¶
Cassandra DB 5.0は、依存関係(JavaおよびPython)上、Debian 13で実行するのが厳しいため、Debian 12で実行します。
Java 17のインストール¶
# apt install openjdk-17-jdk-headless
:(略)
After this operation, 289 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Python 3.11¶
Debian 12のデフォルトのPythonバージョンがシステムインストール済みです。
$ python3 -V
Python 3.11.2
Cassandra DBのインストール¶
aptリポジトリ設定に Cassandra DBのリポジトリを追加します。
$ echo "deb [signed-by=/etc/apt/keyrings/apache-cassandra.asc] https://debian.cassandra.apache.org 50x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
リポジトリキーを取得します。
$ sudo curl -o /etc/apt/keyrings/apache-cassandra.asc https://downloads.apache.org/cassandra/KEYS
リポジトリ情報を更新し Cassandra をインストールします。
$ sudo apt update
:
$ sudo apt install cassandra
aptでインストールすると、systemdのサービス cassandra.service が登録され実行されます。
$ systemctl status cassandra
● cassandra.service - LSB: distributed storage system for structured data
Loaded: loaded (/etc/init.d/cassandra; generated)
Active: active (running) since Wed 2026-05-06 16:58:05 JST; 1min 45s ago
Docs: man:systemd-sysv-generator(8)
Process: 1459 ExecStart=/etc/init.d/cassandra start (code=exited, status=0/SUCCESS)
Tasks: 52 (limit: 4635)
Memory: 2.3G
CPU: 6.654s
CGroup: /system.slice/cassandra.service
└─1576 /usr/bin/java -ea -da:net.openhft... -XX:+UseThreadPriorities -XX:+He>
CassandraのCLIで対話環境に入ってみます。
$ cqlsh
:(中略)
Connected to Test Cluster at 127.0.0.1:9042
[cqlsh 6.2.0 | Cassandra 5.0.8 | CQL spec 3.4.7 | Native protocol v5]
Use HELP for help.
cqlsh>
仮想マシンのディスクサイズ増強¶
Debian 12のクラウドイメージ(nocloud)は3GBのストレージですが、Cassandra DBの稼働に必要なパッケージをインストールしていったところ、1.6GBの使用状況で残りが1.1GBほどとなりました。
そこで、ストレージを増強することとします。
まず、Hyper-Vマネージャで仮想ディスク容量を増加します。
Hyper-V仮想ディスク容量の拡張
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 2.9G 0 part / ├─sda14 8:14 0 3M 0 part └─sda15 8:15 0 124M 0 part /boot/efi
sdaディスクの容量が3Gから8Gに増えました。
しかし、パーティションは変更なしです。ここで、sda1をディスク容量いっぱいまで増やすこととします。
growpartコマンドで、パーティションを指定し容量を増やします。growpartコマンドは、cloud-guest-utilsパッケージに含まれるので、存在しなければこのパッケージをインストールします。
$ sudo growpart /dev/sda 1
CHANGED: partition=1 start=262144 old: size=6027264 end=6289407 new: size=16515039 end=16777182
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 7.9G 0 part /
├─sda14 8:14 0 3M 0 part
└─sda15 8:15 0 124M 0 part /boot/efi
sda1を割り当てているルートパーティションのファイルシステムを拡張します。
$ sudo resize2fs /dev/sda1
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/sda1 is now 2064379 (4k) blocks long.
これでルートパーティションの容量が増えました。
クラスタの設定¶
nodetool¶
$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 127.0.0.1 151.83 KiB 16 100.0% e92923a1-f120-4c63-b0ff-a8d89bb34023 rack1