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

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

インストール

Ubuntu 24.04 Desktopのインストーラーでは、LVMパーティションへのインストールができない。

そこで、ここでは一旦Server版をインストールし、その後ubuntu-desktop-minimalをインストールすることでデスクトップを構築する手段をとった。

以下、まずはDesktop版のライブ環境で動作確認・下準備を行い、 その後Server版のインストーラーを使って実際のインストールを行う。

下準備

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

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

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

【Welcome】

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

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

Ubuntu 24.04 live desktop

RAIDアレイの検証

初期状態ではmdadmはインストール済み・RAIDアレイは構築済みとなっている。 インストール時に使用するRAIDアレイがある場合は(再)編成しておく。

mdadmをインストールしてRAIDアレイを再編成する
$cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10] 
md127 : active (auto-read-only) raid1 sdb1[1] sdc1[0]
      1953382464 blocks super 1.2 [2/2] [UU]
      bitmap: 0/15 pages [0KB], 65536KB chunk

unused devices: <none>

$sudo mdadm --detail /dev/md127
/dev/md127:
           Version : 1.2
     Creation Time : Sun Dec 25 16:25:43 2016
        Raid Level : raid1
        Array Size : 1953382464 (1862.89 GiB 2000.26 GB)
     Used Dev Size : 1953382464 (1862.89 GiB 2000.26 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Jul 21 20:53:47 2024
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : ubuntu:raid  (local to host ubuntu)
              UUID : ffffffff:ffffffff:ffffffff:ffffffff
            Events : 93607

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       17        1      active sync   /dev/sdb1

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   1.6G  1 loop  /rofs
loop1                                         7:1    0 457.5M  1 loop  
loop2                                         7:2    0 868.1M  1 loop  
loop3                                         7:3    0     4K  1 loop  /snap/bare/5
loop4                                         7:4    0  74.2M  1 loop  /snap/core22/1380
loop5                                         7:5    0 269.6M  1 loop  /snap/firefox/4173
loop6                                         7:6    0  10.7M  1 loop  /snap/firmware-updater/127
loop7                                         7:7    0 505.1M  1 loop  /snap/gnome-42-2204/176
loop8                                         7:8    0  10.3M  1 loop  /snap/snap-store/1124
loop9                                         7:9    0  91.7M  1 loop  /snap/gtk-common-themes/1535
loop10                                        7:10   0  38.7M  1 loop  /snap/snapd/21465
loop11                                        7:11   0 137.3M  1 loop  /snap/thunderbird/470
loop12                                        7:12   0 116.7M  1 loop  /snap/ubuntu-desktop-bootstrap/171
loop13                                        7:13   0   476K  1 loop  /snap/snapd-desktop-integration/157
loop14                                        7:14   0 116.8M  1 loop  /snap/ubuntu-desktop-bootstrap/231
sda                                           8:0    0 931.5G  0 disk  
├─sda1                                        8:1    0  18.6G  0 part  [SWAP]
├─....
 :
sdd                                           8:48   0 238.5G  0 disk  
├─sdd1                                        8:49   0   5.7G  0 part  /cdrom
├─sdd2                                        8:50   0     5M  0 part  
├─sdd3                                        8:51   0   300K  0 part  
└─sdd4                                        8:52   0 232.8G  0 part  /var/crash
                                                                       /var/log
sde                                           8:64   1   3.8G  0 disk  
└─sde1                                        8:65   1   3.8G  0 part  /media/ubuntu/DCD3-BBD7

パーティショニング

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

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

その他事前の確認・準備

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

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

Ubuntu 24.04 DesktopのインストーラーではLVMパーティションへのインストールができなかったため、ここではServer版のインストーラーでインストールを行った。 Ubuntu 24.04 Serverのインストール手順は省略。

Ubuntu 24.04 Serverのインストール完了後、ubuntu-desktop-minimalをインストールしてデスクトップ環境を構築する。

Ubuntu 24.04 Serverでデスクトップ環境を構築する
$sudo apt install ubuntu-desktop-minimal

必須パッケージのインストール

言語パッケージ相当のパッケージのインストール

メディアからのインストールで言語パッケージもインストールされる場合は、省略可能。

ここでは、言語パッケージに相当するパッケージ類のうち、必要なものだけを個別のインストールする。 以下のコマンドで一括してインストールする。

aptで言語パッケージ相当のパッケージ類をインストールする
$sudo apt install ibus-mozc mozc-utils-gui language-pack-ja language-pack-gnome-ja fonts-noto-cjk-extra libreoffice-l10n-ja
インストールするパッケージと概要
パッケージ名 概要
ibus-mozc IBus 用 Mozc エンジン - Mozc 入力メソッドのクライアント
mozc-utils-gui GUI utilities of the Mozc input method
language-pack-ja translation updates for language Japanese
language-pack-gnome-ja GNOME translation updates for language Japanese
fonts-noto-cjk-extra "No Tofu" font families with large Unicode coverage (CJK all weight)
libreoffice-l10n-ja office productivity suite -- Japanese language package
パッケージ名 概要

必需ツール類のインストール

インストール作業で必要になるツール類を先にインストールする。 以下のコマンドで一括してインストールする。 インストール目的等については省略。

aptで必需ツール類をインストールする
$sudo apt install bridge-utils curl git rsync tree

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

インストールするパッケージと概要
パッケージ名 概要
bridge-utils Linux イーサネットブリッジの設定ユーティリティ
curl URL 文法でデータを転送するコマンドラインツール
git 速く、スケーラブルな分散型リビジョン管理システム
rsync 高速で多目的なリモート (兼ローカル) ファイル複製ツール
tree displays an indented directory tree, in color
パッケージ名 概要

設定ファイルの編集

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

デフォルトエディタ・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 を使います

ターミナル・シェル・エディタ・その他dotfiles等の設定

これはごく個人的な設定をまとめたものであるため、そのまま使用することは推奨しない。

dotfilesを展開する
$git clone --depth 1 https://github.com/smdn/smdn.git smdn-configurations
$cd smdn-configurations/etc/home/smdn/
$./deploy-dotfiles.sh
$./relocate-cache-directories.sh
$confs/git-configure.sh
$confs/dconf/load.sh

ファイルシステムの設定

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

/etc/fstab

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

ネットワークの設定

ここでは、以下とおりにネットワークを設定する。

  • cloud-init, NetworkManagerを無効にし、Netplan + systemd-networkdによる管理に切り替える
  • 静的IPアドレスでのネットワークを設定する
  • ブリッジ接続を設定する

cloud-init・NetworkManagerによるネットワーク設定の管理を無効にする

cloud-initによるNetplan設定ファイルの自動生成を無効化する。

cloud-initによるネットワークの設定を無効化する
$echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

既存のNetplan設定ファイル(/etc/netplan/*.yaml)を削除する。 もしくは、リネームして無効化する。

NetworkManager設定ファイルを無効化する
$sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.disabled

トップバーやメニュー等のGUIに表示されるネットワーク設定を非表示にする。

GUIに表示されるネットワーク設定を非表示にする
$sudo nmcli networking off

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

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

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 listを実行すると、すべてのデバイスとその種類・設定状況などの概略が表示される。

networkctl list
$networkctl list
IDX LINK            TYPE     OPERATIONAL SETUP     
  1 lo              loopback carrier     unmanaged
  2 enp1s0          ether    enslaved    configured
 13 wlx00005e0053ff wlan     routable    configured

3 links listed.

networkctl status デバイス名を実行すると、デバイスの詳細を確認することができる。

networkctl status
$networkctl status enp1s0 --no-pager
● 2: enp1s0                                                                              
                     Link File: /run/systemd/network/10-netplan-enp1s0.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
  IPv6 Address Generation Mode: none
          Queue Length (Tx/Rx): 1/1
              Auto negotiation: yes
                         Speed: 1Gbps
                        Duplex: full
                          Port: tp
             Activation Policy: up
           Required For Online: yes

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

Netplan設定ファイルを作成する

/etc/netplan/ディレクトリにNetplan設定ファイルを作成して、設定を記述する。 ファイル名は任意だが、拡張子は.yamlにする必要がある(*.ymlだと読み込まれない)。

ここでは、設定をいくつかのファイルに分割して記述することとする。 具体的には、次のように分割する。

10-networkd.yaml
versionrendererのみを記述するファイル。 実際にネットワークの設定を行うバックエンド(renderer)としてnetworkdを使用することを指示する。
11-networkd-ethernets.yaml
イーサネットの設定(ethernets)を記述するファイル。

それぞれ次の内容でファイルを作成する。

/etc/netplan/10-networkd.yaml
network:
  version: 2
  renderer: networkd
/etc/netplan/11-networkd-ethernets.yaml
network:
  ethernets:
    enp1s0:
      addresses:
        - 192.168.0.10/24
        - fe80::a/64
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        addresses:
          - 192.168.0.1
          - 1.1.1.1
          - 2606:4700:4700::1111
          - 8.8.8.8
          - 2001:4860:4860::8888
      dhcp4: false
      dhcp6: false

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

作成した設定ファイルのパーミッションを修正し、root以外が読み書きできないようにする。 root以外がアクセス可能な場合でも動作はするが、後述の操作で逐次警告が出力される。

root以外がNetplan設定ファイルを読み書きできないようにする
$sudo chmod og= /etc/netplan/1*-*.yaml

Netplan設定ファイルの内容を適用する

netplan generateでネットワーク設定ファイルの生成, 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 --no-pager
● 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

NetworkManagerを削除する

ここまでの設定でNetworkManagerは使用しなくなるため、不要となる。 インストールされているパッケージも不要ならば、削除する。

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

ブリッジ接続を設定する

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

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

先に作成したNetplan設定ファイルを変更・追加してブリッジ設定を記述する。 ここでは、設定を個別のファイルに分割して記述することとする。 具体的には、次のように分割する。

10-networkd.yaml
versionrendererのみを記述するファイル。 詳細と記載内容は先に作成したを参照のこと。
11-networkd-ethernets.yaml
イーサネットの設定(ethernets)を記述するファイル。
12-networkd-bridges.yaml
ブリッジの設定(bridges)を記述するファイル。

それぞれ次の内容でファイルを作成する。 なお、ブリッジ名はbr0とした。

/etc/netplan/11-networkd-ethernets.yaml
network:
  ethernets:
    enp1s0:
      dhcp4: false
      dhcp6: false
      optional: false
/etc/netplan/12-networkd-bridges.yaml
network:
  bridges:
    br0:
      interfaces: [enp1s0]
      addresses:
        - 192.168.0.10/24
        - fe80::a/64
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        addresses:
          - 192.168.0.1
          - 1.1.1.1
          - 2606:4700:4700::1111
          - 8.8.8.8
          - 2001:4860:4860::8888
      dhcp4: false
      dhcp6: false
      parameters:
        stp: false
        forward-delay: 0

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 --no-pager
● 2: enp1s0                     
                   Link File: /usr/lib/systemd/network/99-default.link
                Network File: /run/systemd/network/10-netplan-enp1s0.network
                       State: enslaved (configured)
                Online state: online                                                   
                        Type: ether
                        Path: XXXXXXXXXXXX
                      Driver: XXXXXXXXXXXX
                      Vendor: XXXXXXXXXXXXXXXXXXXX
                       Model: XXXXXXXXXXXXXXXXXXXX
                  HW Address: xx:xx:xx:xx:xx:xx (XXXXXXXXXXXXXXXXXXXX)
                         MTU: 1500 (min: XXXX, max: XXXX)
                       QDisc: pfifo_fast
                      Master: br0
IPv6 Address Generation Mode: none
    Number of Queues (Tx/Rx): 1/1
            Auto negotiation: yes
                       Speed: 1Gbps
                      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
                       State: routable (configured)
                Online state: online                                         
                        Type: bridge
                        Kind: bridge
                      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
    Number of Queues (Tx/Rx): 1/1
            Auto negotiation: no
                       Speed: 1Gbps
                     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
    inet6 fe80::a/64 scope link 
       valid_lft forever preferred_lft forever

WiFi接続を設定する

WiFi接続を設定する。 まずはWiFiインターフェイスとデバイス名を確認する。 networkctl listを実行して、設定したいWiFiインターフェイスを確認する。

networkctl list
$networkctl list
IDX LINK            TYPE     OPERATIONAL SETUP     
  1 lo              loopback carrier     unmanaged
  2 enp1s0          ether    enslaved    configured
 14 wlx00005e0053ff wlan     routable    configured

3 links listed.

次に、先に作成したNetplan設定ファイルを変更・追加してWiFi設定を記述する。 ここでは、設定を個別のファイルに分割して記述することとする。 具体的には、次のように分割する。

10-networkd.yaml
versionrendererのみを記述するファイル。 詳細と記載内容は先に作成したを参照のこと。
13-networkd-wifi.yaml
WiFi接続の設定(wifis)を記述するファイル。

それぞれ次の内容でファイルを作成する。 なお、ここではWiFiドングルを用いてWiFi接続を行う場合を想定しているので、optional: trueとしている。 また、デバイスのMACアドレスは00:00:5E:00:53:FFで、デバイス名はwlx00005e0053ffであると仮定する。

/etc/netplan/13-networkd-wifi.yaml
network:
  wifis:
    wlx00005e0053ff:
      # デバイスをオプションとして扱う
      # 必須ではないデバイスとすることにより、起動時にデバイスの設定完了までの待機を行わないようになる
      # WiFiドングルなど起動時に使用できない可能性のあるデバイスや、起動に必須ではないデバイスの場合などには、オプションとする
      optional: true
      access-points:
        "SSID":
          # passwordに設定するパスフレーズは、wpa_passphraseコマンドを使って生成することができる
          password: "XXXXXXXXXXXXXXXXXXXXXX"
      link-local: [ipv4, ipv6]
      dhcp4: true
      dhcp6: false
      routes:
       - to: 192.168.10.0/24
         via: 192.168.10.1

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

$sudo netplan --debug generate
** (generate:2754562): DEBUG: 21:19:14.230: wlx00005e0053ff: adding wifi AP 'SSID'
** (generate:2754562): DEBUG: 21:19:14.230: wlx00005e0053ff: adding new route
** (generate:2754562): DEBUG: 21:19:14.230: wlx00005e0053ff: setting default backend to 1
** (generate:2754562): DEBUG: 21:19:14.231: Configuration is valid
** (generate:2754562): DEBUG: 21:19:14.231: Generating output files..
** (generate:2754562): DEBUG: 21:19:14.231: Creating wpa_supplicant config
** (generate:2754562): DEBUG: 21:19:14.231: wlx00005e0053ff: Creating wpa_supplicant configuration file run/netplan/wpa-wlx00005e0053ff.conf
** (generate:2754562): DEBUG: 21:19:14.231: Creating wpa_supplicant unit /run/systemd/system/netplan-wpa-wlx00005e0053ff.service
** (generate:2754562): DEBUG: 21:19:14.235: Creating wpa_supplicant service enablement link /run/systemd/system/systemd-networkd.service.wants/netplan-wpa-wlx00005e0053ff.service
** (generate:2754562): DEBUG: 21:19:14.235: Open vSwitch: definition wlx00005e0053ff is not for us (backend 1)
** (generate:2754562): DEBUG: 21:19:14.235: NetworkManager: definition wlx00005e0053ff is not for us (backend 1)


$sudo netplan apply

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

$networkctl status wlx00005e0053ff --no-pager
● 14: wlx04ab18fd89f2                                                                  
                     Link File: /usr/lib/systemd/network/73-usb-net-by-mac.link
                  Network File: /run/systemd/network/10-netplan-wlx00005e0053ff.network
                          Type: wlan
                         State: routable (configured)
                  Online state: unknown
                          Path: XXXXXXXXXXXX
                        Driver: XXXXXXXXXXXX
                        Vendor: XXXXXXXXXXXXXXXXXXXX
                         Model: XXXXXXXXXXXXXXXXXXXX
                    HW Address: 00:00:5e:00:53:ff
                           MTU: 1500 (min: XXXX, max: XXXX)
                         QDisc: noqueue
  IPv6 Address Generation Mode: eui64
             WiFi access point: SSID (00:00:5e:00:53:01)
          Queue Length (Tx/Rx): 1/1
                       Address: 192.168.10.12 (DHCP4 via 192.168.10.1)
                                fe80::xxxx:xxxx:xxxx:xxxx
                       Gateway: 192.168.10.1
                           DNS: XXX.XXX.XXX.XXX
                                XXX.XXX.XXX.XXX
                           NTP: XXX.XXX.XXX.XXX
             Activation Policy: up
           Required For Online: no
               DHCP4 Client ID: IAID:0xXXXX/DUID
             DHCP6 Client DUID: DUID-EN/Vendor:XXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

ip addressの出力例
$ip address show dev enp1s0
14: wlx00005e0053ff: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:00:5e:00:53:ff brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.12/22 metric 600 brd 192.168.10.255 scope global dynamic wlx00005e0053ff
       valid_lft 5550sec preferred_lft 5550sec
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link 
       valid_lft forever preferred_lft forever

システムの設定

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="noquiet nosplash intel_iommu=on"
GRUB_CMDLINE_LINUX=""

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

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

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

update-grub2の実行例
$sudo update-grub2 
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.0-38-generic
Found initrd image: /boot/initrd.img-6.8.0-38-generic
Found memtest86+x64 image: /memtest86+x64.bin
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
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で確認できる。

NTPサーバーの設定

初期設定ではntp.ubuntu.comと同期するようになっている。 systemctl status systemd-timesyncdでStatusを確認すると、ntp.ubuntu.comに接続したことが確認できる。

systemd-timesyncdの状態を表示する
$systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-07-29 06:39:07 JST; 49min ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 1598 (systemd-timesyn)
     Status: "Contacted time server [2620:2d:4000:1::40]:123 (ntp.ubuntu.com)."
      Tasks: 2 (limit: 38066)
     Memory: 1.8M (peak: 2.3M)
        CPU: 80ms
     CGroup: /system.slice/systemd-timesyncd.service
             └─1598 /usr/lib/systemd/systemd-timesyncd

/etc/systemd/timesyncd.confを編集して、NTPサーバーを設定する。 ここではNICTの公開NTPサーバーであるntp.nict.jpを使用する。

/etc/systemd/timesyncd.conf
[Time]
NTP=ntp.nict.jp

設定を変更したら、再起動する。 少し時間が経過してからstatusを確認すると、設定を反映した動作になっているか確認することができる。

systemd-timesyncdを再起動し、状態を表示する
$sudo systemctl restart systemd-timesyncd.service

$systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-07-29 07:31:37 JST; 4s ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 25590 (systemd-timesyn)
     Status: "Contacted time server [2001:df0:232:eea0::fff4]:123 (ntp.nict.jp)."
      Tasks: 2 (limit: 38066)
     Memory: 1.4M (peak: 2.1M)
        CPU: 74ms
     CGroup: /system.slice/systemd-timesyncd.service
             └─25590 /usr/lib/systemd/systemd-timesyncd

その他の設定

/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>

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

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

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

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

不要なaptパッケージの削除
sudo apt purge \
  aisleriot \
  aspell aspell-en \
  bluez bluez-cups bluez-obexd \
  brltty \
  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 \
  gamemode gamemode-daemon \
  gnome-accessibility-themes \
  gnome-calendar gnome-mahjongg gnome-mines gnome-sudoku \
  gnome-online-accounts \
  hplip hplip-data '^printer-driver-.*' \
  modemmanager \
  mythes-en-au mythes-en-us \
  ntfs-3g '^libntfs-.*' \
  nano \
  network-manager \
  openprinting-ppds \
  ppp pptp-linux \
  rygel \
  sane-utils sane-airscan libsane-hpaio \
  simple-scan \
  shotwell '^shotwell-.*' \
  speech-dispatcher speech-dispatcher-audio-plugins \
  system-config-printer-common system-config-printer-udev \
  totem totem-common totem-plugins \
  wamerican wbritish

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

削除するパッケージと概要
パッケージ名 概要
aisleriot GNOME ソリティアカードゲーム集
aspell GNU aspell スペルチェッカ
aspell-en GNU Aspell 用英語辞書
bluez Bluetooth 用ツールとデーモン
bluez-cups Bluetooth printer driver for CUPS
bluez-obexd bluez obex daemon
brltty 点字ディスプレイを使う視覚障害者のためのアクセスソフトウェア
cups Common UNIX Printing System(tm) - PPD/ドライバサポート、web インターフェース
cups-browsed OpenPrinting 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
gamemode Optimise Linux system performance on demand
gamemode-daemon Optimise Linux system performance on demand (daemon)
gnome-accessibility-themes High Contrast GTK 2 theme and icons
gnome-calendar GNOME 用カレンダーアプリケーション
gnome-mahjongg classic Eastern tile game for GNOME
gnome-mines popular minesweeper puzzle game for GNOME
gnome-sudoku Sudoku puzzle game for GNOME
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 サービス
mythes-en-au Australian English Thesaurus for OpenOffice.org
mythes-en-us English (USA) Thesaurus for LibreOffice
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 ライブラリ - ユーティリティ
sane-airscan SANE backend for AirScan (eSCL) and WSD document scanner
libsane-hpaio HP の複合機用 SANE バックエンド
simple-scan シンプルなスキャンユーティリティ
shotwell デジタル写真オーガナイザ
'^shotwell-.*' digital photo organizer - common files
speech-dispatcher Common interface to speech synthesizers
speech-dispatcher-audio-plugins Audio output plugins
system-config-printer-common backend and the translation files for system-config-printer
system-config-printer-udev プリンタの自動検出と設定を行う各種ユーティリティ
totem GStreamer ベースで GNOME デスクトップ向けのシンプルなメディアプレイヤ
totem-common Totem メディアプレイヤーのデータファイル
totem-plugins Plugins for the Totem media player
wamerican /usr/share/dict 用米国英語単語リスト
wbritish /usr/share/dict 用英国英語単語リスト
パッケージ名 概要

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

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

使用するaptパッケージのインストール
sudo apt install \
  alsa-utils \
  apt-transport-https \
  build-essential pkgconf libboost-dev \
  brasero \
  bridge-utils \
  clang \
  cmake \
  chromium-browser \
  curl \
  dotnet8 \
  '^fonts-ipafont.*' '^fonts-ipaexfont.*' fonts-monapo fonts-mikachan fonts-wine \
  gedit-plugins \
  gimp \
  git \
  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-node munin-plugins-core munin-plugins-extra \
  nethogs \
  nginx-extras \
  nkf \
  nodejs \
  partitionmanager \
  php-fpm php-mbstring fcgiwrap \
  postfix \
  samba \
  smartmontools \
  software-properties-common \
  swig \
  synaptic \
  tree \
  ufw \
  virt-manager \
  vlc \
  wine-stable \
  xclip

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

インストールするパッケージと概要
パッケージ名 概要
alsa-utils ALSA の設定や利用のためのユーティリティ群
apt-transport-https transitional package for https support
build-essential build-essential なパッケージの一覧情報
pkgconf ライブラリのコンパイルフラグとリンクフラグを管理
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 文法でデータを転送するコマンドラインツール
dotnet8 .NET CLI tools and runtime
'^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 速く、スケーラブルな分散型リビジョン管理システム
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 tool for managing Linux MD devices (software RAID)
mozc-utils-gui GUI utilities of the Mozc input method
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
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
ufw program for managing a Netfilter firewall
virt-manager 仮想マシン管理用デスクトップアプリケーション
vlc マルチメディアプレイヤおよびストリーマ
wine-stable Windows API implementation (transitional package)
xclip X セレクションへのコマンドラインインターフェイス
パッケージ名 概要

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

ここでは以下のMicrosoft製ソフトウェアをMicrosoftのリポジトリからインストールする。

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

Microsoft製品リポジトリのrepo config packageをインストールする。

packages.microsoft.comのrepo config packageをインストールする
$curl -sSL -O https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb
$sudo dpkg -i packages-microsoft-prod.deb
以前に未選択のパッケージ packages-microsoft-prod を選択しています。
(データベースを読み込んでいます ... 現在 122498 個のファイルとディレクトリがインストールされています。)
packages-microsoft-prod.deb を展開する準備をしています ...
packages-microsoft-prod (1.1-ubuntu24.04) を展開しています...
packages-microsoft-prod (1.1-ubuntu24.04) を設定しています ...

$rm packages-microsoft-prod.deb

必要ならパッケージリストを更新する
$sudo apt update

このあと参照するMicrosoft製品のkeyringが所定の場所にインストールされているか確認する。

packages.microsoft.comのrepo config packageをインストールする
$ls -l /usr/share/keyrings/microsoft-prod.gpg
-rw-r--r-- 1 root root 641  3月 12 07:07 /usr/share/keyrings/microsoft-prod.gpg

/etc/apt/sources.list.d/に各パッケージ取得元を記述したsource.listファイルを追加する。 先に確認したkeyringへのパスをsigned-byにて指定する。

各パッケージの所得元を記述したsource.listを追加する
Visual Studio Code
$sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

Microsoft Edge
$sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge.list'

PowerShell等を含む、その他のパッケージ
$sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/ubuntu/24.04/prod noble main" > /etc/apt/sources.list.d/microsoft-prod.list'

パッケージ情報を取得して、インストールできるかどうか、参照元に問題ないかなど確認する。

パッケージ情報を確認する
パッケージリストを更新する
$sudo apt update

Visual Studio Codeのパッケージ情報を表示する
$apt show code

Microsoft Edge (stable)のパッケージ情報を表示する
$apt show microsoft-edge-stable

PowerShellのパッケージ情報を表示する
$apt show powershell

2024-07-06時点では、PowerShellは「パッケージは見つからない」というエラーとなる。 手動で.debパッケージからインストールする場合は、libicuとの依存関係を解決する必要がある模様。

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

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

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

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

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

2024-07-06時点では、PowerShellは「パッケージは見つからない」というエラーとなる。 手動で.debパッケージからインストールする場合は、libicuとの依存関係を解決する必要がある模様。

GitHub CLIのインストール

GitHub CLIのkeyringをダウンロードする。 ここでは/usr/share/keyrings/に配置する。

GitHub CLIのkeyringをインストールする
$sudo wget -q https://cli.github.com/packages/githubcli-archive-keyring.gpg -O /usr/share/keyrings/githubcli-archive-keyring.gpg
$sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg

/etc/apt/sources.list.d/にパッケージ取得元を記述したsource.listファイルを追加する。 先にダウンロードしたkeyringへのパスをsigned-byにて指定する。

パッケージの所得元を記述したsource.listを追加する
$sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list'

パッケージ情報を取得して、インストールできるかどうか、参照元に問題ないかなど確認する。

パッケージ情報を確認する
パッケージリストを更新する
$sudo apt update

GitHub CLIのパッケージ情報を表示する
$apt show gh

インストールする。

GitHub CLIのインストール
$sudo apt install gh

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

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

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

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

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

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

$sudo apt update && sudo apt dist-upgrade

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

$sudo apt autoremove

再起動

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

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

デスクトップ設定の復元

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

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

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

設定

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

[Ubuntu Desktop]タブ
Dock
Dockの設定をカスタマイズする
Configure Dock Behavior
「マウントしていないボリュームを含む」のチェックを外す
[通知]タブ
「ロック画面での通知」をオフにする
[電源管理]タブ
[省電力]
[画面のブランク]
「しない」に設定、または以下のコマンドで長時間に指定
[キーボード]タブ
[入力ソース]
「日本語(Mozc)」の優先度を上げる
[アクセシビリティ]タブ
[Text Cursor]
[Cursor Blinking]
オンにする
[Blink Speed]
カーソルの点滅速度を適度な値に変更する
[タイピング支援]
[Repeat Keys]
オンにして、繰り返しキー入力の時間と速度を適度な値に変更する
[システム]タブ
[Date & Time]
[日時書式]
24-hour(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)を起動して設定を編集する。

[ウィンドウ]タブ
[Click Actions]
[ウィンドウ操作キー]
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("signon.rememberSignons", false); // ウェブサイトのログイン情報とパスワードを保存しない

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

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

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

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

Firefoxのプロファイル選択ダイアログを開く
$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

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

[全般]
[一覧表示でフォルダーをツリー表示可能にする]
オンにする
[パフォーマンス]
[Search in Subfolders]
「On This Computer Only」を選択する
[Show Thumbnails]
「On This Computer Only」を選択する
[Count Number of Files in Folders]
「On This Computer Only」を選択する

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

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

システムモニタアプレット(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をインストールする。

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

開発環境の設定

ufw

ufwを有効にする。

ufwを有効にする
$sudo ufw enable
ファイアウォールはアクティブかつシステムの起動時に有効化されます。

以降、適宜ルールを追加する。

Postfix

他のリレーサーバを使用するSatellite systemとして構成する場合は、インストール中に表示されるウィザードで次のように入力する。

General mail configuration type
4 (Satellite system)
System mail name
Postfix設定ファイルにおけるmyhostnameに設定する名前を指定する
SMTP relay host (blank for none)
Postfix設定ファイルにおけるrelayhostに設定する名前を指定する

/etc/postfix/main.cfを編集し、smtpd_relay_restrictions, smtp_helo_name, inet_interfacesなどを調整する。 その他、詳細は省略。

/etc/postfix/main.cf
smtpd_relay_restrictions = permit_mynetworks
smtp_helo_name = mail.example.com
inet_interfaces = loopback-only

設定をリロードする。

Postfixの設定をリロードする
$sudo service postfix reload

/etc/aliases

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

/etc/aliases
postmaster:    root
root: root@mail.example.com
user: user@mail.example.com

上記の内容をもとに、/etc/aliases.dbを更新する。

/etc/aliases.dbを作成・更新する
$sudo newaliases

Logwatch

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

Logwatchを実行し、結果をroot宛にメールで送信する
$sudo logwatch --detail high --mailto root

/etc/cron.daily/00logwatchを編集し、--detailオプションを追加するなどして、cronで生成されるリポートを調整する。 --detailオプションでは、システムに応じてlow, med,highなど適当な詳細度を設定する。

/etc/cron.daily/00logwatch
 #execute
-/usr/sbin/logwatch --output mail
+/usr/sbin/logwatch --detail low --output mail

munin-node

設定ファイルを編集して、Munin masterが動作するマシンからアクセスできるようにする。

/etc/munin/munin-node.conf
allow ^192\.168\.0\.123$

Munin masterが動作するマシンから、munin-nodeに接続できるかtelnetを使ってテストする。

munin-nodeへの接続テスト
$telnet 192.168.0.1 4949
Trying 192.168.0.1...
Connected to munin-node.example.com.
Escape character is '^]'.
munin node at munin-node.example.com
nodes
munin-node.example.com
.
.
Connection closed by foreign host.

/etc/munin/pluginsディレクトリにリンクを追加・削除して、必要なプラグインを追加、もしくは不要なプラグインを削除する。

Muninプラグインの有効化・無効化
$cd /etc/munin/plugins/

必要なプラグインの追加
$sudo ln -s /usr/share/munin/plugins/xxx

不要なプラグインの削除
$sudo unlink xxx

munin-nodeを再起動する。

munin-nodeを再起動する
$sudo service munin-node restart

git-daemon

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

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

git-daemon用のユーザーとグループを作成する
$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; preset: enabled)
     Active: active (running) since Sat 2024-07-27 03:07:33 JST; 4s ago
   Main PID: 12785 (git-daemon)
      Tasks: 1 (limit: 38066)
     Memory: 1.1M (peak: 1.3M)
        CPU: 17ms
     CGroup: /system.slice/git-daemon.service
             └─12785 /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; preset: enabled)
     Active: active (running) since Sat 2024-07-27 03:07:33 JST; 23s ago
   Main PID: 12785 (git-daemon)
      Tasks: 1 (limit: 38066)
     Memory: 1.1M (peak: 1.3M)
        CPU: 17ms
     CGroup: /system.slice/git-daemon.service
             └─12785 /usr/lib/git-core/git-daemon --export-all --reuseaddr --enable=receive-pack --base-path=/srv/repos/git

Gitクライアント

§.ターミナル・シェル・エディタ・その他dotfiles等の設定を参照。

gitweb

ここではnginxでgitwebを動作させる。

gitwebはgitパッケージをインストールすることで/usr/share/gitweb/配下にインストールされる。 nginx+FastCGIでgitwebを動作させるなら、gitwebパッケージをインストールする必要はない。

nginxの設定ファイルに以下のような設定を書く。 ここではURL/gitweb/以下にgitwebを展開することとする。 また、gitwebの設定ファイル(GITWEB_CONFIG)は/etc/gitweb.confに配置されるものとしている。

nginxでgitwebを動作させる設定
  location /gitweb/ {
    allow 192.168.0.0/24;
    index gitweb.cgi;

    location ~ ^/gitweb/static/(.*)$ {
      alias /usr/share/gitweb/static/$1;
    }

    location ~ ^/gitweb/ {
      gzip off;

      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi;
      fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
      fastcgi_pass unix:/var/run/fcgiwrap.socket;
    }
  }

次にGITWEB_CONFIGで指定した設定ファイル/etc/gitweb.confを作成する。

/etc/gitweb.conf
$projectroot = "/path/to/git/repos/";
$project_maxdepth = 2;
$git_temp = "/tmp";

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

ホストのシャットダウン時にKVMゲストもシャットダウンさせる

/etc/default/libvirt-guestsを編集する。

/etc/default/libvirt-guests
# 以下の行を有効にする
# shutdownではなくsuspendにすると、ゲストをサスペンドさせる動作になる
ON_SHUTDOWN=shutdown

# ゲストのシャットダウンが並行する場合の、最大数を調整する
PARALLEL_SHUTDOWN=10

# ゲストのシャットダウンの最大待機時間を調整する
SHUTDOWN_TIMEOUT=60

ゲスト側では、acpidを有効にすることで、ホスト側からのシャットダウン要求に従わせる。

ゲスト側でacpidを有効にする
$sudo apt install acpid
$sudo systemctl start acpid
$sudo systemctl enable acpid

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"と出力されている部分で確認できる。

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

AppArmorプロファイルを再読込する
$sudo apparmor_parser -r /etc/apparmor.d/libvirt/libvirt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

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

udev

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

PHP

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

mbstringを有効にする

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

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

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

/etc/php/8.3/*/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;
      :
      :
  }
}

トラブルシューティング・未解決問題

Show Apps ボタンが反応しない

Dock上の「Show Apps」ボタンをクリックしても、アプリ一覧やワークスペース一覧が表示されない状態になった場合について。

journalctl /usr/bin/gnome-shellでログを確認すると、「Show Apps」ボタンを押すたびに以下のようなログが出力される。

Show Appsが表示されないときのgnome-shellのログ
10月 22 21:42:54 ubuntu gnome-shell[3439]: JS ERROR: TypeError: "ANIMATION_TIME" is read-only
                                            _onShowAppsButtonToggled/<@file:///usr/share/gnome-shell/extensions/ubuntu-dock@ubuntu.com/docking.js:2484:21
                                            @resource:///org/gnome/shell/ui/init.js:21:20

この場合、micheleg/dash-to-dock #2112でコメントされている対処法を参考に、以下のコマンドを実行するとエラーが解消する。

Show Appsが表示されないときの対処
$gsettings set org.gnome.shell.extensions.dash-to-dock animate-show-apps true