mgmmyBlog

Webエンジニア👩‍💻 Railsの話がメインです。

【LPIC101】Linuxのインストールとパッケージ管理:Debianパッケージ管理①

f:id:mgmmy:20200607170805p:plain

LPICの勉強を兼ねて、Ping−tで学習したことをまとめています✍️

Linuxのインストールとパッケージ管理

Debianパッケージ管理

Linuxで使用するパッケージとは

  • ソフトウェアの実行ファイル、設定ファイル、ライブラリ、マニュアルなどが含まれているファイルのこと。
  • パッケージおよびその管理ツールを使用することによって、ソフトウェアのインストール・アンインストールなどが容易にできるようになる。

Debianディストリビューションで使用されるパッケージ

  • Debian形式(拡張子は deb )がある。
  • パッケージファイル名は以下のような形式。

パッケージ名_バージョン番号-リリース番号_アーキテクチャ名.deb

例:bind_9.3.6-4_i386.deb

パッケージ管理ツールの種類

dpkgツール

  • Debian系パッケージを管理する基本的なツール。
  • 設定ファイルは /etc/dpkg/dpkg.cfg

主なコマンドは以下

dpkg コマンド
  • Debian形式のパッケージのインストール・アンインストールなど、基本的なパッケージ管理を行う。
  • RPMLinuxでは、rpm がほぼ同等のコマンドにあたる。
書式と主なオプション・アクション

dpkg [オプション] アクション

オプション 説明
-E 同バージョンが既にインストールされていればインストールを行わない
-G 新バージョンが既にインストールされていればインストールを行わない
-R ディレクトリを再帰的に処理
アクション 説明
-i(--install) パッケージファイル名 パッケージのインストール
-r(--remove) パッケージ名 設定ファイルを残してパッケージをアンインストール
-P(--purge) パッケージ名 設定ファイルも含め完全にパッケージをアンインストール
-l(--list) [検索パターン] インストール済みパッケージを検索して表示
-L(--listfiles) パッケージ名 指定したパッケージからインストールされたファイルを一覧表示
-s(--status) パッケージ名 インストール済みパッケージの詳細情報の表示
-S(--search) 検索パターン 指定したファイルがどのパッケージからインストールされたかを表示
-C(--audit) インストールが完了していない(不完全)パッケージの表示
dpkg-reconfigure コマンド
  • インストール済みのパッケージを再設定する。

APTツール

  • dpkgツールを拡張 したツール群
  • インターネット上ないしはメディア上のパッケージ情報のデータベースを使い、依存関係を調整しながらパッケージ管理を行う。
  • パッケージの取得元(リポジトリ)は /etc/apt/sources.list ファイルで設定する。

主なコマンドは以下

apt-get コマンド
  • パッケージのインストール・アンインストールなどを行う。
  • RPMLinuxでは、yum がほぼ同等のコマンドにあたる。
書式と主なサブコマンド

apt-get [オプション] サブコマンド

サブコマンド 説明
install パッケージ名 パッケージのインストールまたはアップグレード
remove パッケージ名 パッケージのアンインストール
upgrade インストール済みの全パッケージのアップグレード
dist-upgrade ディストリビューションを最新版にアップグレード
update パッケージのデータベースを最新版に更新
clean 過去に取得したパッケージファイルを削除
apt-cache コマンド
  • Debian形式のパッケージ情報の検索・参照を行う
書式と主なサブコマンド

apt-cache サブコマンド

サブコマンド 説明
search キーワード キーワードを含むパッケージを検索
show パッケージ名 指定したパッケージ情報の表示
showpkg パッケージ名 指定したパッケージの被依存関係を含めた情報の表示
depends パッケージ名 指定したパッケージが依存しているパッケージの一覧表示
apt コマンド
  • apt-getapt-cache の機能を統合したコマンド

【LPIC101】Linuxのインストールとパッケージ管理:共有ライブラリの管理

f:id:mgmmy:20200531131858p:plain

LPICの勉強を兼ねて、Ping−tで学習したことをまとめています✍️

Linuxのインストールとパッケージ管理

共有ライブラリの管理

ライブラリとは

  • 汎用性の高いプログラムを再利用可能な形にしてまとめたもの。
  • 単独で実行することはなく、他のプログラムに組み込んで呼び出して利用する。
  • 複数のプログラムから参照して使えるようにしたものを 共有ライブラリ と呼ぶ。

etc/ld.so.conf ファイル

  • 共有ライブラリの検索パスが記述されている。

etc/ld.so.cashe ファイル

  • 共有ライブラリを検索するためのバイナリファイル。
  • バイナリファイルであるため、etc/ld.so.conf ファイルより早く検索できる。

ldconfig コマンド

  • 共有ライブラリのキャッシュファイルを更新する。
  • etc/ld.so.conf ファイルを参照し、etc/ld.so.cashe ファイルを更新(作成)する。

/lib/usr/lib ディレクト

  • 一般的に使用される共有ライブラリが格納される。
  • 64ビット版は /lib/64usr/lib64 に格納される。

共有ライブラリを /lib /usr/lib ディレクトリ以外に配置する場合は、以下のいずれかの方法で共有ライブラリの検索パスを設定する必要がある。

  • 環境変数 LD_LIBRARY_PATH に検索パスを追加する。
  • /etc/ld.so.conf ファイルに検索パスを追記して ldconfig コマンドで /etc/ld.so.cashe ファイルを更新(作成)する。

ldd コマンド

  • あるプログラム(コマンド)が必要としている共有ライブラリを表示する。
  • 書式:ldd コマンドのパス

例:/bin/cat コマンドが必要としている共有ライブラリを表示する場合

# 実行
ldd /bin/cat

# 結果
linux-gate.so.1 =>  (0x00e2b000)
libc.so.6 => /lib/libc.so.6 (0x00659000)
/lib/ld-linux.so.2 (0x00633000)

【LPIC101】Linuxのインストールとパッケージ管理:ブートマネージャのインストール②

f:id:mgmmy:20200523152330p:plain

LPICの勉強を兼ねて、Ping−tで学習したことをまとめています✍️

Linuxのインストールとパッケージ管理

ブートマネージャのインストール

MBRマスターブートレコード

GRUBの主な起動オプション

起動オプション 説明
init=パス initの代わりに指定コマンドを実行
root=デバイス ルートパーティションを指定
数字(0-6) 指定したランレベルで起動
quiet 起動中のカーネルからの情報出力を抑制する

これらの起動オプションは起動プロンプトで以下のように指定できる。

GRUB Legacy

# 書式
grub> kernel カーネルイメージ [オプション]

# 例
grub> kernel /boot/vmlinuz init=/bin/bash

GRUB2

# 書式
grub> linux カーネルイメージ [オプション]

# 例
grub> linux /boot/vmlinuz init=bin/bash

systemdでの起動時のターゲット指定

  • 起動時のターゲットを指定するカーネルパラメータは systemd.unit
    • パラメータの値に起動時のターゲットを指定する。
    • ターゲット名は target を省略することができる。
  • 書式: system.unit=rescue ※シングルユーザーモードで起動する

dd コマンド

  • データをコピーするコマンド

if オプション

  • 入力ファイルオプション
  • if=/dev/zero を指定すると全データが null であるファイルが作成される。

of オプション

  • 出力ファイルオプション
  • of=ファイルパス で指定したファイルに書き込むことができる。

bs オプション

  • ブロックサイズオプション
  • 一度に書き込むサイズを指定する。
  • ブートローダ部分にだけ書き込む場合は bs=446 を指定する。
    • MBRにインストールされるGRUBのプログラムのサイズは440バイトのため、 bs=440 とも指定できる。

count オプション

  • count=数字 でコピーする回数を指定する。

使用例

# MBR, パーティションテーブルをゼロクリアする
dd if=/dev/zero of=/dev/sda bs=512 count=1

# ブートローダ部分のみゼロクリアする
dd if=dev/zero of=/dev/sda bs=446 count=1

# MBRのバックアップ
dd if=/dev/hda of=バックアップファイル名 bs=512 count=1

# 既存のパーティションテーブルを残してMBRを復元する
dd if=バックアップファイル名 of=/dev/hda bs=446 count=1

【LPIC101】Linuxのインストールとパッケージ管理:ブートマネージャのインストール①

f:id:mgmmy:20200510153932p:plain

LPICの勉強を兼ねて、Ping−tで学習したことをまとめています✍️

Linuxのインストールとパッケージ管理

ブートマネージャのインストール

GRUB(GRand Unified Bootloader)

  • 多くのファイルシステムに対応している高機能なブートローダー。
  • 操作を対話的に行う GURBシェル と呼ばれるプログラムが付属している。
  • インストールには grub-install コマンドを利用する。
  • GRUB LegacyGRUB2 では 設定方法が異なる。

GRUB Legacy

  • バーションが 0.9x のもの
設定方法
【例】boot/grub/menu.lst
boot=/dev/sda
default=0
timeout=5

title CentOS Linux(2.6.32-71.29.1.el6.i686)
      root(hd0,0)
      kernel /vmlinuz-2.6.32-71.29.1.el6.i686 ro root=/dev/hda1
      initrd /initramfs-2.6.32-71.29.1.el6.i686.img
title centos(2.6.32-71.el6.i686)
      root(hd0,0)
      kernel /2.6.32-71.el6.i686 ro root=/dev/hda1
      initrd /2.6.32-71.el6.i686.img
# GRUBが格納されているデバイスの指定
boot=/dev/sda
# デフォルトのエントリ番号(0は1番目のエントリ)の指定
default=0
# プロンプトが表示される時間(秒単位)の指定
timeout=5

# メニューに表示するエントリ名(1番目のエントリ)の指定
title CentOS Linux(2.6.32-71.29.1.el6.i686)
      # ルートパーティションのデバイスの指定
      root(hd0,0)
      # /boot 内のカーネルとオプションの指定
      kernel /vmlinuz-2.6.32-71.29.1.el6.i686 ro root=/dev/hda1
      # 初期RAMディスクファイルの指定
      initrd /initramfs-2.6.32-71.29.1.el6.i686.img
# 2番目のエントリ
title centos(2.6.32-71.el6.i686)
      root(hd0,0)
      kernel /2.6.32-71.el6.i686 ro root=/dev/hda1
      initrd /2.6.32-71.el6.i686.img
  • root(hdディスク番号,パーティション番号) でルートパーティションを指定する。
    • 番号はどちらも 0 から数える。
# 1番目のディスクの1番目のルートパーティション
root(hd0,0)

# 1番目のディスクの2番目のルートパーティション
root(hd0,1)

# 2番目のディスクの2番目のルートパーティション
root(hd1,1)

GURB2

  • バージョンが 1.9 以降 のもの

設定方法

  • 設定ファイルは /boot/grub/grub.cfg だが、 直接編集することはない。
  • 設定内容は /etc/default/grub ファイルおよび /etc/grub.d ディレクトリ内のファイルに記述する。
    • grub-mkconfig コマンドで設定内容を /boot/grub/grub.cfg に反映する。
grub-mkconfig コマンド
  • ディストリビューションによっては以下の差異が存在する。
    • CentOS7 では grub2-mkconfig という名前でインストールされている。
    • Ubuntu では update-grub および update-grub2 というコマンドが存在するが、いずれも grub-mkconfig を実行している。
【例】/etc/default/grub
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DAFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# デフォルトのエントリ番号(0は1番目のエントリ)の指定
GRUB_DEFAULT=0
# 待機時間(秒)の指定(メニューは非表示)
GRUB_HIDDEN_TIMEOUT=0
# 待機時間のカウントダウンの表示・非表示の指定(trueは非表示)
GRUB_HIDDEN_TIMEOUT_QUIET=true
# デフォルトののエントリを起動するまでの時間(秒)の指定
GRUB_TIMEOUT=10
# メニューに表示するエントリ名の指定
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
# 通常起動の場合に追加する起動オプションの指定
GRUB_CMDLINE_LINUX_DAFAULT="quiet splash"
# 通常起動およびリカバリ起動の場合追加する起動オプションの指定
GRUB_CMDLINE_LINUX=""
  • GRUB_DEFAULTsaved を指定すると、前回選択した項目がデフォルト選択されるようになる。
  • カーネルイメージ、ルートパーティションの指定などは /etc/grub.d ディレクトリ内のファイルで行う。
【例】/etc/grub.d/40_custom
menuentry 'CentOS7 3.10.0-957.12.2.el7.x86_64' --class centos {
  insmod gzio
  insmod part_msdos
  set root=(hd0,1)
  linux /vmlinuz-3.10.0-957.12.2.el7.x86_64 root=/dev/mapper/centos-root
  initrd /initramfs-3.10.0-957.12.2.el7.x86_64.img
}
# メニューに表示するエントリ名の指定
menuentry 'CentOS7 3.10.0-957.12.2.el7.x86_64' --class centos {
  # ロードするモジュールの指定
  insmod gzio
  insmod part_msdos
  # ルートパーティションのデバイスの指定
  set root=(hd0,1)
  # /boot 内のカーネルとオプションの指定
  linux /vmlinuz-3.10.0-957.12.2.el7.x86_64 root=/dev/mapper/centos-root
  # 初期RAMディスクファイルの指定
  initrd /initramfs-3.10.0-957.12.2.el7.x86_64.img
}
# 1番目のディスクの1番目のルートパーティション
root(hd0,1)

# 1番目のディスクの2番目のルートパーティション
root(hd0,2)

# 2番目のディスクの2番目のルートパーティション
root(hd1,2)

【LPIC101】Linuxのインストールとパッケージ管理:ハードディスクのレイアウト設計

f:id:mgmmy:20200509134923p:plain

LPICの勉強を兼ねて、Ping−tで学習したことをまとめています✍️

Linuxのインストールとパッケージ管理

ハードディスクのレイアウト設計

パーティションの設計

主なディレクトリ一覧

ディレクト 分割適否 用途
/home 一般ユーザのホームディレクト
(書き込みが頻繁に発生)
/usr 起動には不要なプログラムを格納
(読み込みが頻繁に発生)
/var ログファイルやメールなど可変ファイル群を格納
(書き込みが頻繁に発生)
/opt 追加でインストールしたパッケージを格納
(容量が大きくなる可能性あり)
/boot 🔼 Linuxカーネルなど起動に必須のファイルを格納
/tmp 🔼 一時ファイルを格納
/bin 一般ユーザ用のコマンドを格納
/sbin 管理者用のコマンドを格納
/etc システムの設定ファイルを格納
/lib 共有ライブラリを格納
/dev バイスファイルを格納

スワップ領域

  • 物理メモリ(実メモリ、RAM)に収まらなかった情報を一時的に格納するための、通常ハードディスク上に作成する領域。
  • ハードディスク上にあるため、物理メモリよりも動作は格段に遅くなる。

Red Hat Enterprise Linux 8 でのスワップ領域の推奨値

RAM スワップ領域
2GB未満 RAMの2倍
2GB 〜 8GB RAMと同量
8GB 〜 64GB 4GB 〜 RAMの0.5倍
64GB以上 負荷に依存するが少なくとも4GB

LVM(Logical Volume Manager)

物理的な記憶デバイスの領域を複数まとめてひとつの大きな仮想的な領域とし、そこから仮想的なパーティション領域を切り出すことで、従来の物理的なパーティションを用いた方法よりも柔軟に記憶領域を管理できる仕組み。

具体的にできること

  • 各論理ボリューム(LVMを利用しない場合のパーティションの相当)のリサイズ。
  • 単体のハードディスク(LVMでは物理ボリュームと呼ぶ)の容量を超えるサイズの論理ボリューム作成。
  • 後から新たな物理ボリュームを追加してボリュームグループ全体のサイズを増やす。
  • 不要な特定の物理ボリュームだけをボリュームグループから削除する。

関連用語

用語 略称 説明
物理ボリューム
(Physical Volume)
PV 物理的なハードディスクやパーティション
ボリュームグループ
(Volume Group)
VG PVを集めて作る仮想的な領域
(仮想的なハードディスクのようなもの)
論理ボリューム
(Logical Volume)
LV VGの一部または全部を使って作る仮想的なパーティション
LV上にファイルシステムを作って利用可能

論理ボリュームの作成手順


  1. PVの作成: pvcreate コマンドを実行
  2. VGの作成: vgcreate コマンドを実行
  3. LVの作成: lvcreate コマンドを実行

  • LVのデバイスファイルは dev/VG名/LV名 となる。
  • 作成したLVを実際に使用するには mkfs コマンドで、作成したLVにファイルシステムを作成し、mount コマンドでマウントを行う。
# LVにファイルシステムを作成
mkfs -t ext3 /dev/vg1/lv1

*** 省略 ***

# マウントポイントを作成
mkdir /mnt/lv1

# マウントを行う
mount /dev/vg1/lv1 /mnt/lv1
  • LVMにはLVへの変更前の情報を保持する スナップショット という機能がある。
    • バックアップの対象をスナップショットにすることで、運用を停止することなく安全にバックアップを行うことができる。

【LPIC101】システムアーキテクチャ:ランレベル/ブートターゲットの変更②

f:id:mgmmy:20200507142940p:plain

LPICの勉強を兼ねて、Ping−tで学習したことをまとめています✍️

システムアーキテクチャ

ランレベル/ブートターゲットの変更

SysVinit

ランレベルに応じたスクリプト

書式:[1文字目][数字][サービス名]

例 : K01smartd

  • 1文字目
    • S Start:サービスを起動 / K Kill:サービスを停止
  • 数字
    • 実行優先順位(若い番号から実行)
  • サービス名
    • 任意の名前をつける

wall コマンド

  • ログイン中の全ユーザにメッセージを送信する。
    • システム停止作業などの案内を通知するときに使用
  • 書式: CentOS7 wall [-n] [message]Ubuntu 14.04 wall [file]
    • CentOS7とUbuntu 14.04ではwallコマンドの出処が異なる。

動作モード(ランレベル)の変更

  • 現在のランレベルinit または telinit コマンドで変更できる。
  • 書式:init ランレベル または telinit ランレベル

runlevel コマンド

  • 現在および1つ前のランレベルを調べることができる。

# 実行
runlevel

# 結果
N 5

Ctrl+Alt+Del キーを押下した際の動作を設定する

  • etc/inittab ファイルの ctrlaltdel のある行で設定する。

設定例:Ctrl+Alt+Del キーを押下した際、1分後にシステムを再起動する。

ca::ctrlaltdel:/sbin/shutdown -r +1
  • init q(Q) または telinit q(Q) コマンドを実行すると、再起動せずに設定ファイルを再読み込みできる。

ACPI(Advanced Configuration and Power Interface)

  • コンピュータの電源管理や構成に関する規格。
  • OS上でシャットダウンや再起動などを行う際の命令はACPIイベントとして通知される。
  • ACPIイベントを監視、対応する処理を実行するデーモンは acpid

サーバを再起動するコマンド

shutdown -r

  • shutdown コマンドのオプションを -r で実行すると再起動を行う。
  • shutdown -r [時間] [メッセージ] で時間とメッセージを指定することができる。

reboot

再起動を行う。時間やメッセージの指定はできない。

【LPIC101】システムアーキテクチャ:ランレベル/ブートターゲットの変更①

f:id:mgmmy:20200506133556p:plain

LPICの勉強を兼ねて、Ping−tで学習したことをまとめています✍️

システムアーキテクチャ

ランレベル/ブートターゲットの変更

systemd

起動時のターゲット

  • 起動時に最初に実行されるUnitは etc/systemd/system/default.target である。
  • default.target をSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、期待するサービス群を起動することができる。
SysVinit と systemd のターゲットの対応表
ランレベル
(SysVinit)
ターゲット
(systemd)
概要
0 poweroff.target システム停止
1 / s / S rescue.target シングルユーザモード
2
3
4
multi-user.target マルチユーザモード(テキストログイン、NFSなし)
マルチユーザモード(テキストログイン)
未使用
5 graphical.target マルチユーザモード
(グラフィカルログイン)
6 reboot.target システム再起動
  • これらのターゲットは /lib/systemd/system 配下に格納されている。
  • SysVinitとの関連がわかりやすいように、runlevel0.targetrunlevel6.target までのシンボリックリンクも用意されている。
  • サーバとして動作させる場合は、ランレベル3(multi-user.target) を指定する。
    • ランレベル5でも必要なサービスを起動させることは可能だが、グラフィカルログインやデスクトップを制御するプロセスも起動させるため、サーバとして稼働するには無駄なリソースを使用してしまう。
起動モードの変更

例:次回起動モードをグラフィカルログイン(ランレベル5)に変更

# 上書きできないため、既存のシンボリックリンクを削除する。
rm -f /etc/systemd/system/dafault.target

# シンボリックリンクの作成
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target

システムの再起動

  • reboot コマンドを実行する。

  • init 6 または telinit 6 コマンドを実行する。

  • shutdown コマンドを実行する。

    • 書式: shutdown [オプション] 時間 [メッセージ]
オプション 説明
-h システム停止
-r システム再起動
-k シャットダウンせず、ログイン中の全ユーザにメッセージを送る
-c 実行中のシャットダウンをキャンセル
時間 説明
HH:MM HH時MM分に実行
+M M分後に実行
now 今すぐ実行
# 使用例:今すぐ再起動を実行
shutdown -r now

systemctl rescue コマンド

  • 現在のランレベルをシングルユーザモードに変更することができる。
    • モード変更時にはrootユーザのパスワードを入力するまで操作ができない。
  • systemctl default コマンドまたは ^D(Ctrl+D 押下) によって通常モードに戻すことができる。
  • systemctl rescue コマンドはデフォルトのターゲットを変更しない。
    • systemctl reboot コマンドで再起動するとデフォルトのターゲットで起動する。