プロジェクト

全般

プロフィール

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が起動しており便利なのですが、起動の都度サブネット番号が変わってしまい、実作業には不向きです。後で専用の内部スイッチを作成してそこに接続するよう設定変更を行います。

Hyper-V 内部スイッチ設定

初期設定

デフォルトでは、ストレージ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


11日前に更新