カテゴリー: ガジェット Page 1 of 97

RHEL系LinuxサーバにRTX 6000を認識させる。

※昨今のトレンドである「GPU前提のLinuxサーバ」つまり、AI環境に必須の

  • データセンタークラスのGPU
  • それをRHEL系Linuxに認識させ
  • 更にDockerというトレンドでも動かす

という難易度が高く――そして、インフラ屋にとって極上の素材を得る経験がありました。

そのときのメモです。(氷見の本マグロを捌くことになった調理師のような気分でした)

“逸般”の誤家庭的な環境

まず、これを一般家屋に置くと言うことはないでしょう。

  • OS:
    • Rocky Linux 9.x (Minimal Install)
  • Kernel:
    • 5.14.0-x (RHEL 9 Standard)
  • GPU:
    • NVIDIA RTX 6000 Ada Generation x 1
      • →2025/12/06時点でもちょっとした軽自動車が買えるやつです
  • Driver:
    • NVIDIA Driver 590.xx (Open Kernel Module)
  • Container Runtime:
    • Docker CE 27.x + NVIDIA Container Toolkit

前提環境の整備

  1. OSインストールを行います。(Rocky Linux Minimal)
  2. ネットワークの設定を行います。
  3. dnf updateを済ませます。

NetworkManagerによるネットワーク設定

固定IP化および自動接続設定を行う。

  • 接続プロファイル名の正規化 (デバイス名と合わせる)
sudo nmcli connection modify "Wired connection 1" connection.id eno2
  • 固定IP設定
sudo nmcli connection modify eno2 ipv4.addresses xx.xx.x.x/16
sudo nmcli connection modify eno2 ipv4.gateway Gateway IP
sudo nmcli connection modify eno2 ipv4.dns "DNS1 DNS2"
sudo nmcli connection modify eno2 ipv4.method manual
sudo nmcli connection modify eno2 connection.autoconnect yes

→ これをやっておかないと、再起動したときにNW設定が消えます。

  • 設定反映
sudo nmcli connection up eno2

システム更新とリポジトリ適用

RHEL 9 系でサードパーティ製パッケージを入れるため、これは必須です。特に、CRB (CodeReady Builder) の有効化を忘れると依存解決ができず、高性能GPUを認識させることができません。

  • dnf全更新
sudo dnf update -y
  • サーバ再起動
sudo reboot

→ カーネルアップデートも含まれるため。

  • CRB有効化 (旧 PowerTools)
sudo dnf config-manager --set-enabled crb
  • EPEL導入
sudo dnf install epel-release -y

NVIDIA Driver の導入

ここまで来たらいよいよ本命。(先のマグロの例に例えると、いよいよマグロの身に刃を当てていきます)

【重要】 RTX 6000 Ada はプロプライエタリ版ドライバではなく、Open Kernel Module (open-dkms) を要求します。これに気づかずハマりかけました。

依存関係の解決とリポジトリの導入。

  • 開発ツールの導入
sudo dnf groupinstall "Development Tools" -y
  • カーネルヘッダの導入
sudo dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
  • NVIDIA公式リポジトリ (RHEL9用) 追加
sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/cuda-rhel9.repo

旧ドライバ/競合の排除

以前のインストール試行や(ハマったところ)、OSに入っているであろうGPUドライバを取り除かないと詰まります。

  • nvidia dkmsドライバのアンインストール
sudo dnf remove nvidia-driver kmod-nvidia-latest-dkms -y
  • nvidia dkmsドライバのリセット
sudo dnf module reset nvidia-driver -y

Open Kernel Module 版のインストール

  • dnf module機能を使って open-dkms ストリームを指定してインストール
sudo dnf module install nvidia-driver:open-dkms -y
  • サーバ全体を再起動してカーネルモジュールをロード
sudo reboot

ドライバ動作確認

nvidia-smi

-> `Driver Version: 590.xx / GPU Name: RTX 6000 Ada / VRAM: xxGB が表示されることを確認します。

コンテナ基盤の構築

筆者はコンテナが好みではないのですが、それはそれです。相手のオーダーに答えるのもまたお仕事。

Docker CE のインストール

ここではpodman ではなく Docker CE を採用しました。

  • Docker CEレポジトリ追加
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • Docker CEインストール
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
  • Docker 自動起動有効化
sudo systemctl enable --now docker
  • 現在のユーザをDockerグループに加える
sudo usermod -aG docker $USER

NVIDIA Container Toolkit の導入

DockerコンテナでGPUが見えないと、せっかく「Dockerを入れろ」というオーダーが無になります。

  • Toolkitインストール
sudo dnf install nvidia-container-toolkit -y
  • Dockerランタイム設定 (daemon.jsonの更新)
sudo nvidia-ctk runtime configure --runtime=docker
  • Tookit/ランタイム反映
sudo systemctl restart docker

動作確認 (パススルーテスト)

コンテナ内部から GPU が見えるか確認します。

sudo docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi

成功時、コンテナ内からホスト同様の nvidia-smi 結果が出力されれば動作完了です。

追加要素:最新トレンドに合わせた開発環境の用意。

言語ランタイム (Modern Runtime)の導入

OS標準を汚さず、最新の開発環境を整備する。

  • Node.js 22+:
    • NodeSourceリポジトリより導入。これは割愛です。(どっかしら探せば出てくるので)
  • Python 3.12:
    • Rocky Linuxは3.9。しかも、OSの核となっているプログラムなので、ソースコードを用いて altinstall (共存インストール) しないとサーバそのものが吹っ飛びます。

※実行例

  • 開発環境導入
sudo dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel tk-devel xz-devel
  • ソースコードダウンロード
wget https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tgz
  • ソースコード展開
tar xzf Python-3.12.8.tgz && cd Python-3.12.8
  • ソースコードconfigure(最適化オプション)
./configure --enable-optimizations
  • CPUコアフルに用いての高速メイク
make -j $(nproc)
  • altinstall
sudo make altinstall

altinstallを入れないと上述したようにサーバが吹っ飛びます。

トラブルシューティング (Tips)

以下のエラーに出くわしたときの原因と対策です。

  • NVRM: requires use of the NVIDIA open kernel modules:
    • 原因: Ada世代のGPUに対し、従来のプロプライエタリドライバを入れたため。
    • 対策: dnf module install nvidia-driver:open-dkms を使用しました。
  • Secure Boot:
    • ドライバ導入前に BIOS/UEFI で Disabled になっていることを確認すること(署名周りのトラブル回避)。

RHEL系サーバ、実物環境下でのネットワーク設定

はじめに

GUIが多くなったとは言え、Linuxサーバは基本的にCLI(コマンドライン)・SSH接続によるリモート操作が基本です。この、CLIの環境下でのネットワーク設定という基本のメモです。

環境とやったこと

極めてよくあるユースケースです。即ち

「サーバ実機はこれである。ひとまず組織内(社内)ネットワークにつなげ」

という指令への対処。

  • 物理サーバ
    • 今回はVPSではありません。実機です。
    • その大きさ、重さを知るのもインフラ屋の醍醐味です。
  • Rocky Liunx 9.x
    • (RHEL系フォーク、ミニマルインストール)
  • ローカルNWにサーバのIPを割り当てる。
  • NW設定を有効化する。
    • 固定IP。クライアントならいざ知らず、サーバ運用は固定IPであるべきです。
    • IP: 172.xx.xx.xx/16 (/16はサブネットマスク255.255.0.0を意味します)
    • GW: 172.xx.254.254 (※これはあくまでも例です)
    • DNSサーバ/ドメイン:ローカルで定められているもの。

さっくりとした手順

ではありますが、かなり慎重に書いています。

  1. RockyLinuxサーバをMinimalでインストールします。
  2. サーバコンソールに直接ログインします。
  3. ネットワークインタフェースを確認します。
  4. nmcliによりネットワークを設定します。
  5. ネットワークインタフェースを有効化します。
  6. サーバを結線してリンクアップを確認します。
  7. 最初のdnf updateを行います。

RockyLinux 9.6インストール

インストール方法については割愛。GUI無しのMinimalをインストールします。というのも、多くのサービスが入ってしまうと、自分が管理しきれない部分が増えると共に、そこが脆弱性となるからです。

また、ここでは最初からネットワークにつなぎません。設置する組織によってはLAN接続も許可制になっているパターンが極めて多いです。(IPも指定されたものを使うというのが実情でしょう)

サーバコンソールにログイン

この段階ではrootでも構いません。何せ、物理的に言葉通りの意味で切断されているのですから。

物理ネットワークの確認

vpsと違い、最初からネットワークにつながっていません。当然、IPも振られていません。なので「どのLANポートを使うか?」から始まります。

nmcli

を実行します。これはNetwork Manager Command Line Interfaceの略であり、RHELサーバの肝と言えるネットワーク設定コマンドです。(普段Ubuntuサーバを使う筆者は少々混乱しました)

筆者環境では

  • eno2
  • eno3

がありました。ここではeno2を確認していきます。

ネットワーク設定

  • 現状確認
nmcli connection show

以下のような例が出てきます。

NAME     UUID                                  TYPE      DEVICE
eno2     UUID文字列                             ethernet  eno2
lo       UUID文字列                             loopback  lo
eno3     UUID文字列                             ethernet  eno3

この、eno2というポートを使います。

  • ※例外

もし、もし NAME 列に Wired connection 1 とあり、DEVICE 列が eno2 ならば、次の手順で名前を変更します。

  • ※例外時の実施- "Wired connection 1" を "eno2" にリネーム
sudo nmcli connection modify "Wired connection 1" connection.id eno2
  • IPとサブネット設定 (CIDR表記でスマートに)
sudo nmcli connection modify eno2 ipv4.addresses 172.xx.xx.xx/16

→ 実際に指定されたIPアドレスを入力します。このとき、二重チェックで「同一ネットワーク内にIPアドレスが無いか? / 打ち間違いがないか?」を確認しましょう。被ってしまうと単純な破滅が待っています。

  • ゲートウェイ設定
sudo nmcli connection modify eno2 ipv4.gateway 172.xx.254.254

こちらも同様。別のゲートウェイを設定していないかを確認。

  • DNS設定
sudo nmcli connection modify eno2 ipv4.dns "DNS1 IPアドレス DNS2 IPアドレス"

→ DHCPと異なり、固定IPはDNSサーバを指定します。組織内では冗長性のため複数あるケースがほとんどです。

  • ドメイン設定
sudo nmcli connection modify eno2 ipv4.dns-search "組織内ドメイン"

→ 組織内ドメインで、FQDNの名前解決を効率化するため。

  • メソッドを手動にしてIPアドレス固定
sudo nmcli connection modify eno2 ipv4.method manual
  • 【重要】自動接続をONにする (これを忘れると再起動後に死ぬ)
sudo nmcli connection modify eno2 connection.autoconnect yes

→ autoconnect no の状態だと、システムが再起動した後、NetworkManagerは設定ファイルは認識していますが、その接続を自発的に起動しません。つまり、何らかの事情でサーバそのものを再起動した場合、このネットワーク設定が断たれます。即ち、あらゆるネットワークから完全に切り離されます。

ネットワーク設定の有効化

ここまで来たらいよいよサーバにネットワークを認識させます。このコマンドの前に深呼吸をして落ち着きましょう。(サーバ室/データセンターからの離席を許されるならこの段階で)

  • 再起動して設定をロード
sudo nmcli connection up eno2
  • IPアドレスの確認
ip addr show eno2

→ インターフェース eno2 に正しいIPアドレス、ネットマスクが割り当てられたか。

eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
  • ルーティングの確認
ip route

→ デフォルトゲートウェイ(外部ネットワークへの出口)が正しく設定されたか。

IPアドレスが正しくても、どこへパケットを送るか(経路情報)がなければ、ローカルネットワーク外へは通信できません。

default via  172.xx.254.254 dev eno2

などの行がないと、外部環境は無意味です。初歩的ですが非常に詰まりやすいポイントです。

  • DNS設定の確認
cat /etc/resolv.conf

→ ネームサーバーと検索ドメインが設定ファイルに反映されたか。

nameserver: 設定した社内のDNSサーバーのIPアドレス(例: nameserver 192.168.1.53)が正しくリストアップされているか。
もしこれらが正しく反映されていなければ、名前解決ができず、Webサイトの閲覧やホスト名でのサーバーアクセスができなくなります。

サーバの結線

上記が確認できたら、サーバという鉄の箱を「ネットワークと通信ができる」状態へと落とし込みます。ここでも、単純ながら致命的なミスが待ち構えています。

以下を確認しましょう。

  • LANポートの接続先と接続元は合っているか?
    • 特に、LANポートの迷路とも言えるサーバ室やデータセンターではこれらを間違えると地獄が待っています。比喩的な意味では無く。
  • LANケーブルは断線が無いか?
    • 切り分けの手間を減らします。
  • ストレートとクロスを間違えていないか?
    • たまにありますが結構盲点です。

疎通確認

  1. Gatewayへの Ping:ping -c 4 172.xx.254.254
    • これが通れば、L2/L3(組織/社内ネットワークへの物理・論理接続)は成功しています。
  2. DNSサーバへの Ping:ping -c 4 [DNSサーバーのIP]
    • これが通れば、名前解決の準備OKです。
  3. 外の世界への Ping:ping -c 4 google.com
    • これで初めて「インターネット接続完了」です。

DNFアップデート

サーバ全体のLinuxシステムを「最新の状態にする」おまじないです。

sudo dnf update -y

ここでの注意点はトラフィック。大容量のデータがこのサーバに流れます。貧弱な回線ではたちまちパンクします。

Complete!と表示されたら、

sudo reboot

で物理的に再起動します。というのも、dnfアップデートはたいがいカーネルの更新も伴うからです。

この再起動後、「先ほどのネットワーク設定が活きているか? 失われていないか?」が伴い、初めてこのネットワーク設定という初歩的な設定が完了します。

BIOSビルトインのRAID設定メモ。

サーバ設定時、BIOSに備わっているRAID機能を有効化したときのメモです。

SATA接続、同容量、同じ型番のSSDを「RAID1」として、冗長化をしたハードウェアのフェイルセーフのメモです。

環境

  • ASU-PRO/WS/W790E-SAGE/SE

というワークステーション(サーバ)のMBをいじりました。

さっくりとした手順

  1. BIOSの画面に入ります。
  2. Sata ModeをRaidにします。
  3. Raid構成をセットします。
  4. Raidが見えるかを確認します。

BIOS画面のセッティング

  1. Platform Configuration > PCH Storage Configuration > Controllr SATA And RST Configuratioに進む。
  2. SATA Mode Selection > Raidに進む。

この段階ではまだ有効化されていないので、F10で情報を保存。サーバそのものを再起動します。

Raid構成

再起動後、再びBIOSに入ります。

  1. Advanced > Intel (R) VROC SATA Controllerに進みます。
  2. Create Raid Volumeを選択します。

以下の通りセッティングします。

  • Name:Raidのボリュームを探す
  • Raid LevelでMirroringがStripingを選択します。(Striping/Raid0はまず利用しないでしょう)
  • Select Diskでボリュームを選択します。
  • その他項目(ラベリングや容量など)を設定。

Create Volumeを実行します。

Raid構成確認

その後、BIOS画面で設定を確認します。
OSインストールで、ディスクそのものが1つ(ミラーリング)として見えていれば成功です。

BookStackのカスタム404ページを更に変更。

以前のこのページを更に差し替え。

/path/to/BookStack/resources/views/errors/

の`404.blade.php`の内容を、

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 Not Found: The Final Problem</title>
<style>
  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700;900&display=swap');

  body {
    background-color: #000000;
    color: #d4d4d4;
    font-family: 'Noto Sans JP', sans-serif;
    margin: 0;
    padding: 20px;
    line-height: 1.6;
    overflow-x: hidden;
  }

  .container {
    max-width: 800px;
    margin: 0 auto;
    border: 2px solid #ff0055; /* Neon Pink Border */
    box-shadow: 0 0 15px #ff0055, inset 0 0 20px rgba(255, 0, 85, 0.2);
    padding: 40px;
    position: relative;
    background: repeating-linear-gradient(
      0deg,
      #0a0a0a,
      #0a0a0a 2px,
      #000000 2px,
      #000000 4px
    ); /* Scanline effect */
  }

  h1 {
    color: #ff0055;
    font-size: 3rem;
    text-align: center;
    text-transform: uppercase;
    text-shadow: 2px 2px 0px #ffffff;
    margin-bottom: 10px;
    letter-spacing: 0.1em;
    font-weight: 900;
  }
  
  .sub-header {
    color: #00ffcc; /* Cyber Green */
    text-align: center;
    font-size: 1.2rem;
    margin-bottom: 40px;
    font-family: monospace;
  }

  h2 {
    color: #ffff00; /* Warning Yellow */
    border-left: 5px solid #ff0055;
    padding-left: 15px;
    margin-top: 40px;
    margin-bottom: 20px;
    font-size: 1.5rem;
    text-shadow: 0 0 5px rgba(255, 255, 0, 0.5);
  }

  p {
    margin-bottom: 1.5em;
    font-size: 1.1rem;
  }

  .shout {
    color: #ff0055;
    font-weight: bold;
    font-size: 1.2rem;
  }

  .emphasis {
    color: #00ffcc;
    font-weight: bold;
  }

  .quote-box {
    border: 1px dashed #00ffcc;
    padding: 15px;
    margin: 20px 0;
    background-color: rgba(0, 255, 204, 0.05);
    font-style: italic;
  }

  .footer-nav {
    margin-top: 50px;
    text-align: center;
    border-top: 1px solid #333;
    padding-top: 20px;
  }

  .btn {
    display: inline-block;
    background-color: #ff0055;
    color: #000;
    padding: 10px 25px;
    text-decoration: none;
    font-weight: bold;
    font-size: 1.2rem;
    border: 2px solid #fff;
    transition: all 0.3s ease;
    box-shadow: 5px 5px 0px #00ffcc;
    transform: skew(-10deg);
  }

  .btn:hover {
    background-color: #000;
    color: #ff0055;
    border-color: #ff0055;
    box-shadow: 5px 5px 0px #fff;
    transform: skew(-10deg) translate(-2px, -2px);
  }

  hr {
    border: 0;
    height: 1px;
    background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(255, 0, 85, 0.75), rgba(0, 0, 0, 0));
    margin: 30px 0;
  }

  /* Glitch Effect Animation for H1 */
  @keyframes glitch {
    2%, 64% { transform: translate(2px,0) skew(0deg); }
    4%, 60% { transform: translate(-2px,0) skew(0deg); }
    62% { transform: translate(0,0) skew(5deg); }
  }
  h1:hover {
    animation: glitch 0.3s cubic-bezier(.25, .46, .45, .94) both infinite;
    color: #00ffcc;
  }

</style>
</head>
<body>

<div class="container">
  <h1>404 Not Found</h1>
  <div class="sub-header">ERROR: PAGE ANNIHILATED / ページはアナイアレーションされた</div>

  <h2>💀 第一章:クリエイターの恐怖、ドイル=サンの葛藤</h2>
  <p>時はマッポーの世、ヴィクトリア朝のヤミ。ドイル=サンは自らが生み出した、探偵という名の、知的なリアルニンジャ、シャーロック・ホームズ=サ
ンの存在に辟易していた。</p>
  
  <div class="quote-box">
    「アイエエエ! 私は医術というリアルなサイエンスを極めたいのに!ヘッズどもはホームズ=サンの狂気の物語しか求めない!」
  </div>

  <p>ドイル=サンにとってホームズ=サンは、ニューロンを支配し、創造性を吸い尽くす、邪悪なバイオ・ゴーストの如し! 彼は決断した。<span class="shout">「ホームズ=サンを殺す!完全に、そして、シメやかに、アナイアレーションする!」</span></p>
  
  <p>彼の脳内には既に、ホームズ=サンのデス・プランが構築されていた。ヘッズたちの熱狂、ストランズ・シンジケートの金と欲! これらを断ち切るには、究極のバイオレンス、すなわち、デスしかない!</p>
  <p>ドイル=サンは内心、自らが生み出した、巨大な、そして、熱狂的な読者層(ヘッズ)に恐れをなしていた。「アイエエエ! 彼らは私のロードではない!私が彼らのロードであるはずなのに!」</p>

  <hr>

  <h2>💥 第二章:ライヘンバッハのNRS! 滝壺のデス・ファイト</h2>
  <p>場所はスイス。ライヘンバッハの滝!</p>
  <p>ホームズ=サンの宿敵、モリアーティ=サンとの最終決戦。二人の、知的なリアルニンジャは激流の轟音の中で格闘!</p>
  
  <p class="shout">「イヤーッ!」「グワーッ!」</p>

  <p>ドイル=サンは冷静にペンを走らせる。二人の、そして、彼の分身の如き、ホームズ=サンは滝壺へと落ち、デス! 証拠は一切なし! 完全なアナイア
レーション!</p>
  <p>ストランズ・マガジンに掲載されたこの物語を目撃した読者、すなわち、ヘッズたちは一斉にNRSを発動!</p>
  
  <div class="quote-box">
    「アイエエエエ! ホームズ=サンが死んだナンデ!?」
  </div>

  <p>彼らのリアリティは滝壺へと引きずり込まれた! ホームズ=サンは架空の存在ではない! 彼らの日々の、そして、生きるための精神的な支えであった
のだ!</p>
  <p>ライヘンバッハの滝は単なる、景勝地ではなく、世界のニューロンが崩壊した地点となった。</p>

  <hr>

  <h2>🔥 第三章:IRCの大炎上! フジキドめいた絶望</h2>
  <p>ドイル=サンは勝利を確信! 「これで私は自由だ!」</p>
  <p>だが、彼の解放の喜びは一瞬で砕かれる! ヘッズたちの狂気がドイル=サンの私生活を襲ったのだ!</p>
  <p>電報、手紙、そして、ストランズ・シンジケートからの緊急のIRC通信がドイル=サンの屋敷を包囲! これぞIRCの大炎上!</p>
  
  <div class="quote-box">
    「貴様の殺意、許さん!」「ホームズを戻せ!」「私はドイルのロードをやめる!」
  </div>

  <p>女性のヘッズたちは喪章を付け、ストリートでデモ! マガジンの発行部数は暴落! ドイル=サンは現実のニンジャに襲われるが如く、四方八方からヘ
ッズの狂気に晒された!</p>
  <p>ドイル=サンは悟る。自らの手で生み出した、この物語の世界に囚われていることを!</p>
  <p>これはまるでニンジャスレイヤー、フジキド・ケンジ=サンの如し! 家族を殺され、復讐のソウルに憑依され、望まぬ、そして、終わりの見えない、デス・ファイトの世界に引きずり込まれた!</p>
  <p>ドイル=サンも同じ! 望まぬ、そして、辞めることの許されない、クリエイターとしてのデス・ゲームに囚われたのだ!</p>

  <hr>

  <h2>✨ 第四章:奇跡の生還! 読者の要求がニューロンを支配</h2>
  <p>ドイル=サンに選択肢はなかった。ホームズ=サンを殺すことで得た「自由」は幻想! 彼のリアリティはヘッズたちの狂気によって完全に、そして、シメやかに支配されていた。</p>
  
  <p class="emphasis">「奇跡の生還、これしか策なし!」</p>

  <p>10年の沈黙を経て、ドイル=サンは筆を執る。「空き家の冒険」!</p>
  <p><span class="shout">ゴウランガ!</span> ホームズ=サンは生存していた! モリアーティ=サンとの格闘の後、奇跡的に生還し、三年の間、世界のヤミで潜伏していたという狂気的な筋書き!</p>
  <p>読者、すなわち、ヘッズたちは歓喜! NRSは修復され、IRCの炎上は鎮火!</p>
  <p>ドイル=サンは再び、ホームズ=サンの物語を書き続けるという運命に逆戻り。フジキド=サンがニンジャをスレイする宿命から逃れられない如く、ド
イル=サンもホームズ=サンという知的なリアルニンジャの物語を書き続けるという宿命から逃れられなかったのだ!</p>
  <p>クリエイターとヘッズの関係が逆転した、アリエナイ・インシデント! これぞフィクションを超えた、リアルな、そして、ゴウランガな史実! <span class="shout">スゴイ!</span></p>

  <div class="footer-nav">
    <p>このリアル・ニンジャ・ゴトの文学的事件をさらに掘り下げるか? それとも、次の恐るべき史実を所望か?</p>
    <a href="/" class="btn">トップページへ戻る</a>
  </div>

</div>

</body>
</html>

に置き換え。

のような、マッポーめいた文章にしました。

この手の、遊び心を発揮できるというのは本当に自サイトの強みです。

「あなたにとっての“ナイフ”」とは?-3- (「私が量産品を選ぶ理由」)

前回、「万年筆」を

  • 格好良いから

という理由で使い始めました。その書き味や機能性に惹かれて言った結果、なぜLAMY Safari(AL-Star)を選択したかという部分について解説します。

自分の感覚という「Book」

『メリー・ポピンズ・リターンズ』の『本は表紙じゃ分からない/Cover is not the Book』に曰く

Cover is not the book / 心が目に見えないように本も
So open it up and take a look / 表紙の美しさに騙されちゃダメ
'Cause under the covers one discovers / 中身読んだらやさしい王様
That the king may be a crook / 詐欺師だとわかるかも

とあります。この、「きちんと中身を読んだ」結果として、今の自分はLAMY Safari(AL-Star)になったという形です。

LAMYを使って良かった点:重心

これが一番、自分が良かったと思うポイントです。LAMY万年筆最大の特徴と言えるクリップ付きのキャップ。筆記時、これを後ろにつけることで重心が後ろ寄りになります。これにより、必然的に重心は親指と人差し指の付け根にフィット。
軽く支えるだけでさらさらとした書き味を保証してくれます。

より重いアルミを用いたAL-Starはそれを更に補強。ひんやりとした金属の素材感と相まって「よりしっかりした書き味」を楽しめます。

LAMYを使って良かった点:フィット感

持ちやすさ、と言い換えてもいいでしょう。持ち手の上が自然にカット(三角形のカーブ)があることで、手になじむような形にフィット。

何よりも、この持ち手が明示されていることで万年筆にありがちな「どこがペン先の上か?」を一切気にする必要がありません。

LAMYを使って良かった点:速度

この場合の速度は

  1. 書こうとする
  2. ペンを取り出す
  3. キャップを取り外す
  4. 書き始める

のスタートです。多くの高級万年筆は(キャップレスでない場合は)ネジ式のキャップであるため「キャップを取り外す」がハードルになります。

ですが、LAMY万年筆はシンプルなキャップ式を採用。「取り外す」手間が秒単位で速くなります。

LAMYを使って良かった点:カラーバリエーション

『忍風戦隊ハリケンジャー』のカラーで揃えられるなどバリエーションは豊富

通常色、限定色、チャーム付きなど、多彩なカラーバリエーションがあります。

単に物欲を充たしてくれるのはもちろんのこと、ボディに沿った色のインクを詰めることで、インク補充時に「このライトグリーンには『翠玉』のインクを。黄色には『夕焼け』を選ぶ」と、直感に従ったインク補充が可能になります。

量産品であるという美徳

おおよそ道具というものは使ってなんぼ、壊れてなんぼという考えです。なので、「書く」という「思考を伝達する道具」の替えが効かないというのは、それ自体が単一障害点(SPOF: Single Point of Failure):その部分に障害が発生すると、システム全体が停止してしまうような、代替手段のない単一の要素になります。

しかし、LAMY Safariであれば

  • Amazon等のネットショップで2500円程度から買える(2025年11月現在)。
  • 大都市圏の文具店、量販店でも扱っている。

という、「替えが効く」理由としては十分です。紛失、破損などがあっても「ペンそのものを用意できる」という安心感は非常に有用です。

量産品のユーザーの多さ

これに落ち着く前、中華万年筆を使っていました。「安いに越したことはない」と。しかし、

  • インクの乾きが速く、キャップをしてもすぐにペン先が詰まる
  • ひどいのになるとインクがすべて飛び跳ねてしまった

という「安物買いの銭失い」を地で行く結果となりました。この「授業料」の結果、ある程度は出費を覚悟しても(それでも高級万年筆よりは安価です)それなりのものとして白羽の矢が立ったのがLAMY万年筆でした。

最初は「樹脂製のデザイン」等がハードルとなっていましたが

  • 古くからのデザインという普遍性は、それだけ使われる理由があるということ。
  • 工学的に優れたデザインのため飽きが来ないということ。
  • ファンが多いため世界各国のユーザーからの知見が山ほどあること。

という、量産品の強みが前面に打ち出されたのです。

まとめに代えて

以上、「格好良さ」から始めた万年筆は、

  • 合理的な機能
  • 量産品の強み

という筆者のプラグマティズムにより、これを求めたという結論。コレクションを手放すことになったとか、壊れたという話でない限り、他のブランドに手を出すのはまだまだ先となりそうです。何せ、前の記事でお話ししたとおり5年前のSafariが未だに現役なのですから。

ここで、「量産品の強み」を最も的確に表した『ガールズ&パンツァー』、サンダース大付属のアリサがM4シャーマン戦車を

「丈夫で壊れにくいし、おまけに居住性も高い!
  バカでも乗れるくらい操縦が簡単で、
 バカにも扱えるマニュアル付きよ!」

と評した言葉を以て、本稿を締めくくります。

「あなたにとっての“ナイフ”」とは?-2- (万年筆を選んだ理由)

基本的に筆者はプラグマティズムを以て道具を選びますが「それ以上の理由」。即ち

  • 伊達
  • 酔狂

の2つで使い始めた結果として、この万年筆というスタイルが確立されたという話です。

メインの万年筆一覧

まずこちらを。

LAMY Safari / AL-Starを中心に、一部は

  • Pilot ライティブ
  • カスタム ヘリテイジ

が一部混じっています。筆者が帰る範囲で諸々を試し、これに落ち着きました。これらは筆者のアナログの言葉通りの意味で屋台骨として支える道具。2025年現在、一番長く使って13年。短くても2年は愛用しています。

万年筆のデメリット

結論から言います。万年筆はデメリットが多い道具です。

値段の問題。

他の筆記具とベースの価格が違います。(全ての道具は天井知らずなので一般的に買えるものに絞ります)

これら3つは100均でも見かけるものでしょう。

  • シャープペンシル
    • 100円商品として1本は買える。替え芯を合わせても200円ほど。(+消費税)
  • 鉛筆:
    • 100円で4本程度。鉛筆削りを足しても200円。(+消費税)
  • ボールペン
    • これはもっと安く、100円で10本ほどセットで買えるでしょう。

ですが、万年筆は、入門用に限った上でも

おおよそ「500円台〜6,000円台」まで。(Copilot調べ)

価格帯特徴・用途例主なモデル例(参考)
〜500円超低価格帯。プラスチック製で軽量。試し書きや学生の練習用に最適。プラチナ プレピー、ダイソー製品など
1,000〜2,000円初心者向けの定番。カートリッジ式が多い。PILOT カクノ、セーラー ふでDEまんねん
2,000〜4,000円書き心地やデザイン性が向上。プラチナ プレジール PILOT ライティブ
4,000〜6,000円金属製や透明軸など、質感やインクの楽しみが広がる。長く使える1本に。ラミー サファリ、セーラー プロフィットJr.、パイロット コクーン
6,000円以上本格派の入門機。耐久性・筆記性能ともに高く、長期使用を前提とした設計。パイロット カスタム74(入門上級)

と、桁が違います。

消耗品の問題。

ここに「インク」が加わります。日本のボールペンの筆頭ブランドである『Jet Stream』シリーズとカートリッジ式、これら、一つでどこまで書けるのかを見てみます。

筆記具インク容量の目安書ける文字数(概算)原稿用紙(400字詰)換算備考
ジェットストリーム(0.5mm)約0.4〜0.5ml約20,000〜25,000字約50〜60枚油性・低粘度インクで長持ち
パイロット 万年筆カートリッジ約0.9ml約4,000〜5,000字約10〜12枚字幅や筆圧により変動
セーラー 万年筆カートリッジ約1.0ml約5,000〜6,000字約12〜15枚染料インクでやや多め
  • ジェットストリームのボールペンは約20,000〜25,000文字
  • パイロットやセーラーの万年筆カートリッジは約4,000〜6,000文字

この時点で、ボールペンのコストパフォーマンスは圧勝。

もっとわかりやすく言うと原稿用紙換算では

  • ボールペン:約50〜60枚
  • 万年筆:約10〜15枚分

というより、ボールペンのインク切れを体験するという方はかなり少ないのではないでしょうか。(書き味が怪しくなったら新しいボールペンを買うというのが基本的な運用だと思います)

また、カートリッジもインクも高額です。(インク沼という言葉を聞いたことがあるかと思います)

手間の問題。

万年筆のカートリッジ交換はボールペンとほぼ同じぐらいとは言え手間です。

インク補充式ともなると

  • インクがこぼれないように(倒れでもしたら大惨事です)
  • インクを間違えないように(複数本、色が違うものを用いている場合)
  • 吸入した後、確実に書けるかの確認

と、別次元の手間が加わります。

確実性の問題。

万年筆は、上記のシャープペンシルや鉛筆、ボールペンなどに比べて「誰でも使える」筆記具ではありません。断じて。

再掲しますが:

漫画『MASTERキートン』に以下のやりとりがあります。

「やめておけ」
「…………」
「拳銃の方が、ナイフよりも速いと思っているんだろう。
 だが、拳銃はデリケートな道具だ。
 弾が出ないかもしれないし、
思い通り的に当たるとは限らん。
おまけに拳銃は、
抜き、構え、引き金を引くまでに三動作(スリーアクション)……
その点ナイフは、一動作(ワンアクション)で終わる。
この距離なら、絶対に俺が勝つ!!
どうする? それでもやってみるかね?」

万年筆は

  • デリケートさ
  • 使うまでのアクション
  • 書き始めるまでの動作

全てが劣ります。特に、品質が悪いものともなると、使った瞬間にインクが漏れて服に付着するなんてこともあります。

この、一般的な筆記具ではなく万年筆を筆者が使い続ける理由を述べます。

使い始めた理由

「格好良いから」

これに尽きます。ハッキリ言って、これ以外の理由は全て『後付け』に過ぎません。

  • インクを補充する
  • あのペン先の格好良さ
  • ボールペンとも違う高級感

全てが「他の人と違う特別感」が、使い始めたきっかけでした。

インク補充の格好良さ

上記、述べたインク補充は、サーバのメンテナンスのごとき、手間をかけることで「自分のものである」という愛着を持つことができます。

自分で組み立てたものなど、自分の手で労力をかけたものに対して、本来の価値以上の価値を見出す心理的な傾向

いわゆる「イケア効果」の発露の表れです。

「書き味が違う」

これもまた別格でした。筆圧が強い方だったので、力を入れずにさらさらと書ける、滑るような書き心地は、一度慣れてしまうと他に戻れなくなった次第です。

それなりのものを使えば長持ちする。

上述した通り、手入れされた万年筆は圧倒的な強度を誇ります。

  • 未だに使えているヘリテイジ カスタムは2012年から愛用。
  • 限定版、丸の内Oazo10周年記念で買ったヘリテイジは2015年から愛用。
  • Lamy Safariも5年は使っているものがある。

「万年」の名は伊達ではありません。

まとめに代えて「合理性を超えるもの」

最終的に

  • この書き味があるならもっと試してみよう
  • これは自分のものだというもの
  • TCGプレイヤー特有のコレクション欲

が加わり、ちょっとした万年筆のコレクション群を持ち歩き、日々使い続けているという話でした。では、なぜLAMY Safariに落ち着いたかというのはまた次に機会を設けて記事を記します。

映画『Back to the Future』の

「If you're gonna build a time machine into a car, why not do it with some style?」
「タイムマシンを車にするなら、カッコよく作らなきゃだろ?」

という言葉を以て、本記事はひとまず区切りとします。

『My Favourite Things(私のお気に入り)』でのモチベーション維持。

はじめに

Rome was not built in a day.

の言葉を引き合いに出すまでもなく、「趣味での個人Webサーバの運用・管理」というやつは一筋縄ではいきません。

  • リソースの定期的な監視
  • 脆弱性対応
  • 脅威への対策

等など、続ければ続けるほど、そして知識を得れば得るほど課題が増えます。そんな中で、どうやってモチベーションを維持していくかという筆者なりの回答です。

「My Favourite Thints』 (※英国英語を用いるのは仕様です※)

『メリー・ポピンズ』と共に筆者が困ったときに立ち返る『サウンド・オブ・ミュージック』。

Raindrops on roses
And whiskers on kittens
Bright copper kettles

で始まる、自分の好きなものを並べた歌詞『My Favourite Things』は

When I’m feeling sad
I simply remember my favourite things
And then I don’t feel so bad

と、「お気に入りのもの」を思い浮かべることで実際軽減される。

ポジティブな注意の転換と感情の自己調整という心理的メカニズムが働くとかなんとか。

注意の転換

  • 人は悲しいとき、ネガティブな思考に囚われがちです。
  • 「お気に入りのもの」を思い出すことで、意識の焦点がポジティブな対象に移る。
  • これは「認知的再評価(Cognitive Reappraisal)」の一種で、感情の強度を下げる効果があります。

自己効力感の回復

  • 「悲しいときは、お気に入りを思い出す」という歌詞は、自分で感情を調整できるというメッセージを含んでいます。
  • これは「自分には対処する力がある」という感覚があります。

そんな自分のお気に入り

  • 「かんばん」
    • ドメインとして取得した reisalin.com / ryza.jp の2つは、これ自体が「お気に入り」を含んでいます。
  • 「道具」の数々
    • 以前紹介した万年筆や手帳は、「メモを取る」という思考の戦いにおいて優位に立てるような気合いを持たせられます。

ここまでは前にも紹介したもの。

ここに

  1. 「どこでもメンテナンスができる道具」
  2. 「集中できる場所」
  3. 「美味しいもの」

の3つを加えます。

ThinkPad

今年購入したThinkPad。中古とは言え

  • 基本性能
  • サイズ感
  • キーボードの打ちやすさ
  • 剛性と信頼性

を有していて、何よりもデザイン性もお気に入り。

重要なのは、ここを介してSSH接続を行える「自分のサーバへのアクセスゲートである」ことです。この、お気に入りの道具を介してサーバ制御を行うというのがモチベーションを維持していくことができます。

お気に入りの場所

写真にも示したのは『夢の島熱帯植物館』。

  • 休憩スペースは植物園に面した絶好のロケーション
  • 息抜きとして様々な植物や花という目に優しいものが揃っている

と、集中にはこれ以上無いほどの条件が揃っています。

そのため、先の歌詞に示した「悲しいとき」でも訪れることにしています。

実際問題として:この夢の島熱帯植物館を舞台に「WebArena → XServerへのWebサイト移行」を行うことができたほどです。

美味しいもの

これはあくまでも「自分にとっての」という意味です。美味しい食べ物がモチベーションを以下に高めるかは今更説明するまでもないでしょう。

こちらのコメダ珈琲の「重軽食」とも言えるようなボリュームある食事と糖分は、頭を使うサーバ管理になくてはならないものです。(これは一例ですが)

まとめとして

この『My Favourite Things』の私の学びは

「サーバ作業のような一瞬のミスですべてが持って行かれる作業に際しては、心身共に平衡を取るマインドセットが必要」

ということに尽きます。どっちかが崩れていれば、本当にアホみたいなミスを行ってしまうというのが筆者が様々な失敗という「授業料」での気づきなので。

余談「験を担ぐ」

徹底した金銭のリアリズムを描いた『ナニワ金融道』において以下のやりとりがあります。

「えらい早いやないか灰原君 君は金融屋に向いとるで!」
「いや まぐれですよ まぐれ」
「いやちがう これはあんたの宿命やで!
 この業界はのー 不渡りが不渡りを呼ぶんや
 だからワシ等はゲンを担ぐんや
 初日のしょっぱなで(融資の見込み客を)ひっかけたんや
 金融屋になるのはあんたの宿命やで!」

と、この、リアリズムに生きている世界ですら「ジンクス」とか「験を担ぐ」というマインドセットが必要という身も蓋もない結論を以て本稿を締めくくります。

免責事項:これは甲斐谷忍先生の作品『ONE OUTS』に敬意を表したシステム名/ファンアートであり、公式(集英社、製作委員会など)とは一切関係ありません。

『ONE OUTS』システム番外:ipsetによるUFWの効率化。

はじめに

筆者が用いているWebへの攻撃を防ぐ、MOD_SECURITYとApache設定、シェルスクリプトの連携「ONE OUTSシステム」。これは「実際にWebサイトにアクセスした者」への盾として機能していますが、「アクセス未満」での低レイヤーでの攻撃を仕掛ける者を防ぎきることができません。

例えば、SYNフラッド攻撃はWebサイトへの攻撃を仕掛けるわけではないのでログに残らず、じわじわとリソースを奪っていきます。

かといって、これらのSYNフラッド攻撃は極めて広範囲のIPレンジから仕掛けてくるので

sudo ufw insert 1 deny from xxx.xxx.xxx.xxx

とするには、ufwでのルールが広範になりすぎてメンテナンス性ならびにシステムパフォーマンスの低下を招きます。

これを解決するための手段を設けました。

環境

  • Ubuntu 24.04
  • ufw導入済み

行ったこと

  1. ipsetコマンドをインストールします。
  2. ブロックリストの設定を行います。
  3. ipsetコマンドでSYNフラッド攻撃を行う攻撃者をレンジごとブロックします。

事前注意

これは、カーネルメモリにufwのブロックリストを付与する、「破壊的アップデート」の可能性が発生します。

  • セキュリティポリシー
  • 明確な運用基準

組織単位 で行う必要があります。

手順

ipsetコマンドのインストール

※筆者の好みでaptitudeを用いています。環境に合わせてapt等に読み替えます。

  • パッケージアップデート
sudo aptitude update
  • ipsetインストール
sudo aptitude install ipset

※ 要注意 ※

ここでは、ipset-persistantコマンドを入れていません。なぜなら、ufwと競合する結果、パッケージ管理はufwを破壊する可能性があるからです。

  • ipsetインストール確認
ipset -v
ipset v7.19, protocol version: 7
ipset v7.19: Kernel error received: Operation not permitted

※この、not permittedは、root権限で実行していないため許可されていないというメッセージです。

ipsetのルール変更

  • ブロックしたいIPを格納するための「セット」をメモリ上に作成します。

これは再起動時に消えます

sudo ipset create ufw-blocklist hash:net

ufwにipsetを参照するルールを追加します。

  • ufwの前段ルールをバックアップ
sudo cp -pi /etc/ufw/before.rules /path/to/backup/before.rules.$(date +%Y%m%d)

→ バックアップ先は任意のものを指定します

  • バックアップ確認
sudo diff -u /path/to/backup/before.rules.$(date +%Y%m%d) /etc/ufw/before.rules 

※ここでsudoを付与します。なぜなら、これはroot権限でしか読み取りできないからです

  • ファイル修正

上記、/etc/ufw/before.rulesの内容を慎重に修正します。 *.filterのすぐ下の行です。

# ===================================================================
# "ufw-blocklist" セットに含まれるIPからの全パケットを破棄する
-A ufw-before-input -m set --match-set ufw-blocklist src -j DROP
# ===================================================================

# ok all existing rules
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  • ファイル修正確認
sudo diff -u /path/to/backup/before.rules.$(date +%Y%m%d) /etc/ufw/before.rules 

以下の差分になっていることを確認します。

 *filter
+# ===================================================================
+# "ufw-blocklist" セットに含まれるIPからの全パケットを破棄する
+-A ufw-before-input -m set --match-set ufw-blocklist src -j DROP
+# ===================================================================
+
+# ok all existing rules

リロード前確認(最重要)

さて、ここまで手順通りに行えばufwのリロードは正常に完了します。しかし、ここで今一度

  • sudo ipset create ufw-blocklist hash:netを実行したか?
  • /etc/ufw/before.rulesを編集したか?
  • この編集は既存ファイルの内容を削除していない(追記のみ)か?

を確認しましょう。確認しなければ、この先に待ち構えているのは「失敗した場合の自分自身のロックアウト」にもつながります。

ufwリロード

よく深呼吸しましょう。実行前に何か飲み物を飲んでおいてもいいぐらいです。

sudo ufw reload

ファイアウォールを再読込しましたのメッセージが出れば成功です!

sudo ufw status

でも状態:アクティブを確認します。

ipset のリストを「永続化」する

ipset-persistent の代わりに、UFW自身の起動・停止スクリプトに、リストの保存・復元を組み込みます。

  • A. 保存用ファイルのパスを定義

まず、ipset のリストを保存するファイルを決めておきましょう。 ここではIPTABLES_IPSET_SAVE_FILE="/etc/ufw/ipsets.save"と定義します。

  • B. UFW起動時にリストを「復元」する設定

ufw が起動する前に、保存したリストを読み込むようにします。

sudo cp -pi /etc/ufw/before.init /path/to/backup/before.init.$(date +%Y%m%d)

でバックアップを取ります。(バックアップディレクトリを一括にしているならbefore.init.$(date +%Y%m%d)の前にbefore.rules.$(date +%Y%m%d)を作っているはず。「タブの補間はせず、確実にファイルのバックアップを取りましょう)

sudo diff -u /path/to/backup/before.init.$(date +%Y%m%d) /etc/ufw/before.init

で、バックアップが成功していることも確認します。※diffでもsudoを付与します。なぜなら、これはroot権限でしか読み取りできないからです

/etc/ufw/before.initを編集します。

ファイルの一番上(#!/bin/sh の直後)に、以下の行を追記します。

IPTABLES_IPSET_SAVE_FILE="/etc/ufw/ipsets.save"

# 起動時に ipset リストをファイルから復元する
if [ -f "$IPTABLES_IPSET_SAVE_FILE" ]; then
    ipset restore -f "$IPTABLES_IPSET_SAVE_FILE"
fi
sudo diff -u /path/to/backup/before.init.$(date +%Y%m%d) /etc/ufw/before.init
 #!/bin/sh
+IPTABLES_IPSET_SAVE_FILE="/etc/ufw/ipsets.save"
+
+# 起動時に ipset リストをファイルから復元する
+if [ -f "$IPTABLES_IPSET_SAVE_FILE" ]; then
+    ipset restore -f "$IPTABLES_IPSET_SAVE_FILE"
+fi

を確認。

  • UFW停止時にリストを「保存」する設定

ufw が停止(またはリロード、シャットダウン)する後に、現在のリストをファイルに保存するようにします。

sudo cp -pi /etc/ufw/after.init /etc/conf_backup/after.init.$(date +%Y%m%d)
sudo diff -u /etc/conf_backup/after.init.$(date +%Y%m%d) /etc/ufw/after.init 

※diffでもsudoを付与します。なぜなら、これはroot権限でしか読み取りできないからです

/etc/ufw/after.initを管理者権限で編集します。 ファイルの一番上(#!/bin/sh の直後)に、以下の行を追記します。

IPTABLES_IPSET_SAVE_FILE="/etc/ufw/ipsets.save"

# 停止時に現在の ipset リストをファイルに保存する
ipset save -f "$IPTABLES_IPSET_SAVE_FILE"

追記後、

sudo diff -u /etc/conf_backup/after.init.$(date +%Y%m%d) /etc/ufw/after.init 

で差分を確認します。

 #!/bin/sh
+IPTABLES_IPSET_SAVE_FILE="/etc/ufw/ipsets.save"
+
+# 停止時に現在の ipset リストをファイルに保存する
+ipset save -f "$IPTABLES_IPSET_SAVE_FILE"
  • コマンド実行権付与
sudo chmod +x /etc/ufw/before.init /etc/ufw/after.init

→ コマンドを追記しているので重要です!

再度のufwリロード前の確認

ここでも

  • /etc/ufw/before.initを編集し、差分通りか?
  • etc/ufw/before.initを編集し、差分通りか?
  • この編集は既存ファイルの内容を削除していない(追記のみ)か?
  • /etc/ufw/before.init /etc/ufw/after.initに実行権限が付与されているか?

を確認しましょう。確認しなければ、こちらも自分自身のロックアウトにつながります。

ufwリロード

よく深呼吸しましょう。今度は手元にあればお茶菓子を食べてもいいぐらいです。

sudo ufw reload

ファイアウォールを再読込しましたのメッセージが出れば成功です!

sudo ufw status

でも状態:アクティブを確認します。

ここまで来たら:SYNフラッド攻撃への対処

これは、対象のIPアドレスをシャットアウトする「慈悲なき王」です。

ブロック対象は慎重に慎重を期します。

  • メモリ上のリストに即時追加
sudo ipset add ufw-blocklist IPアドレス・NWアドレス

→ 実際のIPアドレスを半角で入力しましょう。

  • メモリ上のリストをファイルに「永続化」
sudo ipset save ufw-blocklist -f /etc/ufw/ipsets.save

(sudo ipset save ではない点に注意してください)

  • 永続化確認
cat /etc/ufw/ipsets.save 

として

create ufw-blocklist hash:net family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0xcce80b68
add ufw-blocklist IPアドレス・NWアドレス

等と表示されれば成功です。

※この作業はufwリロード不要です。※

まとめ

「相手が回りくどい攻撃をしてきたら、更に回りくどい方法をとらなければならない」という形。

正直、この作業は二度とやりたくない部類に入ります。ですが、一度設定してしまえば

sudo ipset add ufw-blocklist IPアドレス・NWアドレス

で永続的に執拗な攻撃を仕掛ける攻撃者に対処することが可能です。

「杖」に選ばれる買い物のために。(要件定義、してみましょう)

はじめに

ハリー・ポッターシリーズ。ハリーがダイアゴン横丁で杖を手に入れる際のオリバンダー翁の言葉。

The wand chooses the wizard, Mr. Potter. It's not always clear why
「杖が魔法使いを選ぶのです、Mr.ポッター。何故そうなるかは、はっきりとは分かりませんが」

この「何故」に焦点を当てつつ、システム開発における大事なフェイズ「要件定義」になぞらえ

  • 何故これが大切なのか?
  • そして、これが上手くいくとシステム開発が上手くいく(つまり、システムが魔法使いというユーザーを選ぶ)のか?
  • この要件定義を日常生活に落とし込むには?

の3ステップほどで話してみようと思います。

そもそも要件定義とは?

システム開発における要件定義とは、「何を作るか」「何を実現するか」を明確にする、プロジェクトの最も土台となる工程です。

具体的には、ユーザー(魔法使い)がシステム(杖)に何を求めているのか、どのような課題を解決したいのかを徹底的にヒアリングし、その要求を機能や性能の仕様として具体化していく作業を指します。

これは、システムの設計図や仕様書を作成するための「羅針盤」を決める作業であり、「ユーザーが本当に必要とするものは何か?」を深く掘り下げ、開発チームとユーザーの間で共通の認識を築くためのものです。

これが上手くいくと?

オリバンダー翁の言葉のように、「杖が魔法使いを選ぶ」という関係性がシステム開発にも当てはまります。要件定義が上手くいくと、システムはユーザーの真のニーズに応える「まさにその杖」となり、開発全体がスムーズに進みます。

The wand chooses the wizard, Mr. Potter.

この「選ばれた状態」とは、単に機能が揃っているというだけではありません。ユーザーの潜在的な要求や、言葉にはなっていない「不便さ」までを汲み取り、それを解決する最適な形(システム)が提供されることを意味します。

要件定義が成功することで、開発の途中で「思っていたものと違う」といった手戻りや、不要な機能の開発を防ぐことができ、結果として

  • 予算とスケジュールの遵守
  • 高品質なシステムの実現
  • ユーザー(魔法使い)の満足度向上

といった、すべての関係者にとって良い結果(システムが魔法使いというユーザーを選ぶ)に繋がるのです。

自分自身の例:スマートウォッチを選んだ理由と機種選定までの流れ

何故必要だったのか

健康診断で芳しくない数値が出たことからこの話は始まります。

加齢から来る体調不良は目に見えて明らかでしたし、「このままでは危険」と判断。一念発起して体調管理できる方法を考えました。

そのためには「今の自分がどういう状況にあるのか?」を客観的、絶対的な目線で確認する(自分自身のロギング)は必要不可欠だと結論づけます。

なぜなら、

  • 節食しているのに太るのはどうして?
  • 眠れないとき/眠れたときの状態でパフォーマンスの差

などを考慮しないと、どのようなトレーニングをしても非効率/或いは心身を痛めることになるのは目に見えて明らかだからです。

「どこに進むか(どのような健康を改善するか)を決めるためには自分自身の現在地(体調)を知る」

を前提として考えないと、どのような健康法/ダイエット方法を試したところで無意味。この、自分自身の体調を知るために最もシンプルな方法が

「スマートウォッチによる自分の体調の視覚化」

でした。

特に

  • 歩数(動きの)管理
  • 睡眠

に焦点を当てます。

逆算して必要だったスマートウォッチ

  • 自分の性格上、フィットネスジムや健康管理を診てもらうというのは性に合わないし、強制されるのはそもそも嫌い。
  • それなら、ウェアラブルデバイスによって自分のペースで確認する方が以下の三者にとっていい結果になる。
    • 自分自身
    • お金(ジムの入会費やサブスク)
    • サービス提供者

と定義したのが私の「最初の要件定義」。ここが定まれば

変な健康商法や怪しいダイエットなんぞで大金と時間、健康を失いたくない。その値段を考えたら、多少の出費は投資と考える

で、どんなモデルを選ぶかを考えていきます。

つまり、要件定義と軽々に言ったところで

  • 自分(顧客)にとって本当に必要な商品/サービスは何か
  • そのためのシンプルな/或いはハイテクな解決手段とは

を確認しないと、要件定義の失敗は必至。その後の商品選定も単なる衝動買いに終わります。

商品選定基準

肯定要素(Affirmative)と否定要素(Negative)の2軸を元に考えました。

○ 肯定要素(Affirmative)

  • 睡眠管理のためバッテリーが長持ちすること。
    • 眠る前に充電のために時計を外したり、眠っている間のバッテリー切れは論外です。
  • 視認性。
    • 時計本来の「現在地の把握」のため、液晶がオフのままというのは避けたい事象です。
    • “Watch”の名前を冠するなら、その本来機能「確実な時の刻み」は外せません。
  • タフネス。
    • 風雨に晒される / 水仕事による時計の故障は考えたくありません。

○否定要素(Negative)

  • タッチ操作
    • 多くのスマートウォッチが採用するタッチ操作は不要でした。
    • べたついた手で触る可能性が高いことや時計そのものの文字の細かさは少々辛くなった年齢にさしかかっています。
    • このタッチ操作による誤操作の可能性は極力ゼロに抑えたいです。
  • 大きな筐体
    • キーボードを使う職業であるため、大きな文字盤が手首と干渉する事態は避けたいです。
    • キーボードを使うときに時計を外すのは、大前提の条件である「健康管理」という目的から逸脱します。

この時点でApple Watch / Pixel Watchの2つは対象から外れます。必要なのは機能であってブランドではないのです。

そして選ばれたGarmin Instinct

この選定基準が定まったら、後は実店舗での確認です。これはとても重要です。どんなに上記の条件に充たしたとしても、最終的な、最後の一藁は

  • 「何かデザインが違う」
  • 「気に入らない」

にかかっているからです。幸いにも、この目的を伝えることができれば、(良心的な大型量販店であれば)いい物を提案してくれます。この「わがまま」といえる肯定要素と否定要素全てをクリアしたのがGarmin Instinctでした。

  • 下手したら3週間は持つ驚異的なスタミナ
  • アプリ連携による体調(特に睡眠)管理
  • タフネスさは多くのサイクリストやマラソンランナーなどの愛好者がいることで証明済み。
  • 物理ボタン5つという無骨なデザインで確実な操作
  • 常時表示され、直射日光でも確実に視認できる液晶
  • 筐体の小ささ。40mmの直径でもOK

そして、一番大切だったフィット感。この軽さ / フィット感は、まさに「杖が魔法使いを選んだ瞬間」でした。こうして迎えられたスマートウォッチは無事に購入手続きが終わり、

  • 時間
  • 歩数
  • 睡眠

を確実に記録し、健康改善のきっかけとなりました。

で、結局使い続けられているのか? / 効果はあったのか?

その両者ともに「肯定(Affirmative)」です。

2年半ほど使い続け、この記録を元に、食生活と睡眠習慣を改めます。それにより、特に運動を増やしたわけでもなく1年で5kgほどの自然な体重減と、翌年以降の健康診断でも数値は目に見えて改善されました。

そして、その2年半の記録を続けた2年半後。バッテリーの持ちが悪くなってきたため新たに後継モデル

Garmin Instinct E

という、新たなウェアラブルデバイスを求めたほど。こちらも「更なる軽さ」と「フィット感」により、確実な時の刻みと健康の管理に役立ってくれることでしょう。

まとめに変えて「デジタルの方がいい場合もある」

これは、「デジタルよりアナログに重きを置いている」という筆者の記事に対する突っ込みの反証となります。

睡眠を管理するというのはメモ帳などに頼るのは到底無理です。

  • 何時に寝て
  • 何時に起きたか

はある程度判別できるでしょう。しかし、

  • 完全に熟睡状態に入ったのはいつか
  • 何回ぐらい起きたのか
  • どのぐらい深い眠りがあったのか

を覚えているというのはどだい無理な話です。この「睡眠管理」並びに「寝付けたのか否か」を判断するのはできません。

「常に自分自身を記録する静かな目」

はデジタルのハイテク機器である必要があったのです。

以下、『マクベス』第二幕第2場の以下の言葉。

“Sleep no more! Macbeth does murder sleep”
— the innocent sleep,
Sleep that knits up the ravelled sleave of care,
The death of each day's life, sore labour's bath,
Balm of hurt minds, great nature's second course,
Chief nourisher in life's feast.

「もう眠れない!マクベスは眠りを殺した!」
— 汚れなき眠り、
心の糸のほつれを繕う眠り、
一日の命の死、疲れた労働を癒す湯、
傷ついた心に塗る軟膏、
大自然の第二の恵み、
生命の宴の主なる滋養。

私にとってのGarmin Instinctは、マクベスが殺した『心の糸のほつれを繕う眠り』を取り戻すための、デジタルな『軟膏(Balm of hurt minds)』だったという強引なオチで本稿を締めくくります。

「あなたにとっての“ナイフ”」とは?-1- (『MASTERキートン』“プロフェッサー”に学ぶ道具のセレクト)

「信頼の置ける道具、持っていますか?」という問いかけと私の回答というお話。

はじめに

漫画『MASTERキートン』に以下のやりとりがあります。

「やめておけ」
「…………」
「拳銃の方が、ナイフよりも速いと思っているんだろう。
 だが、拳銃はデリケートな道具だ。
 弾が出ないかもしれないし、
思い通り的に当たるとは限らん。
おまけに拳銃は、
抜き、構え、引き金を引くまでに三動作(スリーアクション)……
 その点ナイフは、一動作(ワンアクション)で終わる。
この距離なら、絶対に俺が勝つ!!
どうする? それでもやってみるかね?」

これは「至近距離でのナイフの有用性」を示したものであり、実際にその通りだという説得力があるものです。

では、この言説は本当なのか? ということで、AIによる試算を行います。

ナイフ vs. 拳銃:速さの決定的な差

この原則は、「21フィート・ルール(タフ・テスト)」と呼ばれる、銃器を携行する際の安全距離を示す経験則で裏付けられます。

拳銃の「三動作」にかかる時間

拳銃で有効な射撃を行うには、

  1. 抜き(ドロー)
  2. 構え
  3. 引き金を引く

最低限の三動作が必要です。

動作所要時間(訓練された者)
ドローから有効射撃まで約 1.5 秒 ~ 2.0 秒

ナイフ攻撃の「一動作」にかかる時間

ナイフを持った人間が相手に致命的な一撃を加える動作は一動作で完了し、さらに相手に向かって距離を詰める速度が加わります。

動作所要時間(突進・刺突)
約 6.4メートル(21フィート)を詰める約 1.5秒

速さの結論(21フィート・ルール)

ナイフを持った人間は、約 6.4メートル(21フィート)の距離から突進してくる場合、銃を抜いて発砲するまでの時間とほぼ同等で相手に到達できます。

  • 漫画のシーンのように、21フィートよりも遥かに近い距離(数フィート)の場合、拳銃の三動作が完了する前に、ナイフの一動作による攻撃は確実に相手に到達し、致命傷を与えることが可能です。
  • プロフェッサーの「この距離なら、絶対に俺が勝つ!!」という言葉は、この時間と距離の絶対的な差に基づいた、極めて正確な戦術的宣言なのです。
  • (もちろん、拳銃に慣れていない/ナイフの熟達、生死のやりとりの覚悟ができていない/できているの差は一番大きいでしょう)

拳銃の「デリケートさ」がもたらすリスク

プロフェッサーが指摘する「拳銃はデリケートな道具だ」という点も、至近距離戦においてナイフの優位性を裏付けます。

  • 機能不全のリスク:
    • 弾が出ないかもしれない(ジャミング、装填不良)。機械的な構造を持つ拳銃は、至近距離でのもみ合いや、些細な不具合で機能不全を起こすリスクがゼロではありません。
  • 命中精度の問題:
    • 思い通り的に当たるとは限らん(照準の困難)。突発的な近接戦闘では、冷静に狙いを定める余裕がなく、また物理的な妨害により、有効な射撃が困難になります。

この「デリケートさ」と「動作の多さ」は、そのまま私の道具を選ぶポイントにも表れています。

「デジタル器具の逆説」

私は当ブログにおいて

  • Redmine
  • Growi
  • Nextcloud
  • BookStack
  • (Firefly等も)

といった、様々なOSSのWeb記録ツール、そしてそれらを扱うPCやスマートデバイスなどを紹介してきましたが、そもそもの問題として私は「デジタルな道具を完全に信じていません」。その証拠にこちらの道具群をご覧ください。

道具群

  • ペンケース
    • ほとんどがLAMY Safari万年筆
  • 手帳類
    • ほぼ日手帳
    • ジブン手帳
    • トラベラーズノート
    • 情報カード
      等。これらは全て普段から持ち歩いているものです。(当然、鞄はギッシリです)ですが、それなりに理由があります。

「アイディアの揮発性」

閃いたアイディア、特に「100文字程度の短いひらめき」は、掴まえようとしなければ水蒸気のようにたちまち消えてしまいます。この一瞬の勝負において、私はデジタルツールを信用していません。

プロフェッサーの言葉を借りるならば、アイディアを捕捉するこの至近距離の戦闘では、デジタルツール(拳銃)の「三動作」は、紙とペン(ナイフ)の「一動作」に敗北します。

アイデア記録における「動作」と「時間」の比較

以下は、100文字程度のアイディアを記録し終えるまでにかかる動作と時間の比較です。

道具道具の比喩記録までの動作所要時間(目安)思考の中断リスク
紙とペンナイフ1 動作約 20 秒極小
デジタルツール拳銃3 動作約 38 秒以上

紙とペン(ナイフ):確実な「一動作」

紙とペンは、「書く」という一動作で記録が完了します。この約 20 秒間、思考の流れを一切止めることなく、揮発性の高いアイディアを紙の上に瞬時に定着させることが可能です。これは、プロフェッサーが示した最短距離、最小動作で確実に仕留めるという原則そのものです。

デジタルツール(拳銃):遅延を生む「三動作」

スマートフォンやPCのアプリで記録する場合、必ず以下の「三動作」が介入します。

  1. 起動(抜き):スリープ解除、パスコード解除、アプリ起動。
  2. 新規作成(構え):新規メモ画面への遷移、ツール内のファイル選択。
  3. 入力(発射):タイピング。

この「抜き、構え」のプロセスで生じる約 20 秒弱のタイムラグこそが、拳銃がデリケートな道具である最大の理由です。アイディアは、ツールを起動し構えている間に、すでに空中に消え去っている可能性があるのです。

 → このアイディアの揮発性というのは非常に致命的なものであるというのは皆様も経験があると思います。

それ以上に大切な「デジタルメモのデリケートさ」

スマートデバイスの動作不良の確率は、メモやペンよりも高いことに異論は無いと思います。

それ以上に

  • NW不調によりログイン不可(Webサービスを用いている場合)
  • 同期の不安定
  • 何よりもサービス終了の恐怖

はつきまといます。

反面、紙とペンなら

  • ほぼ確実に書くことができます。
  • 忘れたとしても(都会であればなおさら)すぐに手に入ります。
  • 「自分さえ分かれば」どんな言語、記号、絵だろうと分かるという自由度があります。
  • 何よりも「ペンと紙が生産終了になる」というケースはかなりの世紀末の状況になると思われます。

まとめ

「ちょっとしたアイディアのメモ」という

  • 即時性
  • 確実性
  • 安定性

が求められる状況下においては、紙と筆記具がこそが、思考を守る最も信頼できる道具です。

なぜなら、思考の戦いにおいては以下のブチャラティの言葉に集約されます。

“ぶっ殺してやる”ってセリフは終わってから言うもんだぜ
俺たちギャングの世界ではな
――『ジョジョの奇妙な冒険 黄金の風 偉大なる死(ザ・グレイトフル・デッド)』

「思いついたときには書き終えている」。この「一動作(ワンアクション)の速さ」こそが、紙とペンの持つ最大の魅力であり、
アイディアを確実に仕留める「ナイフ」なのです。

  • それぞれの道具を選ぶ理由
  • もちろん、デジタルが優れている場面

等はまた後の話に(気が向いたときに)記します。

Page 1 of 97

Powered by WordPress & Theme by Anders Norén