テレビ録画メディアサーバー構築入門(第2回)
手順
インストールイメージ(ISO形式)をダウンロード
USBメモリにコピー
USBからPCを起動
説明
Ubuntu 22.04.4-desktop-amd64.isoをダウンロードする.Desktop版は5GBあるため時間がかかる.https://old-releases.ubuntu.com/releases/jammy/ubuntu-22.04.4-desktop-amd64.iso
インストール用にUSBメモリにコピーする.たとえば,Rufusを使う.
(本入門講座でWindowsを使うのは、ここだけです。ここでは初心者を想定してWindowsを使いますが、インストール後は、--- もちろんWindows PCにて録画番組を視聴することも可能ですが、--- Windowsに限定されない視聴環境を構築していきます。)
Rufusを起動。ダウンロードしたISOイメージを選択。デバイスがインストール用USBメモリを確認。スタート。ISOイメージモードで書き込む。
Rufusで書き込む際に「無効なUEFIブートローダーが検出されました」と警告がでたが,そのまま続行.「ダウンロードが必要です」に「はい」ここから新PCへのインストール作業になります。キーボードやディスプレーが接続されているとします。
まず、PCの電源投入直後に特定のキー(通常はF2、DEL、Esc、F1、F10、F11、F12などのどれか)を連打して、BIOS(UEFI)を起動します.どのキーかは機種に依存します(PCメーカ名・機種名で検索する)。設定が表示されたら,Boot タブより,Boot sequence (起動順)で USBを最優先にし,Save and Exit.
黒背景の選択肢から、Try and Install Ubuntu
するとUSBからUbuntuのインストーラが起動する.使用言語を選択(日本語は一番下)した後でインストールを続行するか,試しに使うだけにするかを選択できる.
wifi設定を聞かれる。英語が苦手なら設定する。が、アップデートをうながされても放置する(okしない)。
通常のインストール。録画サーバーなので、動画ファイルがディスク圧迫の主因となる。ここでケチる意味はない。
既にwindowsがインストールされている場合、「Ubuntu をWindows Boot Managerとは別にインストール」可能。だが、サーバーとして常時稼働するので「ディスクを削除してUbuntuをインストール」。事務処理ふくめて、Ubuntu desktopで、たいていのことはできる。結局 windowsは不要になる。
ユーザーに決断を迫る、このプロセス --- 有料のwindowsを自分の意志で消去する --- が、linux普及を妨げる最大のポイントかもしれません。不安ならば、上で「試しに使う」オプションを選択して、windowsを残したまま試してみればよいでしょう。
サーバーに求められる最重要項目はOSの安定性で、常時稼働(電源をきらない)が前提です。Windowsのように勝手にアップデートして再起動とかされるのは困ります。Ubuntuは完全無料にもかかわらず、最近ではデスクトップ環境も windowsに遜色なく完備されています。
指示にしたがい,説明をよく読みながら,注意深く,作業をすすめる.作業が落ち着くまでは勝手にアップデートさせたくないので,ネットワーク接続設定はせずにインストールする。ネット接続をすると、アップデートするか問われるが、しない。
途中でユーザ名、パスワードとマシン名を聞かれる。重要な情報なので覚えておく。
初期インストールが完了すると再起動を促される。
Please remove the installation medium, then press ENTER
との指示通り、USBを抜いてENTERを押す。
初回起動時にはubuntu proへの加入など聞かれる。skip for now.
はじめてのlinux
(はじめてではない場合は「バージョン固定」まで読み飛ばしてください)
「録画動画の編集を自動化」というとき、これは、人手をかけない、つまり、マウスを使用しないことを意味します。サーバーPCは、マウスどころか、ディスプレーやキーボードすら接続せずに、何百キロ遠方に置いて管理することも可能です。
Ubuntu Linuxでもマウス操作が可能ですが、サーバー用途では、端末 (terminal) を使用した操作が必須となります。 サーバーは、マウス操作が前提とするGUI(Graphic User Interface)より、むしろ、CUI (Character User Interface) または CLI (Character Line Interface) を介して操作を行います。
CUI/CLIはマウスを使用せず、キーボードでコマンドを入力して操作を行います。 サーバー管理や開発など、コマンドラインでの操作に慣れることが重要です。
まずは、画面左下のアイコン:アプリ一覧から「端末(Terminal)」を起動します。マウスを用いてもよいですし、Ctrl+Alt+t の同時押しでもOKです。
Windows で「フォルダ」と呼ばれるものは、Linux では 「ディレクトリ」 と呼ばれます。
ディレクトリは、ファイルや他のディレクトリを格納するための場所です。
例えば、Windows で `C:\Users\username\Documents` というフォルダは、Linux では `/home/username/Documents` というディレクトリになります。
takya@fearow22:~$ pwd
/home/takya
takya@fearow22:~$ ls
snap thinclient_drives
takya@fearow22:~$ echo hello
hello
takya@fearow22:~$ echo hello > hello.txttakya@fearow22: は、インストール時に設定した、ユーザー名@マシン名。
pwd いまいるディレクトリを表示
ls ファイルやディレクトリのリスト
echo 文字表示
最後の行の 不等号記号 > はリダイレクトといい、コマンド(echo)の出力(hello) をファイル(hello.txt)に書き込むことを意味します。
cat ファイル内容を出力
mv 移動
cp コピー
rm 削除
takya@fearow22:~$ ls
hello.txt snap thinclient_drives
takya@fearow22:~$ cat hello.txt
hello
takya@fearow22:~$ mv hello.txt howareyou.txt
takya@fearow22:~$ ls
howareyou.txt snap thinclient_drives
takya@fearow22:~$ cat howareyou.txt
hello
takya@fearow22:~$ cp howareyou.txt hello
takya@fearow22:~$ ls
hello howareyou.txt snap thinclient_drives
takya@fearow22:~$ cat hello
hello
takya@fearow22:~$ rm hello
takya@fearow22:~$ ls
howareyou.txt snap thinclient_drivesmkdir ディレクトリ作成
cd 指定ディレクトリへ移動
takya@fearow22:~$ mkdir test
takya@fearow22:~$ ls
howareyou.txt snap test thinclient_drives
takya@fearow22:~$ cat test
cat: test: ディレクトリですディレクトリは cat できない
takya@fearow22:~$ cd test
takya@fearow22:~/test$ pwd
/home/takya/test
takya@fearow22:~/test$ ls
takya@fearow22:~/test$ echo test >test.txt
takya@fearow22:~/test$ cat test.txt
test
takya@fearow22:~/test$ cat test.txt test.txt
test
test
takya@fearow22:~/test$ cat test.txt test.txt >test2.txt
takya@fearow22:~/test$ cat test2.txt
test
test
takya@fearow22:~/test$ ls ..
howareyou.txt snap test thinclient_drives
takya@fearow22:~/test$ cd ..
takya@fearow22:~$ pwd
/home/takya
takya@fearow22:~$ ls .
howareyou.txt snap test thinclient_drivesLinuxのファイルシステムは、ルート (root) ディレクトリ `/` を起点とした木のような階層構造になっています。
`..` (2つのピリオド) は、現在のディレクトリから一つ上の階層のディレクトリ を指します。つまり、親フォルダ を表します。
`.` (1つのピリオド) は、現在のディレクトリ 自身を指します。例えば、`/home/user/documents` というディレクトリにいる場合、
`..` は `/home/user` を指します。
`.` は `/home/user/documents` 自身を指します。
takya@fearow22:~$ ls test/..
howareyou.txt snap test thinclient_drives
takya@fearow22:~$ ls test/../test
test.txt test2.txt
takya@fearow22:~$ ls ./test
test.txt test2.txt`cat` コマンドは、ファイルの内容全体を標準出力に出力します。そのため、ファイルが非常に大きい場合、出力結果が画面に収まらず、見づらい場合があります。
このような場合、`less` コマンドを使用すると、ファイルの内容をページ単位で表示することができ、見やすくなります。`less` コマンドは、ファイルの内容をスクロールして表示したり、検索したりすることもできます。
つまり、`cat` コマンドはファイルの内容全体を表示するのに適していますが、`less` コマンドは、ファイルの内容をページ単位で表示したり、検索したりするのに適しています。
less ファイル内容を表示
man マニュアル表示
helloを100回書き込んだ hello.txtを作成
takya@fearow22:~$ for i in {1..100}; do echo "hello"; done > hello.txt
takya@fearow22:~$ less hello.txtlessコマンドから抜けるには、q でquit 。使い方(マニュアル)は、man
takya@fearow22:~$ man less最下段に (press h for help or q to quit) と表示されるとおり。
Linuxの様々なコマンドで、移動操作 (上下移動、ページ送りなど) に共通して使用されるキーがあります。
`j`: 下へ移動
`k`: 上へ移動
これらのキーに慣れておくと、様々なコマンドでスムーズに操作できるようになります。
Linuxでは、パイプ (|) を使用して、あるコマンドの出力を別のコマンドの入力として引き渡すことができます。
パイプは、複数のコマンドを組み合わせる際に非常に便利です。
takya@fearow22:~$ cat hello.txt |head -5
hello
hello
hello
hello
hello冒頭の5行だけ出力。
テキストエディタ
テキストエディタは、コマンドラインインターフェース (CLI) で作業する上で欠かせないツールです。
近年では、`nano` エディタが広く使用されています。`nano` は、初心者でも使いやすいシンプルなインターフェースを持つテキストエディタとして知られています。
他に、`vim` や `emacs` といった強力なテキストエディタも存在しますが、`nano` は比較的学習コストが低く、CLI初心者にもおすすめです。 ファイルhello.txtを編集するには、
takya@fearow22:~$ nano hello.txt`^X 終了` とあるとおり、Ctrl+X で終了する。
引数(hello.txt)なしで起動すると、
takya@fearow22:~$ nano「Ctrl+G で簡単なヘルプがでます。」
エディタは今後よく使用しますので、キーボードでのカーソル移動や終了(保存)の仕方などは、慣れておくほうがよいでしょう。(Windowsのnotepadのように、GUIからマウスで起動するエディターを使ってもよいのですが)
バージョン固定
ここからの作業は、このメモを直に閲覧しながら、コピペができると楽なので、ネットワーク接続設定を済ませましょう。右上アイコンクリックからWifi設定等ネットワーク接続設定をします。
追記:もしLANケーブルでの有線接続が可能ならば、その方がよいです。wifiとカードリーダは機能的に干渉する可能性があるためです。
注意:ネットに接続すると、大量のアップデートをうながされます。が、しばらくの間は無視します(まだアプデしない)。
まずはバージョン固定します。
takya@fearow22:~$ uname -r
6.5.0-18-generickernel 6.5からアップデートしないようにスーパーユーザー権限で実行(sudo)
sudo apt-mark hold linux-image-6.5.* linux-headers-6.5.*
apt-mark showholdWindows Pro の管理者アカウント (Administrator) に相当する Linux のアカウントは、スーパーユーザー (superuser) です。
スーパーユーザーは、システム全体に対する完全なアクセス権を持ち、すべてのファイルや設定を変更することができます。通常、スーパーユーザーアカウントは `root` と呼ばれ、特別な権限を持つアカウントです。Linuxでは、スーパーユーザー権限でコマンドを実行するには、コマンドの前に `sudo` を付ける必要があります。例えば、`sudo apt update` は、スーパーユーザー権限で `apt update` コマンドを実行することを意味します。aptはパッケージ自動インストールコマンドですが、自己責任ですので、進めてよいかどうか途中で聞かれます。
sudo nano で書き換え (1を0に):
/etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
/etc/apt/apt.conf.d/50unattended-upgrades
ブラックリストに追加
Unattended-Upgrade::Package-Blacklist {
// The following matches all packages starting with linux-
// "linux-";
"linux-headers*";
"linux-image*";
"linux-generic*";
"linux-modules*";
変更を反映させる
sudo systemctl restart unattended-upgrades.serviceさらに
sudo nano /etc/apt/preferences.d/pin-kernelPackage: linux-image-*-6.5*
Pin: version 6.5.*
Pin-Priority: 10011001 は強制的に現在のバージョン6.5を維持。
「ソフトウェアの更新」は「セキュリティアップデートのみ」
再起動してくるか確認する。
sudo reboot追記:自動アプデはしない(後回しにする)
録画視聴システムの基礎が仕上がるまでアプデは控える(ポップアップ通知は無視)。セキュリティアプデは、ひととおり仕上がってからにする(apt installが一段落する第5回のあと。インテル機なら第16回のドライバインストールを先に済ませておくとよいかも)。さみだれ式にアップデートすると、依存関係上の問題が生じ、解説と齟齬が生じる可能性があるため。
再起動を求められたら?
上のようにしていても、「Ubuntu ベース」の更新でカーネル6.8がインストールされてしまうことがある。そんなときは6.5で起動して6.8を削除する。新カーネルがインストールされていると、再起動を求められ、再起動すると新カーネル6.8で起動します。再起動を求められたら、6.8がインストールされていかを確認します。
takya@fearow22:~$ apt list --installed | grep -E "linux-image-6."
linux-image-6.8.0-64-generic/jammy-security,now 6.8.0-64.67~22.04.1 amd64 [インストール済み、自動]このように6.8がインストールされているようならば削除する。
sudo apt purge linux-image-6.8.0-64-generic linux-modules-6.8.0-64-generic linux-modules-extra-6.8.0-64-generic
sudo apt autoremove
sudo grub-set-default "Ubuntu, with Linux 6.5.0-18-generic"
sudo update-grub
もし、6.8で起動してしまうようならば、再起動時に「Shift」キーを連打してGRUBメニューを表示して、「Advanced options for Ubuntu」を選択し、6.5.0-18-generic を選択して起動する。6.5で起動したら、上のように6.8を削除する。(あるいは、6.8だとどういう問題が生じるのかを確認してみてもよい。省電力関連の新機能が未対応なため録画に影響を与える大量のログを吐きます。)
自力インストールではよくあることですが、ソフトウェア間の依存関係に悩まされることがあります。依存関係とは、あるソフトウェア(A)が正常に動作するために、他の特定のソフトウェア(B, C, ...)が事前にインストールされている必要がある関係のことです。インストールする順序が違うだけでエラーがでたりします。(だから、本稿のような「うまくいった」経験メモには意味がある!)
インストール途中でいろいろ試行錯誤していると、それが原因で、独自の泥沼に陥る可能性があります。
tailscale
Tailscaleは、あなたのデバイス同士を安全なプライベートネットワークで繋ぐVPNサービスです。
まずは準備として、コマンドラインからWebサーバーと通信するためのツール `curl` をインストールします。以下のコマンドを実行します。
sudo apt-get update
sudo apt-get install curl`sudo apt-get update`: パッケージリストを更新します。
`sudo apt-get install curl`: `curl` パッケージをインストールします。
インストールが完了したら、`curl` コマンドが使用できるようになります。
続いて、tailscaleをインストールします。
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update
sudo apt-get install tailscale
sudo tailscale up指示に従い,表示されたURL にアクセスする(Ctrlを押しながらURLをクリック).サインインして認証する.
Access controls パネルから,"ssh"の"action"を"accept"に変更し,Save.
ssh
sshをインストール
sudo apt install openssh-server
sudo systemctl enable sshSSH (Secure Shell) は、ネットワーク経由でセキュアにコンピュータに接続するためのプロトコルです。Tailscale をインストールした別のPCから、安全に接続し、操作できるようになります。
Windows 機の Powershell から、Linux 端末と同様にコマンドを実行できます。Powershell は、Windows アイコンを右クリックして表示されるメニューから起動できます。 Powershell は、Windows のコマンドラインインターフェースであり、Linux の bash シェルと似た機能を提供します。
ssh接続するには:
ssh ユーザ名@マシン名Tailscale ネットワークでは、マシン名だけでなく、IPアドレス (例: 100.x.y.z) を使用することもできます。これらの情報は、Tailscale の管理コンソール (Admin console)から確認できます。
docker
Dockerは、アプリケーションを「コンテナ」と呼ばれる独立した実行環境にパッケージ化し、異なる環境間で一貫して動作させるためのプラットフォームです。
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin試しに
sudo docker run hello-world
sudo docker -v
sudo docker ps -a
sudo systemctl status docker緑字の起動activeが確認できたら、q で抜ける quit。
なぜ Ubuntuバージョン22.04?
Linuxのデバイス対応は、Windowsに比べて課題となる場合があります。 特に、チューナーなどの特殊な装置を接続する場合、デバイスとLinuxのバージョンとの相性が問題となることがあります。
録画サーバー構築では、PX-S1UDというチューナーが、kernel 6.8と相性が悪いことが報告されています。
kernel 6.8以前のバージョンを使用するには、Ubuntu 23.10を使用する必要がありますが、既にサポートが終了しており、環境構築には適していない。
Ubuntu 22.04は、kernel 6.8以前のバージョンを使用できる最後の長期サポート版 (LTS)。
要するに:
x64 (amd64) のmini PCを使用したい。
mini PCにUSBチューナーPX-S1UDを使用したい。
PX-S1UDを使用するにはUbuntu 22.04を使用する必要がある。
なお、kernelのバージョンを6.5から上げない限り、諸々のセキュリティアップデートはして問題ありません。サポート終了後はセキュリティアップデートがなくなりますが、もともとテレビ録画サーバは、不特定多数からのアクセスを絶対に許さない形で「完全プライベートに」運用するべきものなので、一般的な公開サーバーに比べて、セキュリティリスクは低くなります。
未来の新バージョンで不具合対策がなされているなら、バージョンアップする選択肢が生じるのですが、アップデートには手間がかかりますし、現状復帰できないリスクも少なからずありえます。
kernelバージョンが新しいから、セキュリティ的に強固というわけではありません。最新アップデートをすべきかどうかは、メリット(新機能)とデメリット(新たな不具合)とのトレードオフで決まります。
Windowsとは異なり、Linuxサーバー環境では、必ずしも最新版へのアップデートが常に推奨されるわけではありません。不具合が生じるリスクを考慮して、最新でないバージョンを使い続けることは、別にめずらしいことではありません。
録画環境はPX-S1UD+Ubuntu 22.04で構築しておいて、将来的にも、そのまま運用しつづけることを推奨します。



コメント