Ubuntu 22.04.1 LTS (Jammy Jellyfish)のインストールと初期設定・環境構築について。

目的と内容
最小インストールを用いてクリーンインストールする
デスクトップPCを開発機・内向けサーバ機として構成する
インストール時に実施した手順、各種設定の内容を記録し、次回インストール時のベース・変更点の検証材料とする
本文の構成
§.インストール
ライブUSBを使ったインストール前の構成確認・ネットワーク設定・パーティショニングなどの下準備
実際のインストール作業
初回ログイン時の設定
などを行う。
インストール時に必要となる作業を洗い出す際の参考のために、各ステップごとのスクリーンショットも掲載してある。
§.設定ファイルの編集
Gnome Terminalの設定
Geditの設定
デフォルトエディタの設定・vimの設定
Bashの設定
systemd-networkdを使った固定IPでのネットワーク設定ブリッジ接続の設定
などを行う
§.ソフトウェアの追加と削除
不要なaptパッケージの削除使用するaptパッケージの追加
Linux向けMicrosoft製品をインストールするための設定とパッケージのインストール
不要なsnapパッケージの削除・必要なsnapパッケージのインストール
などを行う
§.デスクトップ環境の設定とカスタマイズ
デスクトップアプリの初期設定などを行う
§.開発環境の設定
開発環境や各種サーバーの初期設定を行う

インストール

以下はISOイメージubuntu-22.04.1-desktop-amd64.isoを使用した場合の手順。

USBメディアの場合、「ディスク」(gnome-disk-utility)を使用することにより、次の手順でISOイメージからブータブルUSBメディアを作成することができる。

まずDashから「ディスク」を起動する。 起動したら対象のUSBメディアを選択し、「︙」メニューにある「ディスクイメージをリストア」を行う。 表示されるダイアログにてISOイメージファイルを選択した上で「リストアを開始」することにより、ブータブルUSBメディアを作成できる。

下準備

光学メディアあるいはUSBメディアにインストールしたディスクイメージを使ってブートする。

ここでは試用しつつデバイス類や必要な機能が動作するかどうかの確認、パーティション設定などインストール前の下準備を行う。

【Welcome】

  1. 左の言語一覧から[日本語]を選択
  2. [Ubuntuを試す]をクリック

デスクトップが表示されたら、必要に応じて右上のネットワークアイコンをクリックしてネットワーク設定などを行う。 設定ファイルを編集して設定する必要がある場合は§.ネットワークの設定を参照。

Ubuntu 22.04.1 live desktop

RAIDアレイの検証

初期状態ではmdadmはインストールされておらず、RAIDアレイは編成されていない状態となっている。 インストール時にRAIDアレイを使用する場合は再編成しておく。

$sudo apt install mdadm
以下のパッケージが新たにインストールされます:
  mdadm

$sudo mdadm --assemble --scan
mdadm: /dev/md127 has been started with 2 drives.

$cat /proc/mdstat
Personalities : [raid1] 
md127 : active raid1 sdc1[0] sdb1[1]
      1953382464 blocks super 1.2 [2/2] [UU]
      bitmap: 1/15 pages [4KB], 65536KB chunk

unused devices: <none>

最小インストールではmdadmがインストールされない模様。 そのため、mdadmで管理されたRAIDアレイ上のパーティションにマウントポイントを置いた構成でインストールすると、初回起動時にマウントできず起動に失敗する。 §.インストール後の修正を参照。

LVM LVの検証

初期状態ではLVMがインストールされている。 lvdisplayコマンドでLVM論理ボリュームの状態を確認できる。

$sudo lvdisplay -C
  LV                VG               Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_foo            vg_foo           -wi-a----- 500.00g                                                    
  lv_bar            vg_bar           -wi-a----- 500.00g                                                    
    :
    :

その他ディスク・パーティションの検証

lsblkコマンドでディスク・パーティションを確認できる。 また、Dashより「ディスク」を起動することでも確認できる。

$lsblk 
NAME                                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0                                         7:0    0   2.1G  1 loop  /rofs
loop1                                         7:1    0    62M  1 loop  /snap/core20/1587
loop2                                         7:2    0     4K  1 loop  /snap/bare/5
loop3                                         7:3    0 163.3M  1 loop  /snap/firefox/1635
loop4                                         7:4    0 400.8M  1 loop  /snap/gnome-3-38-2004/112
loop5                                         7:5    0  91.7M  1 loop  /snap/gtk-common-themes/1535
loop6                                         7:6    0    47M  1 loop  /snap/snapd/16292
loop7                                         7:7    0  45.9M  1 loop  /snap/snap-store/582
loop8                                         7:8    0   284K  1 loop  /snap/snapd-desktop-integration/14
sda                                           8:0    0 931.5G  0 disk  
├─sda1                                        8:1    0  18.6G  0 part  [SWAP]
├─....
 :
sdd                                           8:48   1   7.5G  0 disk  
├─sdd1                                        8:49   1   3.6G  0 part  /cdrom
├─sdd2                                        8:50   1   4.1M  0 part  
├─sdd3                                        8:51   1   300K  0 part  
├─sdd4                                        8:52   1   500M  0 part  /media/ubuntu/MEMO
└─sdd5                                        8:53   1   3.4G  0 part  /var/crash
                                                                       /var/log

パーティショニング

GParted(gparted)を起動、あるいはKDEパーティションマネージャ(partitionmanager)をインストールして起動する。 インストールに際して必要があればパーティショニングを行う。

UEFIモードでインストールする場合、かつ手動でパーティショニングを行う場合は、EFIブートパティションを作成しておく。

その他事前の確認・準備

  1. インストールに入る前の確認
    1. キーボード等その他構成
    2. ネットワークの設定
    3. バックアップ・作業手順等
  2. インストールに入る前の設定
    1. [Settings]→[Power]→[Power Saving]で[Blank screen]がNeverになっていることを確認 (インストール中に画面をオフあるいはロックさせない)

実際のインストールを開始

デスクトップの[Ubuntu 20.04.1 LTSのインストール]のアイコンからインストールを開始する。

Ubuntu 20.04.1 LTSのインストール

システムモニタを起動しておくとシステム状態とインストーラの状態(ダウンロード中か、IO処理中か)を把握しやすい。

インストール中、解像度の関係でダイアログが画面をはみ出して読めない・フォーカスできない・ボタンが押せない場合は、ALT+F7を押すことによりウィンドウ端を画面外まで移動させることができるようになる。

【ようこそ】

  1. 左の言語一覧で[日本語]が選択されていることを確認する
  2. [続ける]
【ようこそ】

【キーボードレイアウト】

  1. 適切なキーボードが選択されていることを確認する
  2. [続ける]
【キーボードレイアウト】

【アップデートと他のソフトウェア】

  1. [最小インストール]を選択する
  2. [その他のオプション]
    1. [Ubuntuのインストール中にアップデートをダウンロードする]にチェックを入れる
    2. 必要に応じて[サードパーティー製ソフトウェアをインストールする]にチェックを入れる
  3. [続ける]
【アップデートと他のソフトウェア】

【インストールの種類】

  1. [それ以外]を選択 (パーティション設定を行う場合)
  2. [続ける]
【インストールの種類】

【パーティション設定】

  1. 使用するデバイス・マウントポイント等を設定する
    1. swapパーティションが複数見つかった場合、すべて[使用する]の設定になってしまうので、必要ないものは[使用しない]に変更する(swapではなくlinux-swapに戻す)
  2. [インストール]をクリック
パーティションの設定
  1. ディクスへの変更内容を確認して[続ける]
パーティション設定の確認

【どこに住んでいますか?】

  1. 適切なタイムゾーンを選択
  2. [続ける]
【どこに住んでいますか?】

【あなたの情報を入力してください】

  1. ユーザー名、コンピューター名、パスワード等を入力
  2. [続ける]
【あなたの情報を入力してください】

以降、インストールが終了するまで待つ。

【インストール】

【インストールが完了しました】

  1. [今すぐ再起動する]
【インストールが完了しました】

再起動の準備ができたらインストールメディアを取り外すよう促すメッセージが表示されるので、取り外したら[ENTER]を押して再起動させる。

インストール後の修正

インストールが終わったあとにインストールした環境を修正する方法。 まずは、レスキューモードで起動するか、できなければLIVEインストールを起動する。

次に、/mntディレクトリ等にchroot環境を作り、その環境に入る。 この例の/dev/system-rootにはルートパーティションがインストールされているデバイスを指定する。 他にマウントすべきパーティションがあれば同時にマウントしておく。

chroot環境を作る
sudo mount /dev/system-root /mnt
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt

以降この環境でインストール後の環境を修正する。 以下はmdadmをインストールして初回起動前にRAIDアレイを再編成する場合。

RAIDアレイの再編成
apt install mdadm
mdadm --assemble --scan

grub-efiの再インストール

GRUB EFIを再インストールする方法。 ライブインストールを起動する再に、BIOSではなくUEFIで起動しておくこと。

起動してchroot環境を作る際に、UEFIパーティションもマウントしておく。 合わせてefivarsもロードしておく。

chroot環境を作る
sudo mount /dev/system-root /mnt
sudo mount /dev/system-boot-efi /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
modprobe efivars
sudo chroot /mnt

EFIのパーティション(ここではディスク/dev/sda、パーティション/dev/sda1)がEFIになっていることを確認。

#fdisk -l /dev/sda

デバイス    開始位置  最後から    セクタ サイズ タイプ
/dev/sda1       2048    514047    512000   250M EFI システム

EFIになってない場合は、FAT32で初期化されていて、フラグbootefiがセットされていることを確認する。


次にgrub-efiを再インストールし、GRUBをターゲットのディスクにインストールしてupdate-grubする。

grub-efiの再インストール
apt-get install --reinstall grub-efi
grub-install --recheck /dev/sda
update-grub

レスキューモードでネットワークを有効にする

NetworkManagerで管理されているデバイスをnmcliコマンドで設定する場合のメモ。

nmcli device show enp1s0 +
sudo nmcli device modify enp1s0 ipv4.address 192.168.0.10
sudo nmcli device modify enp1s0 +ipv4.dns 192.168.0.1
sudo nmcli device modify enp1s0 +ipv4.gateway 192.168.0.1

初回ログイン時の設定

初回ログイン時はダイアログが表示されるので、ウィザードに従って必要事項を設定・入力する。

【オンラインアカウント】

  1. 必要に応じてアカウントを設定するか[スキップ]する
    【オンラインアカウント】

【Livepatch】

  1. 必要に応じて[Livepatchをセットアップ]をクリックする
    1. セットアップする場合、Ubuntu Oneアカウントが要求されるので、アカウントを登録するか既存のアカウントで接続する
      【Livepatch】
      Ubuntu Oneアカウントへのサインイン

【Ubuntuの改善を支援する】

  1. 必要に合わせてシステム情報を送信するか否かを選択
    【Ubuntuの改善を支援する】

【プライバシー】

  1. 必要に合わせて位置情報サービスを使用するか否かを選択
    【プライバシー】

【準備完了】

【準備完了】

初期状態のデスクトップとDash

初期状態のデスクトップ
初期状態のDash

設定ファイルの編集

ターミナル・シェル・ネットワーク・その他システムの設定ファイルなどを初期設定する。

ターミナル・シェル・エディタ周りの設定

Gnome Terminalの設定

以下の内容で設定ファイルを用意しておく。 あるいはエクスポートしたものを用意しておく。

org-gnome-terminal.dconf
[legacy]
default-show-menubar=false
schema-version=uint32 3

[legacy/keybindings]
paste='<Primary><Shift>v'

[legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9]
background-color='rgb(25,26,59)'
background-transparency-percent=15
cursor-blink-mode='on'
cursor-shape='block'
default-size-columns=110
default-size-rows=20
foreground-color='rgb(211,215,207)'
palette=['rgb(46,52,54)', 'rgb(204,0,0)', 'rgb(78,154,6)', 'rgb(196,160,0)', 'rgb(52,101,164)', 'rgb(117,80,123)', 'rgb(6,152,154)', 'rgb(211,215,207)', 'rgb(85,87,83)', 'rgb(239,41,41)', 'rgb(138,226,52)', 'rgb(252,233,79)', 'rgb(114,159,207)', 'rgb(173,127,168)', 'rgb(52,226,226)', 'rgb(238,238,236)']
text-blink-mode='always'
use-system-font=true
use-theme-colors=false
use-theme-transparency=false
use-transparent-background=true
visible-name='default'

上記の設定ファイルをインポートする。

Gnome Terminal設定をファイルからインポートする
dconf load /org/gnome/terminal/ < org-gnome-terminal.dconf

設定をエクスポートする場合は以下のようにする。

Gnome Terminal設定をファイルにエクスポートする
dconf dump /org/gnome/terminal/ > org-gnome-terminal.dconf

Geditの設定

以下の内容で設定ファイルを用意しておく。 あるいはエクスポートしたものを用意しておく。

org-gnome-gedit.dconf
[plugins]
active-plugins=['drawspaces', 'git']

[plugins/drawspaces]
draw-spaces=['space', 'tab', 'nbsp', 'leading', 'text', 'trailing']

[preferences/editor]
auto-indent=true
background-pattern='none'
bracket-matching=true
display-line-numbers=true
display-overview-map=true
display-right-margin=false
editor-font='Noto Sans Mono CJK JP 10'
highlight-current-line=true
insert-spaces=true
scheme='oblivion'
tabs-size=uint32 2
use-default-font=false
wrap-last-split-mode='word'

[preferences/ui]
show-tabs-mode='auto'

上記の設定ファイルをインポートする。

Gedit設定をファイルからインポートする
dconf load /org/gnome/gedit/ < org-gnome-gedit.dconf

プラグインのインストール等はこのあと§.使用するaptパッケージをインストールするで行う。

設定をエクスポートする場合は以下のようにする。

Gedit設定をファイルにエクスポートする
dconf dump /org/gnome/gedit/ > org-gnome-gedit.dconf

デフォルトエディタ・vimの設定

デフォルトのエディタをvimにする。

update-alternativesを使ってデフォルトエディタを変更する
$sudo update-alternatives --config editor
alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。

  選択肢    パス             優先度  状態
------------------------------------------------------------
* 0            /bin/nano           40        自動モード
  1            /bin/ed            -100       手動モード
  2            /bin/nano           40        手動モード
  3            /usr/bin/vim.tiny   15        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 3
update-alternatives: /usr/bin/editor (editor) を提供するためにマニュアルモードで /usr/bin/vim.tiny を使います

~/.vimrc

以下の内容で作成。

~/.vimrc
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,utf-16,japan

set backspace=indent,eol,start

set tabstop=2
set shiftwidth=2
set expandtab

highlight tabs ctermbg=green guibg=green

set list
set number
set showmatch
set ruler
set smartindent

Bashの設定(.bashrc, .bash_*)

~/.bash_aliases

~/.bash_aliasesを作成して以下のエイリアスを書き込む。

~/.bash_aliases
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls -F --color=auto'

if [[ -x `which git` ]]; then
  alias diff='git --no-pager diff --no-index --color'
else
  alias diff='diff -u'
fi

プロンプトのカスタマイズ

~/.bashrcを編集して、force_color_promptyesにする。 また、このあとに作成するプロンプト設定用のスクリプトを読み込むように設定する。

~/.bashrc
# コメントアウトされているので解除する
force_color_prompt=yes

  :
  :

# .bash_envnameがある場合はそれを読み込んでプロンプトの内容を設定させる
if [ -f ~/.bash_envname ]; then 
    . ~/.bash_envname
fi

# .bash_promptがある場合はそれを読み込んでプロンプトの内容を設定させる
if [ -f ~/.bash_prompt ]; then
    . ~/.bash_prompt
fi

# 下記コマンドの前あたりに上記を記述する
unset color_prompt force_color_prompt

  :
  :

プロンプトの内容を設定するスクリプトファイル~/.bash_promptを作成する。 関連:§.Gitクライアント。 (以下は参考程度に。 好みに合わせて変数$PS1を設定する。)

~/.bash_prompt
function __prompt_reset_color() {
  echo -n '\[\e[m\]'
}

function __prompt_status_time() {
  _ret=$?

  if [ -z "$__VSCODE_INTEGRATED_TERMINAL__" ]; then
    if [ $_ret = 0 ]; then
      echo -n '\[\e[1;32m\]🟢'
    else
      echo -n '\[\e[1;31m\]🔴'
    fi

    echo -n ' \t'

    __prompt_reset_color
  else
    echo -n '\t'
  fi
}

function __prompt_user_host_env() {
  echo -n '\[\e[1;33m\]\u'
  __prompt_reset_color

  echo -n '@'

  echo -n '\[\e[1;36m\]\h'
  __prompt_reset_color

  if [ "$(type -t __prompt_set_env_name)" = 'function' ]; then 
    __prompt_set_env_name
  fi

  if [ -n "$_PROMPT_ENV_NAME" ]; then
    echo -n '%'

    echo -n '\[\e[1;35m\]'
    echo -n "$_PROMPT_ENV_NAME"
    __prompt_reset_color
  fi
}

function __prompt_working_directory() {
  echo -n '\[\e[0;37m\]\w'
  __prompt_reset_color
}

function __prompt_euid() {
  if [ ${EUID:-${UID}} = 0 ]; then
    echo -n '\[\e[1;31m\]'
  fi
  echo -n '\$'
  __prompt_reset_color
}

function __set_ps1() {
  PS1="$1$2"
}

function __set_prompt_command() {
  PS1_PRE='[$(__prompt_status_time) <$(__prompt_user_host_env)>'
  PS1_POST=' $(__prompt_working_directory)]$(__prompt_euid) '

  #
  # git-prompt.sh
  # https://github.com/git/git/tree/master/contrib/completion
  #
  if [ -f ~/.git-prompt.sh ]; then
    . ~/.git-prompt.sh

    GIT_PS1_SHOWDIRTYSTATE=true
    GIT_PS1_SHOWSTASHSTATE=true
    GIT_PS1_SHOWUNTRACKEDFILES=true
    GIT_PS1_SHOWUPSTREAM=
    GIT_PS1_SHOWCOLORHINTS=true
    GIT_PS1_HIDE_IF_PWD_IGNORED=true

    PROMPT_COMMAND="__git_ps1 \"$PS1_PRE\" \"$PS1_POST\" ' (%s)'"
  else
    PROMPT_COMMAND="__set_ps1 \"$PS1_PRE\" \"$PS1_POST\""
  fi
}

if [ "$color_prompt" = yes ]; then
  __set_prompt_command
fi

プロンプトに現在のターミナル環境名を設定するスクリプトファイル~/.bash_envnameを作成する。 (以下は参考程度に。)

~/.bash_envname
function __prompt_add_env_name()
{
  if [ -n "$_PROMPT_ENV_NAME" ]; then
    _PROMPT_ENV_NAME="$_PROMPT_ENV_NAME|$1"
  else
    _PROMPT_ENV_NAME="$1"
  fi
}

function __prompt_set_env_name()
{
  _PROMPT_ENV_NAME=""

  # Mono
  if [ -n "$MONO_PREFIX" ]; then
    __prompt_add_env_name "Mono:$MONO_PREFIX"
  fi

  # .NET
  if [ -n "$DOTNET_ROOT" ]; then 
    __prompt_add_env_name ".NET:$DOTNET_ROOT"
  fi

  # Visual Studio Code
  if [ -n "$VSCODE_INTEGRATED_TERMINAL" ]; then
    __prompt_add_env_name "VSCode"
  fi

  # Platform IO
  if [ -n "$PLATFORMIO_IDE" ]; then
    __prompt_add_env_name "PlatformIO $PLATFORMIO_IDE"
  fi
}

この設定では次のようなプロンプトを表示する。

表示されるプロンプトの例
[🟢 00:00:00 <smdn@hostname> ~]$ true
[🟢 00:00:00 <smdn@hostname> ~]$ false
[🔴 00:00:00 <smdn@hostname> ~]$ cd Desktop/
[🟢 00:00:00 <smdn@hostname> ~/Desktop]$ cd ~/gitdir/
[🟢 00:00:00 <smdn@hostname> (devel%) ~/gitdir]$ source /opt/dotnet/env 
[🟢 00:00:00 <smdn@hostname%.NET:/opt/dotnet> (devel%) ~/gitdir]$ 

以降、bashを起動すると上記の内容が読み込まれる。 変更した内容をすぐに反映させたい場合はsource .bashrcで再読み込みすることができる。

ファイルシステムの設定

RAIDアレイ(mdadm)・LVMの設定、パーティション作成・確認等については§.下準備を参照。

/etc/fstab

マウントポイントを作成し、必要に応じてパーティションを追記。

ネットワークの設定

以下は、NetworkManagerを無効にしてsystemd-networkdによる管理に切り替え、静的IPアドレスでのネットワークを設定する手順。

NetworkManagerによる管理を無効にする

NetworkManager用のnetplan設定ファイルを無効化する。

NetworkManager設定ファイルの無効化
sudo mv /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.disabled

NetworkManagerを無効にしてもトップバーやメニュー等にネットワーク設定が表示される箇所が残るので、それらを非表示にする場合はnmcliでオフにする。

sudo nmcli networking off

これによりnmcli generalで表示されるSTATEが休止中となる。

$nmcli general
STATE   CONNECTIVITY  WIFI-HW  WIFI  WWAN-HW  WWAN 
休止中  なし          有効     有効  有効     有効

systemd-networkdを有効にする

$sudo systemctl enable systemd-networkd
Created symlink /etc/systemd/system/dbus-org.freedesktop.network1.service → /lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /lib/systemd/system/systemd-networkd.socket.
Created symlink /etc/systemd/system/sysinit.target.wants/systemd-network-generator.service → /lib/systemd/system/systemd-network-generator.service.
Created symlink /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service → /lib/systemd/system/systemd-networkd-wait-online.service.

ネットワークインターフェイスを設定する

ネットワークインターフェイスとデバイス名を確認する。 設定するデバイス名が既知の場合はnetworkctl status デバイス名とする。 すべてのデバイスを表示する場合はデバイス名の代わりに-aオプションを指定する。

$networkctl status -a
● 1: lo                         
                     Link File: n/a
                  Network File: n/a
                          Type: loopback
                         State: n/a (unmanaged)
                  Online state: unknown
                    HW Address: 00:00:00:00:00:00
                           MTU: 65536
                         QDisc: noqueue
  IPv6 Address Generation Mode: eui64
          Queue Length (Tx/Rx): 1/1
                       Address: 127.0.0.1
                                ::1
             Activation Policy: up
           Required For Online: yes

● 2: enp1s0                     
                     Link File: /usr/lib/systemd/network/99-default.link
                  Network File: n/a
                          Type: ether
                         State: n/a (unmanaged)
                  Online state: unknown
                          Path: XXXXXXXXXXXX
                        Driver: XXXXXXXXXXXX
                        Vendor: XXXXXXXXXXXXXXXXXXXX
                         Model: XXXXXXXXXXXXXXXXXXXX
                    HW Address: xx:xx:xx:xx:xx:xx (XXXXXXXXXXXXXXXXXXXX)
                           MTU: 1500 (min: XXXX, max: XXXX)
                         QDisc: fq_codel
  IPv6 Address Generation Mode: none
          Queue Length (Tx/Rx): 1/1
              Auto negotiation: yes
                         Speed: 100Mbps
                        Duplex: full
                          Port: tp
                       Address: XXX.XXX.XXX.XXX
                       Gateway: XXX.XXX.XXX.XXX
             Activation Policy: up
           Required For Online: yes

以下、上記のコマンドで表示されたデバイスenp1s0を設定の対象とする。


/etc/netplan/ディレクトリに以下の内容でnetplan設定ファイルを作成する。 ここではファイル名を01-netcfg.yamlとした。

/etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      addresses: [192.168.0.10/24]
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        addresses: [192.168.0.1, 8.8.8.8]
      dhcp4: false
      dhcp6: false

真偽値を設定する項目では、true/falseの代わりにon/offあるいはyes/noを指定することもできる。

参考として、上記の設定は下記/etc/network/interfacesでの設定と同等のものとなる。

/etc/network/interfaces
auto lo
iface lo inet loopback

auto enp1s0
iface enp1s0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1
dns-nameservers 8.8.8.8

sudo netplan generate, sudo netplan applyで変更した設定を適用する。 オプション--debugを指定するとgenerateの詳細を表示することができる。

$sudo netplan --debug generate 
DEBUG:command generate: running ['/lib/netplan/generate']
** (generate:11571): DEBUG: 00:09:58.611: starting new processing pass
** (generate:11571): DEBUG: 00:09:58.611: enp1s0: adding new route
** (generate:11571): DEBUG: 00:09:58.611: We have some netdefs, pass them through a final round of validation
** (generate:11571): DEBUG: 00:09:58.611: enp1s0: setting default backend to 1
** (generate:11571): DEBUG: 00:09:58.611: Configuration is valid
** (generate:11571): DEBUG: 00:09:58.612: Generating output files..
** (generate:11571): DEBUG: 00:09:58.612: openvswitch: definition enp1s0 is not for us (backend 1)
** (generate:11571): DEBUG: 00:09:58.612: NetworkManager: definition enp1s0 is not for us (backend 1)

$sudo netplan apply

networkctl status enp1s0で設定が適用されたか確認する。

$networkctl status enp1s0
● 2: enp1s0                     
                     Link File: /usr/lib/systemd/network/99-default.link
                  Network File: /run/systemd/network/10-netplan-enp1s0.network
                          Type: ether
                         State: routable (configured)
                  Online state: online
                          Path: XXXXXXXXXXXX
                        Driver: XXXXXXXXXXXX
                        Vendor: XXXXXXXXXXXXXXXXXXXX
                         Model: XXXXXXXXXXXXXXXXXXXX
                    HW Address: xx:xx:xx:xx:xx:xx (XXXXXXXXXXXXXXXXXXXX)
                           MTU: 1500 (min: XXXX, max: XXXX)
                         QDisc: fq_codel
          Queue Length (Tx/Rx): 1/1
              Auto negotiation: yes
                         Speed: 100Mbps
                        Duplex: full
                          Port: tp
                       Address: 192.168.0.10
                       Gateway: 192.168.0.1
                           DNS: 192.168.0.1
                                8.8.8.8
             Activation Policy: up
           Required For Online: yes

あるいはipコマンドを使ってip addressとすればすべてのネットワークインターフェイスとアドレスの情報を確認することができる。 ip address show dev enp1s0とすれば特定のインターフェイスのみ確認できる。

ip addressの出力例
$ip address show dev enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global enp1s0
       valid_lft forever preferred_lft forever

また、nmcli generalで表示されるSTATE休止中となるが、CONNECTIVITY完全になる。

$nmcli general
STATE   CONNECTIVITY  WIFI-HW  WIFI  WWAN-HW  WWAN 
休止中  完全          有効     有効  有効     有効 

以降、NetworkManagerは不要となる。 インストールされているパッケージも不要ならば、削除する。

NetworkManagerの完全削除
sudo apt purge network-manager

ブリッジ接続を設定する

仮想マシンのネットワークで使用するブリッジを設定する。 まずはbridge-utilsをインストールしておく。

bridge-utilsのインストール
sudo apt install bridge-utils

先に作成した /etc/netplan/01-netcfg.yamlを変更してブリッジ設定を記述する。 ここではブリッジ名をbr0とする。

/etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [enp1s0]
      addresses: [192.168.0.10/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [192.168.0.1, 8.8.8.8]
      dhcp4: false
      dhcp6: false
      parameters:
        stp: false
        forward-delay: 0

また/etc/systemd/network/br0.networkを作成し以下の設定を記述する。

/etc/systemd/network/br0.network
[Match]
Name=br0

[Network]
LinkLocalAddressing=no

参考として、上記の設定は下記/etc/network/interfacesでの設定と同等のものとなる。

/etc/network/interfaces
auto lo
iface lo inet loopback

auto enp1s0
iface enp1s0 inet manual
up /sbin/ifconfig enp1s0 promisc

auto br0
iface br0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1
dns-nameservers 8.8.8.8
bridge_ports enp1s0
bridge_stp off
bridge_maxwait 1

sudo netplan generate, sudo netplan applyで変更した設定を適用する。

$sudo netplan --debug generate
DEBUG:command generate: running ['/lib/netplan/generate']
** (generate:12145): DEBUG: 00:17:59.399: starting new processing pass
** (generate:12145): DEBUG: 00:17:59.399: br0: adding new route
** (generate:12145): DEBUG: 00:17:59.399: We have some netdefs, pass them through a final round of validation
** (generate:12145): DEBUG: 00:17:59.399: br0: setting default backend to 1
** (generate:12145): DEBUG: 00:17:59.399: Configuration is valid
** (generate:12145): DEBUG: 00:17:59.399: enp1s0: setting default backend to 1
** (generate:12145): DEBUG: 00:17:59.399: Configuration is valid
** (generate:12145): DEBUG: 00:17:59.400: Generating output files..
** (generate:12145): DEBUG: 00:17:59.400: openvswitch: definition enp1s0 is not for us (backend 1)
** (generate:12145): DEBUG: 00:17:59.400: NetworkManager: definition enp1s0 is not for us (backend 1)
** (generate:12145): DEBUG: 00:17:59.400: openvswitch: definition br0 is not for us (backend 1)
** (generate:12145): DEBUG: 00:17:59.400: NetworkManager: definition br0 is not for us (backend 1)

$sudo netplan apply

networkctl status enp1s0 br0で設定が適用されたか確認する。

$networkctl status enp1s0 br0
● 2: enp1s0                     
                     Link File: /usr/lib/systemd/network/99-default.link
                  Network File: /run/systemd/network/10-netplan-enp1s0.network
                          Type: ether
                         State: enslaved (configured)
                  Online state: online
                          Path: XXXXXXXXXXXX
                        Driver: XXXXXXXXXXXX
                        Vendor: XXXXXXXXXXXXXXXXXXXX
                         Model: XXXXXXXXXXXXXXXXXXXX
                    HW Address: xx:xx:xx:xx:xx:xx (XXXXXXXXXXXXXXXXXXXX)
                           MTU: 1500 (min: XXXX, max: XXXX)
                         QDisc: fq_codel
                        Master: br0
  IPv6 Address Generation Mode: none
          Queue Length (Tx/Rx): 1/1
              Auto negotiation: yes
                         Speed: 100Mbps
                        Duplex: full
                          Port: tp
             Activation Policy: up
           Required For Online: yes

● 3: br0                        
                     Link File: /usr/lib/systemd/network/99-default.link
                  Network File: /run/systemd/network/10-netplan-br0.network
                          Type: bridge
                         State: routable (configured)
                  Online state: online
                        Driver: bridge
                    HW Address: xx:xx:xx:xx:xx:xx
                           MTU: 1500 (min: XXXX, max: XXXX)
                         QDisc: noqueue
  IPv6 Address Generation Mode: eui64
                 Forward Delay: 0
                    Hello Time: 2s
                       Max Age: 20s
                   Ageing Time: 5min
                      Priority: 32768
                           STP: no
        Multicast IGMP Version: 2
                          Cost: 2000
                    Port State: disabled
          Queue Length (Tx/Rx): 1/1
              Auto negotiation: no
                         Speed: 100Mbps
                       Address: 192.168.0.10
                       Gateway: 192.168.0.1
                           DNS: 192.168.0.1
                                8.8.8.8
             Activation Policy: up
           Required For Online: yes

あるいはipコマンドを使って確認する。

ip addressの出力例
$ip address show dev enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

$ip address show dev br0 
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever

システムの設定

IPv6を無効化する

GRUBの設定にて行う。

GRUBを設定する

/etc/default/grubを以下のように編集する。

/etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=3
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 noquiet nosplash intel_iommu=on"
GRUB_CMDLINE_LINUX="ipv6.disable=1"

ここでの変更内容は次のとおり。

GRUB_TIMEOUT_STYLEhiddenからmenuに変更
GRUB起動メニューを表示する
GRUB_TIMEOUT3に変更
GRUB_RECORDFAIL_TIMEOUT$GRUB_TIMEOUTを追加
GRUB起動メニューでのタイムアウト時間を3秒にする
GRUB_CMDLINE_LINUX_DEFAULT"quiet splash"から"ipv6.disable=1 noquiet nosplash intel_iommu=on"に変更
ipv6.disable=1
IPv6を無効にする
noquiet nosplash
ブート中に表示される内容をスプラッシュ画面からテキスト表示にする
intel_iommu=on
KVMでPCIパススルーを行うために、IOMMUを有効にする (Intel CPU/VT-dの場合。 AMD CPU/AMD-Viの場合はamd_iommu=on。)
関連:§.PCIパススルーでUSBデバイスを使用できるようにする
GRUB_CMDLINE_LINUX"ipv6.disable=1"に変更
ipv6.disable=1
IPv6を無効にする

編集が終わったら、update-grub2で設定を反映させる。

update-grub2の実行例
$sudo update-grub2 
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-47-generic
Found initrd image: /boot/initrd.img-5.15.0-47-generic
Found linux image: /boot/vmlinuz-5.15.0-43-generic
Found initrd image: /boot/initrd.img-5.15.0-43-generic
Memtest86+ needs a 16-bit boot, that is not available on EFI, exiting
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

スワップ頻度を変更する

スワップ頻度をデフォルトの60から10に下げるために、以下の内容を追記。

/etc/sysctl.conf
vm.swappiness = 10

sysctl -pで変更を反映させる。 また、正しく変更されたかを確認。

$cat /proc/sys/vm/swappiness 
60

$sudo sysctl -p
vm.swappiness = 10

$cat /proc/sys/vm/swappiness 
10

sysctl -pを実行すると変更した内容が表示される。 また、現在の設定値はcat /proc/sys/vm/swappinessで確認できる。

その他の設定

/etc/hosts

必要に応じてホストを追記。

一般ユーザー・グループを追加する

必要に応じて追加する。

ユーザー・グループの追加
# 一般ユーザーのグループ・ユーザーの作成
sudo groupadd -g 1001 user2
sudo adduser --ingroup user2 --uid 1001 user2

# 管理者ユーザーにする場合(sudoグループ・admグループに追加)
sudo gpasswd -a user2 sudo
sudo gpasswd -a user2 adm

# ホームディレクトリ・ログインシェルを持たないユーザーを作成する場合
sudo groupadd -g 5000 user3
sudo adduser --ingroup user3 --uid 5000 --disabled-login --disabled-password --no-create-home --shell /usr/sbin/nologin --gecos "" user3

# 現在の所属グループを表示する場合
groups <user>

ソフトウェアの追加と削除

アップグレードする場合や、他の環境から移行する場合は、事前に必要になるソフトウェア・不要なソフトウェアの一覧を作成しておくとよい。 /var/log/apt/history.logにはaptでの操作の履歴が記録されているので、それを元に要・不要の判断およびリストアップをすることができる。

aptインストール履歴
# aptコマンドでの操作の履歴を表示
grep "Commandline:" /var/log/apt/history.log

# 実際にインストールしたパッケージを表示
# (自動的にインストールされた関連パッケージも含まれる)
grep "Install:" /var/log/apt/history.log

aptパッケージの削除・インストール

不要なaptパッケージを削除する

以下のコマンドで一括して削除する。 削除目的等については省略。

不要なaptパッケージの削除
sudo apt purge \
  aspell aspell-en \
  bluez bluez-cups bluez-obexd \
  cups cups-browsed cups-bsd cups-client cups-common cups-core-drivers cups-daemon cups-filters* cups-ipp-utils cups-pk-helper cups-server-common foomatic-db-compressed-ppds ipp-usb \
  enchant-2 \
  '^espeak(-.*)?' \
  ftp tnftp \
  gnome-accessibility-themes \
  gnome-online-accounts \
  hplip hplip-data '^printer-driver-.*' \
  modemmanager \
  ntfs-3g '^libntfs-.*' \
  nano \
  network-manager \
  openprinting-ppds \
  ppp pptp-linux \
  rygel \
  sane-utils libsane-hpaio \
  speech-dispatcher speech-dispatcher-audio-plugins \
  wamerican wbritish

上記コマンドで削除されるパッケージは次のとおり。

以下のパッケージは「削除」されます:
  aspell* aspell-en* bluez* bluez-cups* bluez-obexd* cups* cups-browsed* cups-bsd* cups-client* cups-common* cups-core-drivers* cups-daemon* cups-ppdc*
  cups-server-common* enchant-2* espeak-ng-data* ftp* gnome-accessibility-themes* gnome-bluetooth* gnome-online-accounts* hplip* hplip-data*
  libespeak-ng1* libntfs-3g89* libsane-hpaio* modemmanager* nano* network-manager* network-manager-config-connectivity-ubuntu* network-manager-gnome*
  network-manager-openvpn* network-manager-openvpn-gnome* network-manager-pptp* network-manager-pptp-gnome* ntfs-3g* openprinting-ppds* ppp*
  pptp-linux* printer-driver-brlaser* printer-driver-c2esp* printer-driver-foo2zjs* printer-driver-foo2zjs-common* printer-driver-hpcups*
  printer-driver-m2300w* printer-driver-min12xxw* printer-driver-pnm2ppa* printer-driver-postscript-hp* printer-driver-ptouch* printer-driver-pxljr*
  printer-driver-sag-gdi* printer-driver-splix* pulseaudio-module-bluetooth* sane-utils* speech-dispatcher-espeak-ng* tnftp* ubuntu-desktop*
  ubuntu-desktop-minimal* ubuntu-standard* wamerican* wbritish*
以下のパッケージは「削除」されます:
  cups-filters* cups-filters-core-drivers* cups-ipp-utils* cups-pk-helper* foomatic-db-compressed-ppds* ipp-usb*
以下のパッケージは「削除」されます:
  orca* rygel* speech-dispatcher* speech-dispatcher-audio-plugins*

各パッケージの概要は次のとおり。

削除するパッケージと概要
パッケージ名 概要
aspell GNU aspell スペルチェッカ
aspell-en GNU Aspell 用英語辞書
bluez Bluetooth 用ツールとデーモン
bluez-cups Bluetooth printer driver for CUPS
bluez-obexd bluez obex daemon
cups Common UNIX Printing System(tm) - PPD/ドライバサポート、web インターフェース
cups-browsed OpenPrinting CUPS フィルター - cups-browsed
cups-bsd Common UNIX Printing System(tm) - BSD commands
cups-client Common UNIX Printing System(tm) - クライアントプログラム (SysV)
cups-common Common UNIX Printing System(tm) - common files
cups-core-drivers Common UNIX Printing System(tm) - driverless printing
cups-daemon Common UNIX Printing System(tm) - daemon
cups-filters* OpenPrinting CUPS フィルタ - メインパッケージ
cups-ipp-utils Common UNIX Printing System(tm) - IPP developer/admin utilities
cups-pk-helper cups の細かい権限設定を行なうための PolicyKit ヘルパー
cups-server-common Common UNIX Printing System(tm) - server common files
foomatic-db-compressed-ppds OpenPrinting プリンタサポート - データベースから派生した圧縮 PPD
ipp-usb Daemon for IPP over USB printer support
enchant-2 各種スペルチェッカエンジンへのラッパー (バイナリプログラム)
'^espeak(-.*)?' speech data files
ftp dummy transitional package for tnftp
tnftp enhanced ftp client
gnome-accessibility-themes High Contrast GTK+ 2 theme and icons
gnome-online-accounts service to manage online accounts for the GNOME desktop
hplip HP Linux Printing and Imaging System (HPLIP)
hplip-data HP Linux Printing and Imaging - データファイル
'^printer-driver-.*' printer driver for HP-GDI printers
modemmanager モデムを管理する D-Bus サービス
ntfs-3g FUSE 用の読み書き可能な NTFS ドライバ
'^libntfs-.*' FUSE 用 NTFS 読み書きドライバ (ランタイムライブラリ)
nano Pico にヒントを得て作られた、コンパクトで使いやすいテキストエディタ
network-manager ネットワーク管理フレームワーク (デーモンおよびユーザスペースツール)
openprinting-ppds OpenPrinting printer support - PostScript PPD files
ppp Point-to-Point Protocol (PPP) デーモン
pptp-linux Point-to-Point Tunneling Protocol (PPTP) クライアント
rygel GNOME UPnP/DLNA services
sane-utils スキャナ用 API ライブラリ - ユーティリティ
libsane-hpaio HP の複合機用 SANE バックエンド
speech-dispatcher Common interface to speech synthesizers
speech-dispatcher-audio-plugins Audio output plugins
wamerican /usr/share/dict 用米国英語単語リスト
wbritish /usr/share/dict 用英国英語単語リスト
パッケージ名 概要

使用するaptパッケージをインストールする

以下のコマンドで一括してインストールする。 インストール目的等については省略。

使用するaptパッケージのインストール
sudo apt install \
  alsa-utils \
  apt-transport-https \
  build-essential pkg-config libboost-dev \
  brasero \
  bridge-utils \
  clang \
  cmake \
  chromium-browser \
  curl \
  '^fonts-ipafont.*' '^fonts-ipaexfont.*' fonts-monapo fonts-mikachan fonts-wine \
  gedit-plugins \
  gimp \
  git gitweb \
  gnome-shell-extension-manager \
  gnome-tweaks \
  gparted \
  gsmartcontrol \
  icedax \
  inkscape \
  liblua5.3-dev liblua5.4-dev \
  libreoffice-calc \
  logwatch \
  lm-sensors \
  mdadm \
  mozc-utils-gui \
  munin munin-node munin-plugins-core munin-plugins-extra \
  nethogs \
  nfs-kernel-server \
  nginx-extras \
  nkf \
  nodejs \
  partitionmanager \
  php-fpm php-mbstring fcgiwrap \
  postfix \
  samba \
  smartmontools \
  software-properties-common \
  swig \
  synaptic \
  tree \
  virt-manager \
  vlc \
  wine-stable \
  xclip

ここでインストールする各パッケージの概要は次のとおり。

インストールするパッケージと概要
パッケージ名 概要
alsa-utils ALSA の設定や利用のためのユーティリティ群
apt-transport-https transitional package for https support
build-essential build-essential なパッケージの一覧情報
pkg-config ライブラリのコンパイルフラグとリンクフラグを管理
libboost-dev Boost C++ Libraries development files (default version)
brasero CD/DVD burning application for GNOME
bridge-utils Linux イーサネットブリッジの設定ユーティリティ
clang C, C++ and Objective-C compiler (LLVM based), clang binary
cmake cross-platform, open-source make system
chromium-browser Transitional package - chromium-browser -> chromium snap
curl URL 文法でデータを転送するコマンドラインツール
'^fonts-ipafont.*' Japanese OpenType font set, IPA Gothic and IPA P Gothic Fonts
'^fonts-ipaexfont.*' Japanese OpenType font, all IPAex Fonts
fonts-monapo 日本語 TrueType フォント - Monapo
fonts-mikachan handwritten Japanese Truetype font
fonts-wine Windows API の実装 - フォント
gedit-plugins set of plugins for gedit
gimp GNU 画像処理プログラム
git 速く、スケーラブルな分散型リビジョン管理システム
gitweb fast, scalable, distributed revision control system (web interface)
gnome-shell-extension-manager Utility for managing GNOME Shell Extensions
gnome-tweaks GNOME の高度な設定を変更するツール
gparted GNOME パーティションエディタ
gsmartcontrol graphical user interface for smartctl
icedax オーディオ CD から WAV を生成する
inkscape ベクターベースのドローイングプログラム
liblua5.3-dev Development files for the Lua language version 5.3
liblua5.4-dev Development files for the Lua language version 5.4
libreoffice-calc office productivity suite -- spreadsheet
logwatch 出力が優れ、Perl で書かれたログアナライザ
lm-sensors 温度・電圧・ファンセンサ読み取り用ユーティリティ
mdadm Linux MD アレイ (ソフトウェア RAID) 管理ツール
mozc-utils-gui GUI utilities of the Mozc input method
munin network-wide graphing framework (grapher/gatherer)
munin-node network-wide graphing framework (node)
munin-plugins-core network-wide graphing framework (plugins for node)
munin-plugins-extra network-wide graphing framework (user contributed plugins for node)
nethogs Net top tool grouping bandwidth per process
nfs-kernel-server NFS カーネルサーバ用サポート
nginx-extras nginx web/proxy server (extended version)
nkf ネットワーク漢字コード変換フィルタ
nodejs evented I/O for V8 javascript - runtime executable
partitionmanager file, disk and partition management for KDE
php-fpm server-side, HTML-embedded scripting language (FPM-CGI binary) (default)
php-mbstring MBSTRING module for PHP [default]
fcgiwrap simple server to run CGI applications over FastCGI
postfix 高性能メール配送エージェント
samba UNIX 用 SMB/CIFS ファイル、プリンタ、認証サーバ
smartmontools S.M.A.R.T を使ってストレージシステムの制御と監視を実施
software-properties-common manage the repositories that you install software from (common)
swig スクリプト言語向けに C/C++ のコードのインターフェースを生成
synaptic グラフィカルなパッケージマネージャ
tree displays an indented directory tree, in color
virt-manager 仮想マシン管理用デスクトップアプリケーション
vlc マルチメディアプレイヤおよびストリーマ
wine-stable Windows API implementation (transitional package)
xclip X セレクションへのコマンドラインインターフェイス
パッケージ名 概要

Linux向けMicrosoft製品のインストール

Microsoft製品のリポジトリを追加する

キーリングを追加する。

Microsoft製品のAPTキーリングを追加する
$curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

リポジトリを追加する。

Microsoft製品のリポジトリを追加する
$sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/ubuntu/22.04/prod jammy main"
リポジトリ: 'deb [arch=amd64] https://packages.microsoft.com/ubuntu/22.04/prod jammy main'
概要:
Archive for codename: jammy components: main
より詳しい情報: https://packages.microsoft.com/ubuntu/22.04/prod
リポジトリを追加しています。
続けるには「Enter」キーを、中止するにはCtrl-cを押してください。

Visual Studio Codeをインストールする場合は以下を追加
$sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
リポジトリ: 'deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main'
概要:
Archive for codename: stable components: main
より詳しい情報: https://packages.microsoft.com/repos/vscode
リポジトリを追加しています。
続けるには「Enter」キーを、中止するにはCtrl-cを押してください。

Microsoft Edgeをインストールする場合は以下を追加
$sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main"
リポジトリ: 'deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main'
概要:
Archive for codename: stable components: main
より詳しい情報: https://packages.microsoft.com/repos/edge
リポジトリを追加しています。
続けるには「Enter」キーを、中止するにはCtrl-cを押してください。

$sudo apt update

[arch=*]を指定せずにリポジトリを追加した場合、apt update等を実行したときに以下のような警告が表示されることがある。

N: リポジトリ 'https://packages.microsoft.com/ubuntu/22.04/prod jammy InRelease' がアーキテクチャ 'i386' をサポートしないため設定ファイル 'main/binary-i386/Packages' の取得をスキップ

この場合、追加されたsourcelistファイルを編集して、[arch=amd64]などを追加することで警告がでないようにすることができる。

/etc/apt/sources.list.d/*.list
-deb https://packages.microsoft.com/ubuntu/22.04/prod jammy main
+deb [arch=amd64] https://packages.microsoft.com/ubuntu/22.04/prod jammy main

Microsoftリポジトリのパッケージを優先する

dotnet-sdk-6.0などのパッケージについて、Ubuntuではなく、Microsoftのリポジトリのパッケージを優先してインストールしたい場合は、以下のような.prefファイルを作成することでパッケージ選択の優先度を変更できる。

/etc/apt/preferences.d/packages.microsoft.com.pref
Package: dotnet-* aspnetcore-* netstandard-*
Pin: origin "packages.microsoft.com"
Pin-Priority: 1001

使用するパッケージをインストールする

以下のコマンドで一括してインストールする。 インストール目的等については省略。

使用するパッケージのインストール
sudo apt install \
  code \
  dotnet-sdk-6.0 \
  microsoft-edge-stable \
  powershell

ここでインストールする各パッケージの概要は次のとおり。

インストールするパッケージと概要
パッケージ名 概要
code Code editing. Redefined.
dotnet-sdk-6.0 Microsoft .NET SDK 6.0.401
microsoft-edge-stable The web browser from Microsoft
powershell PowerShell is an automation and configuration management platform.
パッケージ名 概要

snapパッケージの削除・インストール

不要なsnapパッケージを削除する

不要なsnapパッケージの削除
sudo snap remove hunspell-dictionaries-1-7-2004

使用するspanパッケージをインストールする

使用するsnapパッケージのインストール
sudo snap install thunderbird

ドライバ類をインストールする

  1. 「ソフトウェアとアップデート」を起動する
  2. [追加のドライバー]タブを開く
  3. 使用するドライバを選択して[変更の適用]を行う

パッケージ情報を更新してアップデートする

sudo apt update && sudo apt dist-upgrade

必要とされていないパッケージを削除する

sudo apt autoremove

その他環境設定

/etc/aliases

/etc/aliasesに送信先を追記して、root宛て・一般ユーザ宛てメールの送信先を変更する。

/etc/aliases
# Added by installer for initial user
root: root@mail.example.com
user: user@mail.example.com

追記した内容を反映させる。

sudo newaliases

再起動

ここまででいったん再起動。 再起動後にps, pstree, topで必要なさそうなプロセスが動いてないかチェックする。

デスクトップ環境の設定とカスタマイズ

~/.cacheディレクトリ

~/.cacheディレクトリ等、以下のディレクトリを/homeとは異なるディスク上のパーティションに置き、シンボリックリンクに置き換える。

  • .arduino15
  • .cache
  • .dotnet
  • .npm
  • .nuget
  • .platformio
  • .var
  • .vscode
  • .wine
#!/bin/bash

# シンボリックリンクに置き換えるディレクトリ
DIRS=(".arduino15" ".cache" ".dotnet" ".npm" ".nuget" ".platformio" ".var" ".vscode" ".wine")

# リンク先のディレクトリ
CACHE_BASE_DIR=/opt/cache/users/${USER}

for d in "${DIRS[@]}"; do
  DIR=~/${d}
  CACHE_DIR=${CACHE_BASE_DIR}/${d}

  # すでにシンボリックリンクの場合は何もしない
  if [ ! -L ${DIR} ]; then
    # リンク先ディレクトリが無い場合は、先に作成して既存のファイルを移動する
    if [ ! -d ${CACHE_DIR} ]; then
      mkdir -p ${CACHE_DIR}
      rsync -a ${DIR} ${CACHE_DIR}/
    fi

    # 一旦実ディレクトリを退避したのち、シンボリックリンクを作成し、退避した実ディレクトリを削除
    TEMP_DIR=~/temp_${d}
    mv ${DIR} ${TEMP_DIR}
    ln -s ${CACHE_DIR} ${DIR}
    rm -rf ${TEMP_DIR}
  fi
done

デスクトップ設定の復元

あらかじめdconf dumpでエクスポートしておいた設定がある場合は、それをインポートする。

dconfの/org/gnome/ディレクトリエントリをエクスポート/インポートする
# /org/gnome/以下のディレクトリエントリをエクスポートする
dconf dump /org/gnome/ > org-gnome.dconf

# /org/gnome/以下のディレクトリエントリにインポートする
dconf load /org/gnome/ < org-gnome.dconf

設定

⏻メニュー→⚙設定を起動して設定を編集する。

[外観]タブ
Dock
Dockの設定をカスタマイズする
Dockの挙動の設定
「マウントしていないボリュームを含む」のチェックを外す
[通知]タブ
「ロック画面での通知」をオフにする
[アプリケーション]
不必要なものをオフにする
[電源管理]タブ
[省電力オプション]
[ブランクスクリーン]
「しない」に設定、または以下のコマンドで長時間に指定
[マウス]タブ
マウスの速度を適当な値に変更する
[キーボード]タブ
[入力ソース]
日本語(Mozc)の優先度を上げる
[ユニバーサルアクセス]タブ
[タイピング]
[リピートキー]
オンにして、繰り返しキー入力の時間と速度を適度な値に変更する
[カーソルの点滅]
オンにして、点滅の速度を適度な値に変更する
[日付と時刻]タブ
[日時書式]
24時間制にする

ブランクスクリーンの設定を任意の時間にしたい場合は、gsettingsコマンドを用いてorg.gnome.desktop.sessionのキーidle-delayに秒数単位で値を設定する。 0に設定すれば「しない」と同じ設定となる。

スクリーンをブランクにするまでの時間を設定する
# 3600秒(=1時間)に設定する
gsettings set org.gnome.desktop.session idle-delay 3600

# 現在設定されている値を表示する
gsettings get org.gnome.desktop.session idle-delay

Tweaks (デスクトップ環境・ウィンドウマネージャの設定等)

Tweaks(gnome-tweaks)を起動して設定を編集する。

[ウィンドウ]タブ
[ウィンドウ操作キー]
Altに変更
[キーボードとマウス]タブ
[入力ソースを追加表示する]
オンに変更
[フォント]タブ
[インターフェイスのテキスト]
Noto Sans CJK Thin 11にする
[等幅]
Noto Sans Mono CJK JP Regular 12にする

Mozcの設定

Mozcの設定(mozc)を起動して設定を編集する。

[一般]タブ
[キー設定の選択]
[ATOK]に変更
[辞書]タブ
[ユーザー辞書の編集]
[Mozc辞書ツール]を起動でユーザー辞書をインポートする
[サジェスト]タブ
[サジェストの最大候補数]
9にする

Firefox

user.jsを作成して以下の内容を記述しておく。

~/snap/firefox/common/.mozilla/firefox/(ユーザープロファイルディレクトリ)/user.js
user_pref("accessibility.browsewithcaret", true); // キャレットブラウズモードを有効にする

user_pref("browser.search.openintab", true); // 検索結果を新しいタブで開く
user_pref("browser.search.widget.inNavBar", true); // 検索バーをツールバーに表示する
user_pref("browser.startup.page", 3); // 起動時に前回のウィンドウとタブを開く
user_pref("browser.tabs.loadInBackground", false); // リンクを新しいタブで開いたとき、すぐにそのタブに切り替える
user_pref("browser.tabs.loadBookmarksInTabs", true); // ブックマークを新しいタブで開く
user_pref("browser.tabs.closeWindowWithLastTab", false); // 最後のタブを閉じたあともウィンドウを開いたままにする
user_pref("browser.tabs.warnOnClose", false); // 複数のタブを閉じるときにダイアログを表示しない

user_pref("general.autoScroll", false); // 自動スクロール機能を使用しない
user_pref("general.smoothScroll", false); // スムーススクロールを無効にする

user_pref("intl.accept_languages", "ja,en"); // 言語の優先順位(Accept-Language)を設定する

user_pref("layout.spellcheckDefault", 0); // 自動スペルチェック機能を使用しない

user_pref("network.dns.disableIPv6", true); // IPv6を無効にする

user_pref("signon.rememberSignons", false); // ウェブサイトのログイン情報とパスワードを保存しない

その他、メニューの[設定]から以下の設定を行う。

[検索]タブ
[ワンクリック検索エンジン]
不要な検索エンジンを選択解除あるいは削除

プロファイルごとのショートカットを作る

デフォルト以外のプロファイルがまだ存在しない場合は、一旦Firefoxを終了したのちにfirefox -pでプロファイル選択ウィンドウを開き、新しいプロファイルを作成する。

firefox -p

~/.local/share/applicationsにデスクトップエントリファイルを作成して以下のような内容を記述する。 あるいは/usr/share/applications/firefox.desktopをコピーして編集する。 拡張子を除くファイル名部分は任意に設定できる。 以下の例では、プロファイル名user2でFirefoxを起動するようにしている。

~/.local/share/applications/firefox-profile-user2.desktop
[Desktop Entry]
Version=1.0
Name=Firefox (user2)
Exec=firefox -P "user2" %u
Type=Application
Terminal=false
Icon=/snap/firefox/current/default256.png

# 「新しいウィンドウを開く」などのアクションを定義する場合は、Actionsキーにアクション名を記述して、
# 対応する名前のセクションにて動作を定義する
# アクションを複数定義する場合は、";"で区切ってアクション名を記述する
Actions=new-window;

[Desktop Action new-window]
Name=新しいウィンドウを開く
Exec=firefox -P "user2" --new-window

デスクトップエントリファイルを作成するとアプリケーション一覧にアイコンが表示されるようになる。 表示されない場合は一旦ログアウトする。

Thunderbird

user.jsを作成して以下の内容を記述しておく。

~/snap/thunderbird/common/.thunderbird/(ユーザープロファイルディレクトリ)/user.js
user_pref("general.smoothScroll", false); // スムーススクロールを無効にする
user_pref("mail.mdn.report.enabled", false); // 開封確認を送信しない
user_pref("mail.server.default.mdn_report_enabled", false); // (新規に作成されるアカウントに対して)開封確認を送信しない
user_pref("mail.server.default.offline_download", false); // (新規に作成されるアカウントに対して)メッセージの同期を無効にする
user_pref("mail.server.default.check_all_folders_for_new", true); // すべてのIMAPフォルダの新着メールをチェックする

Nautilus

メニューの[設定]から以下の設定を行う。

[全般]
[一覧表示でフォルダーをツリー表示可能にする]
オンにする
[パフォーマンス]
[サブフォルダー内の検索]
「このコンピューターのファイルのみ」を選択する
[サムネイルの表示]
「このコンピューターのファイルのみ」を選択する
[フォルダー内のファイル数の算出]
「このコンピューターのファイルのみ」を選択する

ロケーションバーを常に表示するようにする・フルパスを表示するようにする

Nautilusロケーションバーを常に表示する・フルパスを表示するようにする
gsettings set org.gnome.nautilus.preferences always-use-location-entry true

/homeのディレクトリ表記を英語にする・不要なディレクトリを削除する

次項§.不要なディレクトリをサイドバーに表示しないようにするを参照のこと。

不要なディレクトリをサイドバーに表示しないようにする

~/.config/user-dirs.dirsを編集し、表示したくないディレクトリをコメントアウトする。 またディレクトリ名を日本語表記から英語表記に変えたい場合も、このファイルを変更する。

~/.config/user-dirs.dirs
# 以下のディレクトリはサイドバーに表示する、かつ英語表記のディレクトリ名を使用する
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_PICTURES_DIR="$HOME/Pictures"

# 以下のディレクトリはNautilusのサイドバーやファイルダイアログに表示させない
#XDG_TEMPLATES_DIR="$HOME/Templates"
#XDG_PUBLICSHARE_DIR="$HOME/Public"
#XDG_MUSIC_DIR="$HOME/Music"
#XDG_VIDEOS_DIR="$HOME/Videos"

再度ログインした際にも有効にするため、~/.config/user-dirs.confを作成して以下の内容を書き込む。

~/.config/user-dirs.conf
enabled=False

~/.config/user-dirs.localeに記載されているロケールがja_JPになっているので、C等に変更しておく。

~/.config/user-dirs.locale
C

その後、ディレクトリ名を変更する。 また不要になったディレクトリを削除する。

cd ~
mv デスクトップ/ Desktop/
mv ダウンロード/ Downloads/
rmdir テンプレート/ 公開/ ドキュメント/ ミュージック/ ピクチャ/ ビデオ/

ログアウトするなどしてセッションを再起動する。 最後にNautilusのサイドバーの不要なディレクトリを右クリックして一覧から削除する。

システムモニタアプレット(gnome-shell-system-monitor-applet)のインストール

まずgir1.2-gtop-2.0をインストールする。

gir1.2-gtop-2.0のインストール
sudo apt install gir1.2-gtop-2.0

GNOME Shell Extension Managerを起動して、system-monitor-nextをインストールする。

2022年9月23日時点では、オリジナルのsystem-monitorが対応するバージョンはGNOME 40までとなっていて、GNOME 42では動作しない状態になっている。

その他のシステム設定・環境設定

メニュー項目からの再起動・電源オフ・サスペンド等に管理者認証を要求する

/etc/polkit-1/localauthority/50-local.d/.pklaファイルを作成して、Polkitによるデフォルトの動作を置き換える。 ここでは、すべてのユーザー(unix-user:*)に対して管理者ユーザーとしての認証(auth_admin_keep)を求める。

/etc/polkit-1/localauthority/50-local.d/require-authentication-for-power-operations.pkla
[Require authentication for power operations]
Identity=unix-user:*
Action=org.freedesktop.login1.halt*;org.freedesktop.login1.hibernate*;org.freedesktop.login1.power-off*;org.freedesktop.login1.reboot*;org.freedesktop.login1.suspend*;org.freedesktop.login1.inhibit-block-*;org.freedesktop.login1.inhibit-delay-*
ResultAny=no
ResultInactive=no
ResultActive=auth_admin_keep

Ubuntu 22.04ではpolkitd 0.105がインストールされている(最新は0.116)。 このため、*.rulesファイルを/etc/polkit-1/rules.dに配置しても機能しない。

$pkaction --version
pkaction version 0.105

上記の内容でファイルを作成すると、サスペンドでは認証ダイアログが表示されるようになる。 再起動・電源オフでは、メニューをクリックしても機能しない動作となる。

(syslogには「gnome-session-binary[3322]: WARNING: Unable to inhibit system: GDBus.Error:org.freedesktop.DBus.Error.InteractiveAuthorizationRequired: Interactive authentication required.」と出力される)


変更が反映されない場合は一旦ログアウトする、Polkitを再起動する、GDMを再起動する、あるいはマシンを再起動する。

Polkitの再起動
sudo systemctl restart polkit
GDMの再起動
sudo systemctl restart gdm.service

以降、再起動・電源オフはコマンドの入力によって行う。

再起動・電源オフ
sudo reboot # 再起動
sudo shutdown -h # 電源オフ

開発環境の設定

Logwatch

動作テストした結果をroot宛にメールで送信する。

sudo logwatch --detail high --mailto root

Munin

設定ファイルを編集する。

/etc/munin/munin.conf
# 収集したデータ、HTMLの出力先などを設定
dbdir	/var/lib/munin
htmldir	/srv/www/munin
logdir	/var/log/munin
rundir  /var/run/munin

# a simple host tree
[localhost.example.com]
    address 127.0.0.1
    use_node_name yes

# 以下、監視するノードをここに追記
[server1.example.com]
    address server1
    use_node_name yes

localhostからのアクセスのみの許可となっていることを確認する。

/etc/munin/munin-node.conf
allow ^127\.0\.0\.1$
allow ^::1$

/etc/munin/pluginsに必要なプラグインを追加・不要なプラグインを削除する。

cd /etc/munin/plugins/
sudo ln -s /usr/share/munin/plugins/xxx #必要なプラグインの追加
sudo unlink xxx # 不要なプラグインの削除

munin-nodeを再起動する。

sudo service munin-node restart

別途HTTPサーバーの設定を変更して/etc/munin/munin.confhtmldirで設定したHTMLの出力先を表示できるようにする。

git-daemon

git-daemonをsystemdサービスとして動作させる。

まず、git-daemon用にユーザーとグループを追加する。 (ここではそれぞれIDに602番を用いる)

sudo groupadd -g 602 git
sudo adduser --uid 602 --ingroup git --disabled-login --disabled-password --no-create-home --shell /usr/sbin/nologin --gecos "" git

リポジトリを格納するディレクトリがまだない場合は、作成する。

sudo -u git mkdir -p /srv/repos/git

次にgit-daemonをsystemdサービスとして動作させるために、以下の内容でユニットファイルを作成する。

/etc/systemd/system/git-daemon.service
[Unit]
Description=Git Daemon

[Service]
ExecStart=/usr/lib/git-core/git-daemon --export-all --reuseaddr --enable=receive-pack --base-path=/srv/repos/git

User=git
Group=git

IPAddressDeny=any
IPAddressAllow=127.0.0.1 192.168.1.0/24

Restart=always
RestartSec=500ms

StandardOutput=journal
StandardError=journal
SyslogIdentifier=git-daemon

[Install]
WantedBy=multi-user.target

systemctl start git-daemonでサービスを起動し、systemctl status git-daemonで状態を確認する。

git-daemonサービスを起動し、状態を確認する
$sudo systemctl start git-daemon
$sudo systemctl status git-daemon
● git-daemon.service - Git Daemon
     Loaded: loaded (/etc/systemd/system/git-daemon.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-09-24 02:38:05 JST; 4s ago
   Main PID: 111668 (git-daemon)
      Tasks: 1 (limit: 38079)
     Memory: 236.0K
        CPU: 3ms
     CGroup: /system.slice/git-daemon.service
             └─111668 /usr/lib/git-core/git-daemon --export-all --reuseaddr --enable=receive-pack --base-path=/srv/repos/git

この状態でgit clone等が動作するか確認する。

動作に問題がなければ、systemctl enable git-daemonでブート時に自動的に起動するようにする。

git-daemonサービスの自動起動を有効にする
$sudo systemctl enable git-daemon
Created symlink /etc/systemd/system/multi-user.target.wants/git-daemon.service → /etc/systemd/system/git-daemon.service.

$sudo systemctl status git-daemon
● git-daemon.service - Git Daemon
     Loaded: loaded (/etc/systemd/system/git-daemon.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-09-24 02:38:05 JST; 9min ago
   Main PID: 111668 (git-daemon)
      Tasks: 1 (limit: 38079)
     Memory: 428.0K
        CPU: 21ms
     CGroup: /system.slice/git-daemon.service
             └─111668 /usr/lib/git-core/git-daemon --export-all --reuseaddr --enable=receive-pack --base-path=/srv/repos/git

Gitクライアント

git configで各種初期設定を行う。 または~/.gitconfigを編集する。

git config
git config --global user.name "username"
git config --global user.email "email"
git config --global core.editor vi
git config --global core.autocrlf input
git config --global core.safecrlf true
git config --global core.ignorecase false
git config --global core.quotepath false
git config --global push.default simple
git config --global color.ui true
git config --global color.diff.meta "bold yellow"
git config --global color.diff.frag "bold cyan"
git config --global color.diff.old "bold red"
git config --global color.diff.new "bold green"

git-prompt.sh

git-prompt.shをダウンロードする。

git-prompt.shのダウンロード
curl -L https://github.com/git/git/raw/master/contrib/completion/git-prompt.sh --output ~/.git-prompt.sh

NFS

/etc/exportsを編集。

/etc/exports
# エクスポート設定を追記する
/srv/export/share     server1(rw,sync,no_subtree_check,root_squash,anonuid=500,anongid=500)

NFSサーバを再起動。

sudo service nfs-kernel-server restart

libvirt

Intel VTが有効になっているか、KVMが利用できるか確認する。

$egrep -c '(vmx|svm)' /proc/cpuinfo
8

$kvm-ok 
INFO: /dev/kvm exists
KVM acceleration can be used

ゲストの設定ファイルの復元

virsh dumpxmlで設定ファイルのダンプファイルを作成しておく。

virsh dumpxml guest > guest.xml

virsh defineで復元する。 また復元された結果をvirsh list --allで確認する。

virsh define guest.xml
virsh list --all

PCIパススルーでUSBデバイスを使用できるようにする

GRUBの設定を変更してIOMMUを有効にしておく(詳細:§.GRUBを設定する)。 IOMMUが有効な場合はdmesgで以下のようなメッセージが表示されるようになる。

$sudo dmesg | grep IOMMU
[    0.000000] DMAR: IOMMU enabled

AppArmorによりアクセス制御がされている場合、USBデバイスへのアクセスが拒絶され、仮想マシンを起動する際に以下のようなメッセージが表示される場合がある。

$sudo dmesg | grep libvirt

[  585.002227] audit: type=1400 audit(1486069534.271:84): apparmor="DENIED" operation="open" profile="libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" name="/run/udev/data/c189:1" pid=5275 comm="qemu-system-x86" requested_mask="r" denied_mask="r" fsuid=121 ouid=0
[  585.002277] audit: type=1400 audit(1486069534.271:85): apparmor="DENIED" operation="open" profile="libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" name="/run/udev/data/c189:2" pid=5275 comm="qemu-system-x86" requested_mask="r" denied_mask="r" fsuid=121 ouid=0
[  585.002322] audit: type=1400 audit(1486069534.271:86): apparmor="DENIED" operation="open" profile="libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" name="/run/udev/data/c189:3" pid=5275 comm="qemu-system-x86" requested_mask="r" denied_mask="r" fsuid=121 ouid=0
  :
  :

この場合は、以下の2つのAppArmorプロファイルを編集してアクセスを許可する。 まずlibvirt共通のプロファイル/etc/apparmor.d/abstractions/libvirt-qemuを編集して以下の箇所を変更する。 (/dev/bus/usb/rwにする)

/etc/apparmor.d/abstractions/libvirt-qemu
  # for usb access
  /dev/bus/usb/ rw,
  /etc/udev/udev.conf r,
  /sys/bus/ r,
  /sys/class/ r,

次に、USBデバイスを使用する仮想マシンのプロファイル/etc/apparmor.d/libvirt/libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxを編集して以下の二行を追記する。

/etc/apparmor.d/libvirt/libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
profile libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx {
  #include <abstractions/libvirt-qemu>
  #include <libvirt/libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.files>

  /dev/bus/usb/*/[0-9]* rw,
  /run/udev/** rw,
}

仮想マシンに対応するプロファイルのUUIDは、virsh dominfo <name>で確認することができるほか、上記のdmesgでもprofile="libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"と出力されている部分で確認できる。

以下のコマンドで編集したプロファイルを更新・反映させる。

sudo apparmor_parser -r /etc/apparmor.d/libvirt/libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

その後、再度仮想マシンを起動するとUSBデバイスへのアクセスが許可されるようになる。

udev

USBデバイス等のためのudevルールファイルを作成する。

PHP

PHP 8.1の設定。 またFastCGIでPHPを使用するための設定など。

mbstringを有効にする

デフォルトではmbstringモジュールがインストールされていないので、インストールする。

php-mbstringのインストール
sudo apt install php-mbstring

/etc/php/8.1/fpm/php.iniあるいは/etc/php/8.1/cli/php.iniを編集して、コメントアウトされているextension=mbstringを有効にする。

/etc/php/8.1/*/php.ini
-;extension=mbstring
+extension=mbstring

phpinfoを表示して、mbstringenabledになっていればOK。

FastCGI

FastCGIでPHPスクリプトを動作させる場合は、/var/run/php/php-fpm.sockを使用する。 nginxの場合は以下のように設定する。

/etc/nginx/sites-enabled/host.conf
server {
    :
    :
  location /index.php {
    # デフォルトの設定をincludeする
    include snippets/fastcgi-php.conf;

    # PHP FPMのunix socketのパスを指定する
    fastcgi_pass unix:/var/run/php/php-fpm.sock;
      :
      :
  }
}

その他のソフトウェアのビルド・インストール