初心者向けAlpine Linuxガイド:インストールと基本操作


超軽量Linuxの入門ガイド:初心者向けAlpine Linux インストールと基本操作

はじめに:Alpine Linuxの世界へようこそ

「Linux」と聞くと、サーバー用途や開発環境、あるいはデスクトップ環境として利用される、UbuntuやFedora、Debianといったディストリビューションを思い浮かべる方が多いかもしれません。しかし、Linuxの世界は非常に広く、特定の目的に特化したユニークなディストリビューションも数多く存在します。その中でも、近年特に注目を集めているのが「Alpine Linux」です。

Alpine Linuxは、その驚異的な「軽さ」「シンプルさ」「セキュリティ」を最大の特徴とするLinuxディストリビューションです。わずか数十MBのサイズで、コンテナ環境のベースイメージ、組み込みシステム、ネットワーク機器、最小限のサーバーなど、多岐にわたる分野で利用されています。

なぜAlpine Linuxが初心者にとって学ぶ価値があるのでしょうか?
* 軽量性: 最小限のコンポーネントで構成されているため、起動が速く、リソース消費が少ないです。これにより、古いハードウェアやリソースが限られた環境でも快適に動作します。
* シンプルさ: 複雑な設定や余分な機能がなく、基本的なLinuxの仕組みを学ぶのに適しています。システムがどのように構成されているのか、比較的容易に理解できます。
* セキュリティ: Musl libcというライブラリの使用や、Position Independent Executables (PIE) によるコンパイルをデフォルトとしていることなど、セキュリティに配慮した設計がなされています。
* コンテナとの親和性: Dockerなどのコンテナ技術において、ベースイメージとして非常に広く利用されています。コンテナ技術を学ぶ上でも、Alpine Linuxの知識は大きな助けとなります。

本ガイドは、Linux初心者の方や、他のディストリビューションは使ったことがあるけれどもAlpine Linuxは初めて、という方を対象としています。Alpine Linuxのインストール方法から、基本的なコマンド操作、パッケージ管理、サービスの管理など、日常的に利用するために必要な基礎知識を、ステップバイステップで丁寧に解説していきます。

さあ、軽量でセキュアなAlpine Linuxの世界への第一歩を踏み出しましょう。

Alpine Linuxの概要:なぜ「軽い」「セキュア」「シンプル」なのか?

Alpine Linuxのユニークな特徴を掘り下げてみましょう。これらの特徴が、他の一般的なLinuxディストリビューションとは異なる、Alpine Linux独自の魅力と強みを生み出しています。

1. Musl libcの使用

多くのLinuxディストリビューションがGNU C Library (glibc) を使用しているのに対し、Alpine LinuxはMusl libcを使用しています。Musl libcは、glibcよりも軽量でシンプル、かつセキュリティに焦点を当てて設計されています。

  • メリット:
    • バイナリサイズが小さくなるため、システム全体のサイズが削減されます。
    • シンプルで理解しやすいコードベース。
    • 静的リンクが容易であり、アプリケーションの依存関係を減らすことができます(ただし、Alpineの標準パッケージは動的リンクが主です)。
  • 初心者への影響: glibcベースのシステムでビルドされた一部のアプリケーションやライブラリは、Musl libc環境ではそのまま動作しない場合があります。これは、特に互換性の問題として現れる可能性がありますが、一般的な用途やAlpineのリポジトリにあるパッケージを使う限り、大きな問題になることは少ないです。

2. BusyBoxの採用

Alpine Linuxは、BusyBoxという単一の実行ファイルに多くの標準的なUNIXコマンド(ls, cd, cp, mv, rm, grep, awkなど)をまとめて実装しています。BusyBoxは、最小限のリソースで多くの機能を提供するために設計されており、「組み込みシステムのSwiss Army Knife(スイスアーミーナイフ)」とも呼ばれます。

  • メリット:
    • システムサイズが大幅に削減されます。
    • 起動が高速化されます。
    • コマンドの挙動が標準的なGNUツールとは微妙に異なる場合がありますが、基本的な機能は網羅しています。
  • 初心者への影響: 慣れ親しんだGNUコマンドとはオプションや挙動が異なる場合があるため、BusyBoxのヘルプ (command --help) を確認することが重要です。ただし、日常的な基本的な操作では大きな違いを感じることは少ないでしょう。

3. OpenRCによるサービスの管理

多くのモダンなLinuxディストリビューションがsystemdを採用しているのに対し、Alpine LinuxはOpenRCというinitシステムを使用しています。OpenRCは、systemdよりもシンプルで軽量、そしてUNIX哲学に忠実であるとされています。

  • メリット:
    • 起動プロセスがシンプルで理解しやすいです。
    • 設定ファイルがテキストベースで編集しやすいです。
    • 依存関係に基づいたサービスの起動・停止を効率的に行います。
  • 初心者への影響: サービスを管理するためのコマンド(rc-service, rc-updateなど)がsystemdとは異なります。本ガイドで詳しく解説しますので、安心して学習できます。

4. セキュリティへの配慮

  • Position Independent Executables (PIE): デフォルトで全てのバイナリがPIEとしてコンパイルされており、ASLR (Address Space Layout Randomization) と組み合わせることで、メモリ上の攻撃(バッファオーバーフローなど)に対する耐性を高めています。
  • Stack-smashing Protection (SSP): スタックオーバーフロー攻撃を検出するための技術が有効になっています。
  • 最小構成: 必要最低限のソフトウェアのみが含まれているため、攻撃対象となる領域が物理的に小さくなります。

これらの特徴により、Alpine Linuxは非常に小さく、速く、そして安全なシステムを構築できます。

5. 用途例

Alpine Linuxは、その特性から以下のような様々な用途で活躍しています。

  • コンテナ (Docker, Kubernetesなど): 非常に軽量なベースイメージとして圧倒的な人気を誇ります。最終的なコンテナイメージのサイズを劇的に小さくできます。
  • 組み込みシステム: リソースが限られたデバイスや機器に最適です。
  • ルーター・ファイアウォール: 最小限のシステムでネットワーク機能を実現できます。
  • 最小限のサーバー: ウェブサーバー(Nginx, Caddyなど)、SSHサーバー、データベースなど、特定のサービスを動かすための軽量な基盤として。
  • 開発環境: 必要なツールだけをインストールしたクリーンな環境を手軽に構築できます。

これらの特徴を理解することで、なぜAlpine Linuxが特定の分野で重宝されるのか、そしてこれから学ぶ内容がどのように役立つのかが見えてくるでしょう。

インストール準備:Alpine Linuxを動かしてみよう

Alpine Linuxを実際にインストールして動かすための準備を始めましょう。最も手軽な方法は、仮想マシンを利用することです。ここでは仮想マシンでのインストールを前提に解説を進めますが、実機やUSBメモリへのインストールにも応用できる内容です。

1. 必要なもの

  • コンピュータ: Alpine Linuxをインストールする対象となるコンピュータ。仮想マシンを使う場合は、その上で仮想マシンソフトウェアが動作するコンピュータ。
  • 仮想マシンソフトウェア: VirtualBox (無料), VMware Workstation Player (無料/有料), VMware Fusion (有料), KVM/QEMU (無料) など。この記事ではVirtualBoxを例に解説します。
  • Alpine Linux ISOイメージ: Alpine Linuxの公式サイトからダウンロードします。
  • インターネット接続: インストール中にパッケージのダウンロードなどが必要になります。

2. Alpine Linux ISOイメージのダウンロード

Alpine Linuxの公式サイト(https://www.alpinelinux.org/downloads/)にアクセスします。

いくつかのエディションがありますが、初心者の方は「Standard」または「Extended」を選ぶのが良いでしょう。
* Standard: コアシステムと基本的なツールが含まれています。必要最小限で始めたい場合。
* Extended: Standardに加えて、より多くのソフトウェア(開発ツール、デスクトップ環境のベースなど)が含まれています。すぐに様々なツールを使いたい場合に便利ですが、サイズはStandardより大きくなります。
* Other images: その他のエディション(ディスクレス、仮想マシンイメージ、クラウドイメージなど)がありますが、最初はStandardかExtendedで十分です。

お使いのコンピュータのアーキテクチャに合ったISOイメージをダウンロードしてください。一般的なPCであればx86_64を選択します。ダウンロードは、直接リンクをクリックするか、BitTorrentを利用できます。

例:alpine-standard-3.18.4-x86_64.iso (バージョンやアーキテクチャによってファイル名は変わります)

3. 仮想マシンの設定 (VirtualBoxの場合)

VirtualBoxを起動し、「新規」をクリックして新しい仮想マシンを作成します。

  • 名前: 任意 (例: AlpineLinuxTest)
  • フォルダー: 仮想マシンを保存する場所
  • ISO Image: ダウンロードしたAlpine LinuxのISOイメージを選択
  • Type: Linux
  • Version: Other Linux (64-bit) を選択します。

次に、ハードウェアリソースを設定します。

  • Base Memory: 少なくとも512MB以上を推奨します。1GBあれば快適でしょう。
  • Processors: 1 CPUで十分です。
  • Hard Disk: 「Create a Virtual Hard Disk Now」を選択し、作成します。
    • File Location: 任意
    • Size: 8GB以上を推奨します。これはシステムとインストールするソフトウェアのための領域です。
    • Hard Disk File Type: VDI (VirtualBox Disk Image) が一般的です。
    • Storage on physical hard disk: Dynamically Allocated (容量可変) または Fixed Size (容量固定) のどちらでも構いませんが、Dynamically Allocatedの方がストレージ容量を節約できます。

設定が完了したら、「完了」をクリックして仮想マシンを作成します。

作成した仮想マシンを選択し、「設定」をクリックして必要に応じて追加の設定を行います。
* システム > マザーボード: 起動順序を「光学ドライブ」が最初になるように設定します。
* ネットワーク > アダプター 1: NATまたはブリッジアダプターなど、環境に合ったネットワーク設定を選択します。インターネットに接続できれば、NATでも問題ありません。

これでインストール準備は完了です。仮想マシンを起動して、インストールに進みましょう。

インストール手順:Alpine Linuxをインストールする

仮想マシン(または実機/USBブート)を起動すると、Alpine Linuxのブートメニューが表示されます。

Syslinux 6.03 EDD 20181106 Copyright (C) 1994-2015 H. Peter Anvin et al
boot:

ここで何もせずに待っていると、自動的に最初の項目 (lts または virt) が起動します。通常はそのまま起動して問題ありません。Enterキーを押しても起動します。

システムが起動すると、以下のようなログインプロンプトが表示されます。

“`
Alpine Linux 3.x
Kernel x.x.x-lts on an x86_64 (tty1)

localhost login:
“`

デフォルトでは、rootユーザーがパスワードなしでログインできます。

localhost login: root
Welcome to Alpine Linux 3.x
(長いWelcomeメッセージ...)
localhost:~#

これで、Alpine LinuxがRAM上に起動し、ライブ環境として動作しています。この状態でも基本的なコマンドを実行できますが、システムを永続化するためにはストレージへのインストールが必要です。

インストールは、setup-alpineコマンドを実行することで行います。これは対話形式のスクリプトで、様々な設定を行いながらインストールを進めます。

bash
localhost:~# setup-alpine

スクリプトが開始され、順に設定項目が尋ねられます。各項目について詳しく見ていきましょう。

  1. Select keyboard layout:
    キーボードレイアウトを選択します。日本語キーボードの場合は jp と入力し、Enterキーを押します。

  2. Select variant:
    キーボードバリアントを選択します。通常はデフォルトのままEnterキーを押します。

  3. Enter system hostname:
    システムのホスト名(コンピュータの名前)を入力します。例: alpine-server または my-alpine

  4. Initialize networking:
    ネットワーク設定を行います。利用可能なネットワークインターフェース(例: eth0, enp0s3など)が表示されます。設定したいインターフェース名を入力します。

  5. Available interfaces are: eth0 lo
    Enter interface name for dhcp setup:
    DHCPでIPアドレスを取得する場合、インターフェース名を入力します(例: eth0)。静的IPを設定したい場合は、インターフェース名の後に -static を付けます(例: eth0 -static)。本ガイドではDHCPを例に進めます。

    DHCPを選択した場合、ネットワーク設定は自動で行われます。

    手動設定 (Static IP) の場合:
    インターフェース名に -static を付けてEnterを押すと、IPアドレス、ネットマスク、デフォルトゲートウェイ、DNSサーバーなどが順に尋ねられます。
    * Enter IP address for eth0: 192.168.1.100/24 (例: IPアドレスとCIDR表記のネットマスク)
    * Enter gateway for eth0: 192.168.1.1 (例: デフォルトゲートウェイのIPアドレス)
    * Enter desired nameserver(s): 8.8.8.8 8.8.4.4 (例: DNSサーバーのIPアドレスをスペース区切りで複数指定可能)

  6. Setting up IP addresses:
    指定したIPアドレスが設定されます。

  7. Enter root password:
    rootユーザーのパスワードを設定します。セキュリティのため、必ずパスワードを設定してください。2回入力を求められます。

  8. Enter timezone:
    タイムゾーンを設定します。例: Asia/Tokyo と入力します。入力中にTabキーで補完が効きます。

  9. HTTP/FTP proxy URL? (none):
    プロキシサーバーを利用している場合はURLを入力します。通常は空欄のままEnter。

  10. Enter mirror number (1-x) or URL:
    パッケージをダウンロードするためのミラーサーバーを選択します。日本国内のサーバーを選択すると高速です。例えば、1 と入力してEnterを押すと、国内のミラーがリストされることがあります。または、f と入力して高速なミラーを自動選択させることもできます。通常はデフォルトのままEnterで最も近いミラーが自動選択されます。

  11. Which SSH server to install? (‘openssh’ or ‘none’):
    SSHサーバーをインストールするか尋ねられます。リモートから接続したい場合は openssh と入力します。ローカルでしか使わない場合は none でも構いません。初心者であれば、後でインストールすることも可能です。

  12. Which NTP client to run? (‘busybox’, ‘openntpd’, ‘chrony’ or ‘none’):
    時刻同期を行うNTPクライアントを選択します。busybox または openntpd が一般的です。通常はデフォルトのままEnter。

  13. Enter disk name or installation path (or ‘?’):
    システムをインストールするディスクを選択します。利用可能なディスクデバイス(例: sda, vdaなど)が表示されます。仮想マシンの場合は、仮想ハードディスクとして設定したデバイス名を入力します(例: sda または vda)。分からない場合は ? と入力するとリストが表示されます。

  14. How would you like to use it? (‘sys’, ‘data’, ‘virt’ or ‘lvm’):
    ディスクの使い方(インストールモード)を選択します。ここはAlpine Linuxの重要な特徴の一つです。

    • sys: システム全体をディスクにインストールします。一般的なLinuxディストリビューションのインストール方法に近いです。システムの変更は再起動後も維持されます。初心者にはこのモードが最も分かりやすいでしょう。
    • data: システムはRAM上で動作し(ディスクレスモード)、設定ファイルやユーザーデータのみをこのディスクに保存します。システムのコア部分はISOイメージや別の場所からロードされます。再起動するとRAM上のシステムは初期状態に戻りますが、設定やデータは維持されます。
    • virt: sys モードに似ていますが、仮想マシン環境に最適化されており、最小限のセットアップで起動します。軽量な仮想アプライアンスを構築するのに向いています。
    • lvm: Logical Volume Management (LVM) を使用してインストールします。

    初心者の方は sys モードを選択するのが最も簡単です。 sys と入力してEnterを押します。

  15. WARNING: The following partitions inside /dev/vda will be erased: vda1 vda2 …
    WARNING: The whole disk /dev/vda will be erased.
    選択したディスク上のデータが全て消去されるという警告が表示されます。問題なければ y と入力して続行します。

  16. Erasing /dev/vda…
    ディスクのパーティション情報が消去されます。

  17. Creating partitions on /dev/vda…
    選択したモード (sys) に従って、必要なパーティション(ルートパーティション、スワップ領域など)が自動的に作成・フォーマットされます。

  18. Installing system on /dev/vda (/dev/vdaX)…
    システムファイルがディスクにコピーされます。

  19. Installing APKCACHE on /dev/vda (/dev/vdaY)…
    APKパッケージマネージャーのキャッシュ領域が設定されます。

  20. Installing bootloader on /dev/vda…
    GRUBなどのブートローダーがディスクのマスターブートレコード (MBR) またはEFIシステムパーティションにインストールされます。

  21. Configuration finished.
    インストールが完了しました。

bash
localhost:~# reboot

インストールが完了したら、reboot コマンドでシステムを再起動します。仮想マシンの場合は、起動時にISOイメージからブートしないように、仮想CD/DVDドライブからISOイメージを取り出すのを忘れないでください(VirtualBoxの場合、「デバイス」>「光学ドライブ」メニューから「ディスクイメージを除去」を選択)。

再起動後、ディスクにインストールされたAlpine Linuxが起動します。ログインプロンプトが表示されたら、インストール時に設定したrootパスワードを使用してログインします。

“`
Alpine Linux 3.x
Kernel x.x.x-lts on an x86_64 (tty1)

alpine-server login: root
Password:
Welcome to Alpine Linux 3.x
alpine-server:~#
“`

これで、永続的なAlpine Linux環境のインストールが完了しました!

基本的な操作:システムを触ってみよう

インストールしたAlpine Linuxにログインできたら、基本的な操作を試してみましょう。

1. ログインとログアウト

  • ログイン: ログインプロンプトでユーザー名 (root など) とパスワードを入力します。
    login: root
    Password: <入力>
  • ログアウト: シェルで exit または logout コマンドを実行します。rootでログインしている場合は、ログアウトするとログインプロンプトに戻ります。
    bash
    alpine-server:~# exit

2. シェルの基本

Alpine Linuxのデフォルトシェルは、BusyBoxに含まれるash (Almquist shell) または hush (hudson shell) です。これらはbashなどの高機能なシェルに比べてシンプルですが、基本的なコマンド実行やスクリプト記述には十分です。必要であれば、後述のパッケージ管理を使ってbashやzshなどをインストールすることも可能です。

  • プロンプト: 通常は ユーザー名@ホスト名:現在のディレクトリ# (rootの場合) または ユーザー名@ホスト名:現在のディレクトリ$ (一般ユーザーの場合) の形式です。
    例: alpine-server:~# (rootユーザー、ホームディレクトリ ~)

3. ファイルシステム構造

Alpine Linuxのファイルシステム構造は、他の多くのLinuxディストリビューションと似ていますが、BusyBoxの利用により一部のディレクトリ構成が異なります。

  • /bin, /sbin, /usr/bin, /usr/sbin: 多くの実行ファイルが含まれますが、BusyBoxによって提供されるコマンドへのシンボリックリンクであることが多いです。
  • /etc: システム設定ファイルが置かれます (/etc/apk (APK設定), /etc/network (ネットワーク設定), /etc/conf.d (OpenRCサービス設定) など)。
  • /home: 一般ユーザーのホームディレクトリが作られます。
  • /root: rootユーザーのホームディレクトリです。
  • /var: 可変データ(ログファイル/var/log、キャッシュ/var/cache/apkなど)が置かれます。
  • /tmp: 一時ファイル用ディレクトリ(再起動で消去されます)。
  • /proc, /sys: カーネルやハードウェアに関する情報が格納される仮想ファイルシステムです。

4. よく使うコマンド

BusyBoxが提供する基本的なコマンドを使ってみましょう。

  • 現在のディレクトリを表示:
    bash
    alpine-server:~# pwd
    /root

  • ファイルやディレクトリの一覧を表示:
    bash
    alpine-server:~# ls

    詳細な一覧を表示するには -l オプションを使います。
    bash
    alpine-server:~# ls -l

  • ディレクトリの移動:
    bash
    alpine-server:~# cd /etc
    alpine-server:/etc# pwd
    /etc

    ホームディレクトリに戻るには cd または cd ~ を使います。
    bash
    alpine-server:/etc# cd
    alpine-server:~#

  • 新しいディレクトリを作成:
    bash
    alpine-server:~# mkdir mydir
    alpine-server:~# ls
    mydir

  • ファイルをコピー:
    bash
    alpine-server:~# cp /etc/resolv.conf .
    alpine-server:~# ls
    mydir resolv.conf

    (カレントディレクトリに/etc/resolv.confをコピー)

  • ファイルを移動または名前変更:
    bash
    alpine-server:~# mv resolv.conf resolv.conf.backup
    alpine-server:~# ls
    mydir resolv.conf.backup

  • ファイルを削除:
    bash
    alpine-server:~# rm resolv.conf.backup
    alpine-server:~# ls
    mydir

    ディレクトリを削除するには -r オプションが必要です(中身もまとめて削除)。
    bash
    alpine-server:~# rm -r mydir
    alpine-server:~# ls

  • ファイルの閲覧:
    bash
    alpine-server:~# cat /etc/hostname
    alpine-server

    長いファイルを表示するには moreless を使いますが、BusyBoxには more のみが含まれています。
    bash
    alpine-server:~# more /etc/apk/repositories

  • コマンドのヘルプ:
    BusyBoxコマンドの簡単なヘルプを見るには --help オプションを使います。
    bash
    alpine-server:~# ls --help

    BusyBoxが提供する全コマンドを見るには、引数なしで busybox を実行します。
    bash
    alpine-server:~# busybox

5. root権限の利用 (suコマンド)

インストール直後のAlpine Linuxでは、デフォルトでrootユーザーのみが作成されています。したがって、特別な権限昇格コマンド (sudo) は不要です。

もし一般ユーザーを作成した場合(後述)、rootユーザー以外のユーザーでログインした際は、root権限が必要なコマンドを実行するために su コマンドを使用します。

bash
myuser@alpine-server:~$ su -
Password: <rootのパスワードを入力>
alpine-server:~#

- オプションを付けると、rootユーザーの環境変数やホームディレクトリに切り替わります。権限が必要な作業が終わったら exit で元のユーザーに戻ります。

デフォルトでは sudo コマンドはインストールされていません。必要であれば後述のパッケージ管理でインストールし、設定ファイルを編集することで利用可能になります。

6. テキストエディタ (vinano)

設定ファイルの編集など、テキストエディタは必須です。Alpine LinuxにはデフォルトでBusyBox版のviが含まれています。これは標準的なVimやViとは機能が限られますが、基本的な編集は可能です。

  • BusyBox vi の使い方:
    bash
    alpine-server:~# vi testfile.txt

    • 起動したら、最初はコマンドモードです。
    • 入力モードに切り替えるには i (insert) または a (append) キーを押します。
    • 文字を入力します。
    • コマンドモードに戻るには Esc キーを押します。
    • 保存して終了するにはコマンドモードで :wq と入力しEnter。
    • 保存せずに終了するにはコマンドモードで :q! と入力しEnter。

より使いやすいエディタとして、nano がよく使われます。nano はパッケージとして提供されているため、インストールが必要です。インストール方法は後述のパッケージ管理で説明します。

“`bash

nanoをインストール (rootで実行)

alpine-server:~# apk add nano

nanoでファイルを編集

alpine-server:~# nano testfile.txt
``nanoは画面下部に操作ガイドが表示され、Ctrlキーと組み合わせて直感的に操作できます(例:Ctrl+Xで終了、Ctrl+O` で保存)。

パッケージ管理:APKを使ってみる

Alpine Linuxの大きな魅力の一つは、シンプルで高速なパッケージ管理システムである「APK」です。APKは、.apk という形式のパッケージファイルを扱います。

1. APKパッケージマネージャーとは

APKは「Alpine Package Keeper」の略称です。C言語で書かれており、依存関係の解決やパッケージのインストール、アップグレード、削除などを効率的に行います。apkコマンド一つで多くの操作が可能です。

2. リポジトリの設定

APKは、インターネット上のリポジトリからパッケージ情報を取得し、パッケージファイルをダウンロードします。リポジトリの設定は /etc/apk/repositories ファイルで行います。

このファイルには、使用するリポジトリのURLが記述されています。デフォルトでは、インストール時に選択したミラーサーバーのURLが設定されています。

“`bash
alpine-server:~# cat /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/v3.18/main
http://dl-cdn.alpinelinux.org/alpine/v3.18/community

http://dl-cdn.alpinelinux.org/alpine/v3.18/testing

“`
(バージョン番号はインストールしたバージョンによります)

通常、main リポジトリと community リポジトリが有効になっています。
* main: Alpine Linuxの開発者が保守する、中核となるパッケージ。
* community: コミュニティによって保守される、より多くのパッケージ。
* testing: テスト中のパッケージ(通常は無効)。

コメントアウトされている行(#で始まる行)は無効です。必要に応じて有効にしたり、独自のミラーURLを追加したりできます。

3. 基本的なAPKコマンド

パッケージ管理のための基本的なコマンドを学びましょう。以下の操作はrootユーザーで行う必要があります。

  • リポジトリのインデックスを更新:
    パッケージリストを最新の状態に保つために、新しいパッケージやアップデート情報を取得します。パッケージの検索やインストールを行う前に実行するのが推奨されます。
    bash
    alpine-server:~# apk update
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
    v3.18.4-34-g25a42d2c41 [http://dl-cdn.alpinelinux.org/alpine/v3.18/main]
    v3.18.4-34-g25a42d2c41 [http://dl-cdn.alpinelinux.org/alpine/v3.18/community]
    OK: 20910 distinct packages available

  • パッケージの検索:
    インストールしたいパッケージがあるか検索します。パッケージ名の一部やキーワードで検索できます。
    bash
    alpine-server:~# apk search nano
    nano-7.2-r0

    説明文も含めて検索するには -d オプションを使います。
    bash
    alpine-server:~# apk search -d "text editor"
    ...
    nano-7.2-r0 - A small and friendly text editor
    ...

  • パッケージ情報の表示:
    特定のパッケージの詳細情報(バージョン、説明、依存関係など)を表示します。
    “`bash
    alpine-server:~# apk info nano
    nano-7.2-r0 description:
    A small and friendly text editor

    nano-7.2-r0 webpage:
    https://www.nano-editor.org/

    nano-7.2-r0 installed size:
    778240

    nano-7.2-r0 dependencies:
    ncurses-terminfo-base
    libncursesw
    libc.musl
    “`

  • パッケージのインストール:
    指定したパッケージとその依存関係にあるパッケージをインストールします。複数のパッケージをスペース区切りで指定できます。
    bash
    alpine-server:~# apk add nano vim
    (1/3) Installing libncursesw (6.4.20230429-r0)
    (2/3) Installing nano (7.2-r0)
    (3/3) Installing vim (9.0.1671-r0)
    Executing busybox-1.36.1-r2.trigger
    OK: 15 MiB in 28 packages

  • インストール済みパッケージの一覧表示:
    システムにインストールされている全てのパッケージを表示します。
    bash
    alpine-server:~# apk info --installed
    ... (インストール済みパッケージのリスト) ...

  • パッケージの削除:
    指定したパッケージを削除します。依存関係にある他のパッケージが不要になった場合、それらも自動的に削除されるか尋ねられることがあります。
    bash
    alpine-server:~# apk del nano
    (1/1) Removing nano (7.2-r0)
    OK: 15 MiB in 27 packages

  • システム全体のアップグレード:
    インストールされている全てのパッケージを、リポジトリの最新バージョンにアップグレードします。apk update の後に実行するのが一般的です。
    bash
    alpine-server:~# apk upgrade

  • ローカルAPKファイルのインストール:
    インターネットに接続されていない環境などで、ダウンロード済みの.apkファイルをインストールすることも可能です。
    bash
    alpine-server:~# apk add /path/to/package.apk

4. パッケージグループ

Alpine Linuxでは、関連する複数のパッケージをまとめた「パッケージグループ」が提供されています。例えば、ソフトウェアのビルドに必要なツール群をまとめてインストールしたい場合に便利です。

  • パッケージグループの検索:
    bash
    alpine-server:~# apk search -a alpine-sdk
    alpine-sdk - Alpine Software Development Kit

  • パッケージグループのインストール:
    bash
    alpine-server:~# apk add alpine-sdk

    これにより、コンパイラ(gcc)、make、デバッガ(gdb)など、開発に必要な多くのツールが一度にインストールされます。

APKは非常に高速で効率的であり、Alpine Linuxをカスタマイズする上で中心的な役割を果たします。

サービスの管理:OpenRCを理解する

Alpine Linuxは、サービスの起動、停止、管理にOpenRCを使用します。systemdに慣れている方にとっては異なるコマンド体系になりますが、OpenRCはシンプルで理解しやすい仕組みです。

1. OpenRCとは

OpenRCは、依存関係に基づいてサービスを正しい順序で起動・停止するためのinitシステムです。設定ファイルは /etc/init.d/ ディレクトリにサービスごとにシェルスクリプトとして置かれ、/etc/conf.d/ ディレクトリには各サービスの追加設定ファイルが置かれます。

2. runlevel

OpenRCはrunlevelという概念を使用します。runlevelはシステムの動作状態を定義します。
* sysinit: システム初期化
* boot: 起動時の最小限のサービス
* default: 通常の動作状態(ほとんどのサービスがここで起動)
* shutdown: システム停止
* その他に、ユーザー定義のrunlevelを作成することも可能です。

default runlevelで起動するサービスは、通常 /etc/runlevels/default/ ディレクトリに、サービススクリプトへのシンボリックリンクが作成されます。

3. 基本的なOpenRCコマンド

サービスを管理するための基本的なコマンドは rc-servicerc-update です。

  • サービスの状況確認:
    システム全体または特定のサービスの状況(起動中か停止中か、どのrunlevelで起動するかなど)を確認します。
    bash
    alpine-server:~# rc-status
    Runlevel: default
    cron [ started ]
    ...
    sshd [ started ]
    ...

    または特定のサービスについて確認:
    bash
    alpine-server:~# rc-service sshd status
    sshd is running

  • サービスの起動:
    指定したサービスを開始します。既に起動している場合はエラーになるか、何も起こりません。
    “`bash
    alpine-server:~# rc-service sshd start

    • Starting sshd … [ ok ]
      “`
  • サービスの停止:
    指定したサービスを停止します。
    “`bash
    alpine-server:~# rc-service sshd stop

    • Stopping sshd … [ ok ]
      “`
  • サービスの再起動:
    指定したサービスを停止し、再度起動します。設定ファイルを変更した場合などに便利です。
    “`bash
    alpine-server:~# rc-service sshd restart

    • Stopping sshd … [ ok ]
    • Starting sshd … [ ok ]
      “`
  • サービスの自動起動設定:
    指定したサービスを特定のrunlevelで自動起動するように設定します。通常は default runlevelに追加します。これにより、システム起動時にそのサービスが自動的に開始されるようになります。
    “`bash
    alpine-server:~# rc-update add sshd default

    • Adding sshd to default runlevel
      ``
      このコマンドは、
      /etc/runlevels/default/ディレクトリに/etc/init.d/sshd` へのシンボリックリンクを作成します。
  • サービスの自動起動解除:
    特定のrunlevelでのサービスの自動起動設定を解除します。
    “`bash
    alpine-server:~# rc-update del sshd default

    • Deleting sshd from default runlevel
      ``
      これにより、
      /etc/runlevels/default/sshd` のシンボリックリンクが削除されます。
  • 自動起動設定の一覧表示:
    各runlevelで自動起動するように設定されているサービスの一覧を表示します。
    bash
    alpine-server:~# rc-update show
    boot:
    local S
    default:
    acpid S
    crond S
    networking S
    syslog S
    udev S
    udev-post S
    sshd S
    shutdown:
    mount-ro S
    killprocs S
    save-rp S

    SはSymlink (自動起動設定済み) を意味します。

4. サービスの設定ファイル

多くのサービスは、/etc/conf.d/ ディレクトリに設定ファイルを持っています。例えば、ネットワーク設定は /etc/conf.d/networking、sshdの設定は /etc/conf.d/sshd に追加情報を記述できる場合があります(ただし、sshdの主要な設定は /etc/ssh/sshd_config です)。

これらのファイルはシェルスクリプト形式で、変数に値を設定することでサービスの挙動をカスタマイズします。

OpenRCはsystemdに比べてコマンドは異なりますが、その仕組みは比較的シンプルで分かりやすいため、初心者でも慣れやすいでしょう。

ネットワーク設定:外部と通信する

システムが外部と通信するためには、ネットワークの設定が必要です。Alpine Linuxでは、主に /etc/network/interfaces ファイルでネットワークインターフェースを設定します。また、名前解決のために /etc/resolv.conf が使用されます。

1. 有線LANの設定 (/etc/network/interfaces)

/etc/network/interfaces ファイルは、システム起動時にネットワークインターフェースがどのように設定されるかを定義します。OpenRCの networking サービスがこのファイルを読み込んで設定を適用します。

基本的な書式は以下のようになります。

“`ini
auto lo
iface lo inet loopback

auto eth0 # システム起動時にeth0を自動的に有効にする
“`

ここで、eth0 はネットワークインターフェース名です。環境によっては enp0s3 など異なる名前の場合があります。インターフェース名は ip addr コマンドなどで確認できます。

  • DHCPで設定する場合:
    最も一般的な設定方法です。DHCPサーバーから自動的にIPアドレス、ネットマスク、ゲートウェイ、DNSサーバーを取得します。
    /etc/network/interfaceseth0 の設定部分を以下のようにします。
    ini
    auto eth0
    iface eth0 inet dhcp

    この設定で、networking サービスを再起動すればDHCPでIPアドレスを取得します。
    bash
    alpine-server:~# rc-service networking restart

  • 静的IPアドレスで設定する場合:
    IPアドレス、ネットマスク、ゲートウェイなどを手動で設定します。
    /etc/network/interfaceseth0 の設定部分を以下のようにします。
    ini
    auto eth0
    iface eth0 inet static
    address 192.168.1.100/24 # IPアドレスとネットマスク (CIDR表記)
    gateway 192.168.1.1 # デフォルトゲートウェイ

    設定を反映させるには、networking サービスを再起動します。

ネットワークインターフェースの状態確認には ip addr show <interface> または ifconfig <interface> コマンドが使えます(ifconfig はBusyBoxに含まれています)。

bash
alpine-server:~# ip addr show eth0

2. 名前解決 (/etc/resolv.conf)

ホスト名(例: google.com)をIPアドレスに変換する(名前解決)ためのDNSサーバーは、/etc/resolv.conf ファイルで設定します。

DHCPでネットワーク設定を行った場合、通常DHCPサーバーから取得したDNSサーバー情報が自動的にこのファイルに書き込まれます。

静的IPで設定した場合や、手動で特定のDNSサーバーを使用したい場合は、/etc/resolv.conf を直接編集します。

bash
alpine-server:~# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

nameserver の後にDNSサーバーのIPアドレスを記述します。複数指定する場合は、1行に1つずつ書きます。

3. SSHサーバー (OpenSSH)

リモートからAlpine Linuxに接続したい場合は、SSHサーバーをインストールして起動する必要があります。インストール時にOpenSSHを選択しなかった場合は、APKを使ってインストールします。

bash
alpine-server:~# apk add openssh

インストール後、OpenSSHサーバー (sshd) サービスを起動し、自動起動を設定します。

bash
alpine-server:~# rc-service sshd start
alpine-server:~# rc-update add sshd default

これで、他のコンピュータからSSHクライアントを使ってAlpine Linuxに接続できるようになります。接続時のユーザー名はroot、パスワードはインストール時に設定したrootパスワードです。

注意: rootユーザーでのSSHログインはセキュリティ上のリスクがあるため、運用時には別途一般ユーザーを作成し、そのユーザーでログインした後に必要に応じて susudo でroot権限を取得する、あるいは公開鍵認証を設定するなどの対策を検討してください。

SSHサーバーの設定ファイルは /etc/ssh/sshd_config です。ポート番号の変更やrootログインの許可/不許可などの設定を行えます。変更後は rc-service sshd restart でサービスを再起動して設定を反映させます。

ユーザーと権限:システムの利用者を管理する

セキュリティを考慮すると、日常的な操作はrootユーザーではなく、必要最低限の権限を持つ一般ユーザーで行うのが良い習慣です。ここでは、一般ユーザーの作成と、権限管理の基本について説明します。

1. 一般ユーザーの作成 (adduser)

新しいユーザーを作成するには adduser コマンドを使用します。

bash
alpine-server:~# adduser myuser

adduser コマンドは対話形式でユーザー名、パスワード、シェル、ホームディレクトリなどの情報を尋ねてきます。通常はデフォルト値で問題ありません。

Changing ownership of /home/myuser
Enter new password for myuser: <パスワードを入力>
Retype new password for myuser: <パスワードを再入力>
passwd: password updated for myuser

これで myuser という新しいユーザーが作成され、ホームディレクトリ /home/myuser が作成されます。

2. ユーザーの削除 (deluser)

ユーザーアカウントを削除するには deluser コマンドを使用します。

bash
alpine-server:~# deluser myuser

ユーザーのホームディレクトリも一緒に削除したい場合は --remove-home オプションを付けます。
bash
alpine-server:~# deluser --remove-home myuser

3. グループの管理 (addgroup, delgroup)

Linuxでは、ユーザーは一つまたは複数のグループに所属します。グループを利用することで、複数のユーザーに対してまとめてファイルやディレクトリへのアクセス権限を設定できます。

  • グループの作成:
    bash
    alpine-server:~# addgroup mygroup

  • グループの削除:
    bash
    alpine-server:~# delgroup mygroup

4. ユーザーをグループに追加/削除

  • ユーザーをグループに追加:
    bash
    alpine-server:~# adduser myuser mygroup

    既存のユーザーを既存のグループに追加します。

  • ユーザーをグループから削除:
    bash
    alpine-server:~# deluser myuser mygroup

ユーザーがどのグループに所属しているかは id <username> または groups <username> コマンドで確認できます。

bash
alpine-server:~# id myuser
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser)

(デフォルトでは、ユーザー名と同名のプライマリグループが作成され、そこに所属します。)

5. suコマンドによるroot権限の取得

前述の通り、一般ユーザーでログインした場合に一時的にroot権限でコマンドを実行するには su - コマンドを使います。rootパスワードが必要です。

6. sudoのインストールと設定 (オプション)

他のディストリビューションで一般的な sudo コマンドを使いたい場合は、APKでインストールする必要があります。

bash
alpine-server:~# apk add sudo

sudo を設定するには、visudo コマンドを使って /etc/sudoers または /etc/sudoers.d/ ディレクトリ内のファイルを編集します。visudo コマンドは文法チェックを行ってくれるため、設定ミスを防ぐことができます。

例えば、myuser というユーザーが全てのコマンドをrootとして実行できるようにするには、visudo を実行し、ファイルに以下の行を追加します(ファイル末尾など)。

myuser ALL=(ALL) ALL
この設定は強力すぎることが多いので、実際の運用では実行できるコマンドを限定するなど、より厳密な設定を行います。sudo の設定はセキュリティに関わるため、誤った設定はシステムに深刻な問題を引き起こす可能性があります。初心者の方は、まずは su - の利用から始めるのが安全でしょう。

設定ファイルの編集方法(vi または nano)を先に習得しておいてください。

ファイルシステムとディスク:ストレージを管理する

システムのストレージ(ディスクパーティション)の管理も重要な基本操作です。

1. ディスク情報の確認

システムが認識しているディスクデバイスやパーティション、ファイルシステムの情報を確認できます。

  • ディスクデバイス、パーティション、マウントポイントなどの一覧:
    bash
    alpine-server:~# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
    vda 254:0 0 8G 0 disk
    |-vda1 254:1 0 7.9G 0 part /
    `-vda2 254:2 0 64M 0 part [SWAP]

    (例: 仮想マシンの場合 /dev/vda という8GBのディスクがあり、/にマウントされた/dev/vda1パーティションと、スワップ領域として使われている/dev/vda2パーティションがあることが分かります。)

  • ディスクのパーティションテーブル情報:
    bash
    alpine-server:~# fdisk -l /dev/vda

    または parted -l コマンドも利用できます(parted は別途インストールが必要です)。

  • 各パーティションのディスク使用量:
    bash
    alpine-server:~# df -h
    Filesystem Size Used Available Use% Mounted on
    /dev/vda1 7.8G 388.8M 7.4G 5% /
    tmpfs 248.6M 0 248.6M 0% /dev/shm
    /dev/sr0 57.3M 57.3M 0 100% /media/sr0

    (//dev/vda1 にマウントされており、使用量などが表示されています。)

2. マウントとアンマウント

外部ストレージ(USBメモリなど)や追加のパーティションを利用するには、「マウント」という操作が必要です。マウントとは、特定のディレクトリ(マウントポイント)にファイルシステムを関連付け、ファイルシステムの内容をそのディレクトリ経由でアクセスできるようにすることです。

  • マウント:
    bash
    alpine-server:~# mount /dev/sdb1 /mnt/usb

    (例: /dev/sdb1 というパーティションを /mnt/usb ディレクトリにマウント)
    マウントポイントとなるディレクトリは事前に作成しておく必要があります (mkdir /mnt/usb)。
    ファイルシステムタイプを自動で認識できない場合は -t <fstype> オプションで指定します(例: -t vfat for FAT32)。

  • アンマウント:
    マウントを解除するには umount コマンドを使います。マウントポイントまたはデバイス名を指定します。
    bash
    alpine-server:~# umount /mnt/usb

    または
    bash
    alpine-server:~# umount /dev/sdb1

    アンマウントできない場合は、そのデバイスやディレクトリを使用しているプロセスがいないか確認してください。fuser -mv /mnt/usb などのコマンドで確認できます。

  • 現在マウントされているファイルシステムの一覧:
    bash
    alpine-server:~# mount

3. スワップ領域の設定

スワップ領域は、物理メモリ(RAM)が不足した場合に一時的にデータを書き出すためのディスク上の領域です。インストール時に設定していれば自動的に有効になりますが、後から追加したり、設定を確認したりできます。

  • スワップ領域の状態確認:
    bash
    alpine-server:~# swapon --show
    NAME TYPE SIZE USED PRIO
    /dev/vda2 partition 64M 0B -2

    または free -h コマンドでスワップの使用状況も確認できます。
    bash
    alpine-server:~# free -h
    total used free shared buff/cache available
    Mem: 497Mi 129Mi 261Mi 0.0B 105Mi 368Mi
    Swap: 64Mi 0B 64Mi

  • スワップ領域の有効化:
    既存のパーティションまたはファイル(スワップファイル)をスワップ領域として有効にします。
    “`bash
    # パーティションの場合
    alpine-server:~# swapon /dev/vda2

    スワップファイルの場合 (事前にファイル作成・フォーマットが必要)

    alpine-server:~# swapon /swapfile
    “`

  • スワップ領域の無効化:
    bash
    alpine-server:~# swapoff /dev/vda2

4. /etc/fstab の編集

システム起動時に自動的にマウントしたいファイルシステムや、スワップ領域を自動で有効にしたい場合は、/etc/fstab ファイルに設定を記述します。

ファイルの書式は以下の通りです。

“`

“`

例:
* ルートファイルシステム (/):
/dev/vda1 / ext4 rw,relatime 0 0
* スワップ領域:
/dev/vda2 swap swap defaults 0 0
* CD/DVDドライブ (例):
/dev/sr0 /media/cdrom auto noauto,owner,ro 0 0
(auto はファイルシステムタイプを自動検出、noauto は起動時に自動マウントしない、owner は所有者権限でのマウントを許可、ro は読み取り専用)
* ネットワークファイルシステム (例: NFS – NFSクライアントインストールが必要):
server:/share /mnt/share nfs defaults 0 0

/etc/fstab を編集したら、設定が正しいか mount -a コマンドでテストできます。エラーが出なければ設定は正しく、次の起動から有効になります。

ログファイル:システムの状況を把握する

システムに何が起きているか、エラーが発生していないかなどを確認するには、ログファイルを参照するのが重要です。

1. ログファイルの場所

多くのLinuxシステムと同様に、Alpine Linuxのログファイルは /var/log/ ディレクトリに格納されます。しかし、Alpine LinuxのデフォルトのシステムロガーはSyslogdではなくBusyBoxに含まれるlogreadであることが多いです。

  • 主要なログファイル:
    • /var/log/messages: システムメッセージ、カーネルメッセージ、デーモンからのログなど、多くの情報が含まれます。
    • /var/log/boot.log: システム起動時のメッセージ。
    • /var/log/auth.log (または /var/log/secure): 認証に関するログ(ログイン試行など)。
    • /var/log/dmesg: カーネルからのブートメッセージ。dmesg コマンドで表示される内容がここに保存されます(永続化設定が必要な場合あり)。

2. ログの確認方法

  • dmesgコマンド:
    カーネルのブートメッセージを表示します。ハードウェアの検出状況やドライバに関するエラーなどを確認するのに役立ちます。
    bash
    alpine-server:~# dmesg

    メッセージが長い場合は、moregrep と組み合わせて使います。
    bash
    alpine-server:~# dmesg | more
    alpine-server:~# dmesg | grep eth0

  • logreadコマンド:
    BusyBoxのシステムロガーが記録したメッセージを表示します。
    bash
    alpine-server:~# logread

    リアルタイムで新しいログを表示するには -f オプションを使います。
    bash
    alpine-server:~# logread -f

  • cat/more/lessコマンド:
    /var/log/ ディレクトリ内のテキストファイル形式のログファイルを直接閲覧します。
    bash
    alpine-server:~# cat /var/log/messages
    alpine-server:~# more /var/log/auth.log

3. ログローテーション

ログファイルは時間の経過とともに大きくなるため、定期的に新しいファイルに切り替えたり、古いファイルを削除したりする「ログローテーション」が行われます。Alpine Linuxでは logrotate パッケージ(必要に応じてインストール)や、BusyBoxの機能、またはシンプルにcronで定期的に古いログを削除するスクリプトを実行するなどしてログを管理します。

シャットダウンと再起動:システムを安全に終了する

システムを安全に終了または再起動するには、適切なコマンドを使用することが重要です。これにより、実行中のプロセスが正常に終了し、データの損失を防ぐことができます。

  • 再起動:
    システムを再起動します。
    bash
    alpine-server:~# reboot

  • シャットダウン/電源オフ:
    システムをシャットダウンして電源を切ります。
    bash
    alpine-server:~# poweroff

    または
    bash
    alpine-server:~# halt

  • 指定時刻にシャットダウン/再起動:
    shutdown コマンドを使うと、指定した時刻や遅延時間後にシャットダウンまたは再起動を行うことができます。

    • すぐにシャットダウン:
      bash
      alpine-server:~# shutdown -h now
    • 10分後にシャットダウン:
      bash
      alpine-server:~# shutdown -h +10
    • 特定の時刻にシャットダウン (例: 23時00分):
      bash
      alpine-server:~# shutdown -h 23:00
    • すぐに再起動:
      bash
      alpine-server:~# shutdown -r now
    • シャットダウン/再起動をキャンセル:
      予約したシャットダウン/再起動をキャンセルします。
      bash
      alpine-server:~# shutdown -c

これらのコマンドは通常root権限で実行します。

まとめ:Alpine Linuxの旅を終えて、そしてこれから

このガイドでは、Alpine Linuxのインストールから、BusyBoxコマンドを使った基本的なファイル操作、APKパッケージマネージャーによるソフトウェアの管理、OpenRCによるサービスの制御、そしてネットワーク設定、ユーザー管理、ディスク管理、ログ確認、システム終了方法まで、初心者の方がAlpine Linuxを使い始めるために必要な基礎知識を網羅しました。

Alpine Linuxは、その軽量性、シンプルさ、セキュリティの高さから、特定の分野で非常に強力なツールとなります。特にコンテナ技術との組み合わせは絶妙であり、最小限のリソースで効率的なアプリケーション実行環境を構築できます。

本ガイドで学んだことは、Alpine Linuxを使いこなすための出発点です。ここからさらに学習を進めることで、Alpine Linuxの持つ可能性を最大限に引き出すことができるでしょう。

  • さらなる学習のためのリソース:
    • Alpine Linux公式ドキュメント: https://wiki.alpinelinux.org/ – 最も信頼できる情報源です。特定の機能や設定について深く知りたい場合は参照しましょう。
    • Alpine Linuxコミュニティ: フォーラムやメーリングリスト、IRCチャンネルなどがあります。問題に直面した場合や疑問点がある場合に質問したり、他のユーザーと交流したりできます。
    • BusyBoxヘルプ: 多くのコマンドの --help オプションや busybox コマンド自体を実行して、利用可能な機能を確認しましょう。
    • OpenRCドキュメント: OpenRCの詳細な仕組みや設定について知りたい場合に参照します。

Alpine Linuxは、他のLinuxディストリビューションとは異なる部分がありますが、基本的なLinuxの概念(ファイルシステム、プロセス、サービスなど)は共通です。他のディストリビューションでの経験も活かせますし、逆にAlpine Linuxで学んだシンプルな仕組みは、他のシステムを理解する上でも役立つでしょう。

軽量でセキュアなAlpine Linuxの世界での探索を楽しんでください!


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール