カーネルのコンパイル
boot以下
boot以下のファイルを手動で配置することでmake installを用いずにカーネルをインストールするには次の手順を行う。
1.ビルドしたカーネルイメージファイル【bzImage】を【vmlinuz-(VERSION)】という名前で/bootに置く。 2.System.mapを同様にSystem.map-(VERSION)という名前で/bootに置く。 3./boot/vmlinuiz,/boot/System.mapというバージョンがつかない名前でもアクセスができるよう、シンボリックリンクを貼る 4.必要に応じてmkintramfsまたはmkinitrdで初期RAMディスクを作成し、/boot/initrd.img-(VERSION)とする 5.ブートローダに新しいカーネル要の設定を追加する。GRUB Legacyならば/boot/grub.menu.lst GRUB2ならば/etc/grub.d/ ディレクトリ配下のファイルなどを適切に編集する(GRUB2 ではさらに update-grub コマンドで、設定内容を /boot/grub/grub.cfg 設定ファイルに反映させること)
仮の環境を保存するイメージ形式は2つある、
初期RAMディスクイメージ
/boot/initrd.img-【バージョン】 ←ファイル
段階的ブートを行う際の、狩りのファイルシステムの内容をまとめたイメージファイルである。
make installを用いた場合は必要に応じ自動的に生成される。
initrd
ファイルシステムイメージをgzip圧縮したもの。
initramfs
cpioアーカイブをgzipで圧縮している。
一般的にこっちの方が利用されている。
initramfs形式の初期RAMディスクはdracutコマンドでも作成できる。
dracut initramfs.img `uname -r`
makeコマンド
ビルドとは
ソースをコンパイルしてソフトウェアの実行ファイルを作る事
make modules_install
ビルドし終わったカーネルモジュールを、実際に現在のシステムに配置(インストール)する。
これを行わないと、カーネル本体が有効なモジュールをみつけることができず、モジュールが一切使えない状態になったりする状況が考えられる。
カーネルをビルドする際にカーネルモジュールをシステムに配置することができる。
make
makeは引数にターゲットを指定しないと、自動的にmake all とした時の動作になる。
make allは依存関係のチェック、カーネル本体とモジュールのビルド、不要になった一時ファイルの削除が自動的に実行される。
make mrproper
設定ファイルを含め、ソースディレクトリ内を初期化する。 カーネルのソースをダウンロードしてきたら、ビルドする前に、まずこのコマンドで設定ファイルを確実に初期化しておく事が推奨されています。
make clean
設定ファイルは残してソースディレクトリ内の一時ファイル等を削除する。 以前のビルド時に生成された一時ファイルを消すなど、cleanという文字通り「掃除」する
make modules
カーネルモジュール群をビルドする。カーネル本体は含まれません。
make install 動作
1.vmlinuzという名前で/boot直下に置く。
2.system.mapを同様にSystem.map-(VERSION)という名前で/bootに置く
3./boot/vmlinuz, /boot/System.map というバージョンがつかない名前でもアクセスができるよう、シンボリックリンクを貼る
4. 必要に応じて mkinitramfs または mkinitrd で初期 RAM ディスクを作成し、/boot/initrd.img-(VERSION) とする
5. ブートローダに新しいカーネル用の設定を追加する。GRUB Legacyならば /boot/grub/menu.lst、GRUB2 ならば /etc/grub.d/ ディレクトリ配下のファイルなどを適切に編集する(GRUB2 ではさらに update-grub コマンドで、設定内容を /boot/grub/grub.cfg 設定ファイルに反映させること)
ソースからのmakeによるインストール
拡張子
example.tar.bz2
複数のファイルがtarコマンドでアーカイブされた後、bzip2で圧縮された事を示す。
書式:tar オプション ファイル|ディレクトリ
zabbixのときはこれで解凍している。
tar zxvf zabbix-2.0.9.tar.gz
ネットワーク
一時的な設定 ifconfig インタフェース名 操作内容
arpキャッシュ arp 【オプション】 また arpキャッシュの内容は「ip neigh show」コマンドでも確認できる
-f で指定するファイルを指定しない場合はデフォルトで/etc/ethersが指定される。
-a のホスト名はIPアドレスでもよい
arpのかわりに ip neigh showでもみれる
/etc/hostsの書き方
IPアドレス ホスト名 [ホスト名...]
全体設定を行う。
hostname ・自分自身のホスト名を設定 ・自ホストの情報を表示
Red Hat 系ディストリビューションではネットワークに関する全般的な設定を行うファイル /etc/sysconfig/network
Debian系 /etc/hostname
IPエイリアシング
route add
gwの追加
route [add|del] [-host|-net] IPアドレス ...
route del -host 192.168.2.1
route add default gw 192.168.0.1
ip route (route コマンドと同様の引数の書式)
無線LAN
無線LAN iwaconfig インターフェイス名 操作内容
無線 LAN のリンク品質や信号強度を確認
・iwconfig ・iwlist ・iwspy
調査
調査コマンド
tcpdump
各プロトコルがどのように通信を行うのか、不審な通信がないかネットワークを流れるパケットキャプチャする。
nmap [スキャンタイプ] [オプション] 対象
・詳細が不明なネットワークの構造を調査したり、セキュリティ上の問題がないかを検査する ・指定したホストのポートに対して総当たりでパケットを送りつけ、どのようなポートが待ち受け状態にあるかを調べることができます。
nmap -p 80 host.ex.jp
TCPラッパ
/etc/hosts.allow /etc/hosts.deny ALL:192.168.10.0/255.255.255.0:ALLOW ALL:ALL:DENY vsftpd:192.168.10.
RAID
mdadm
linuxでRAIDを構築、管理するにはmdadmコマンドを使用
mdadm設定ファイルは /proc/mdadm.conf
RAIDを構築する際にmdadmコマンドを使用する前にパーティションタイプを0xfdしなくてはいけない
RAID作成
mdadm -C /dev/md0 -l 1 -n 2 /dev/sda1 /dev/sdb1
RAIDアレイの状態を確認 cat /proc/mdstat
RAID5
RAID5にて復旧できる故障台数は1台まで
RAIDデバイス
MD(Multiple Device) デバイスと呼ばれる /dev/md0, /dev/md1 等を使います。
ファイルシステム
ファイルシステムを作成
0.キャパシティプランニング
mpstat
sar
sar
sarコマンドは、sadcコマンドが収集した様々な情報を表示するコマンド cronの設定により定期的に実行され、収集した情報は「/var/log/sa/saXX」ファイルに書き込まれます。
sar [オプション] [表示間隔(秒) [回数]]
iostat
iostatコマンドは、CPUの利用状況およびディスクI/Oの状況などを表示します。 引数に表示間隔と回数を指定することで、これらの情報を継続的に監視できます。 最初の表示は統計情報のため注意
書式:iostat [表示間隔(秒) [回数]]
vmstat
「procs」欄:プロセスの統計情報を表示 ・r 実行待ちプロセスの数 ・b I/O待ちなどで割り込み不可のスリープ状態にあるプロセスの数 ・w スワップアウトされているプロセスの数(w列が表示されない場合もある) 「memory」欄:メモリの使用状況を表示 ・swpd 使用中のスワップ領域のサイズ ・free 空いている物理メモリのサイズ ・buff バッファキャッシュのサイズ ・cache ページキャッシュのサイズ 「swap」欄:スワップイン・アウトの状況を表示 ・si スワップインされているメモリのサイズ(KB/秒) ・so スワップアウトされているメモリのサイズ(KB/秒) 「io」欄:ディスクI/Oの状態を表示 ・bi デバイスからの読み取りブロック数/秒 ・bo デバイスへの書き込みブロック数/秒 「system」欄:割り込み回数やコンテキストスイッチ回数を表示 ・in 1秒あたりの割り込み回数(クロック割り込み含む) ・cs 1秒あたりのコンテキストスイッチ回数 「cpu」欄:CPUの使用状況を表示 ・us ユーザプロセスの割合 ・sy システムプロセス(カーネル)の割合 ・id アイドル時間の割合 ・wa I/O待ち時間の割合 ・st バーチャルマシンに使用された時間の割合
ディスクからスワップインまたはスワップアウトを表示できる唯一のコマンド
netstat
netstatはネットワークの状態に関する情報を表示する
-sでプロトコル毎にパケットの送受信に関する情報を表示します。
uptaime
top
「Mem」行 ・total 物理メモリの総量 ・used 使用中の物理メモリのサイズ ・free 空いている物理メモリのサイズ ・buffers バッファキャッシュのサイズ 「Swap」行 ・total スワップ領域の総量 ・used 使用中のスワップ領域のサイズ ・free 空いているスワップ領域のサイズ ・cached ページキャッシュのサイズ
ps
・USER ユーザ名 ・PID プロセスID ・%CPU CPUの使用率 ・%MEM 物理メモリの使用率 ・VSZ 仮想メモリのサイズ(KB) ・RSS 使用中の物理メモリのサイズ(KB) ・TTY 制御端末名 ・STAT プロセスの状態と優先度 ・START 実行開始時刻 ・TIME 消費したCPU時間 ・COMMAND 実行コマンド
2.システムの起動
フローティングトピック
2-1.SysV-initシステムの起動のカスタマイズ
Linux システムの起動順序(ブートプロセス) BIOS → ブートローダ → カーネル → init
BIOS
最もハードウェアに近い部分を司るシステムで、物理的なハードウェア(マザーボード)上に書き込まれています。 コンピュータの電源を入れると、まずこの BIOS が起動し、記憶装置(HDD)等に関して最低限の認識をした後、MBR(記憶装置の先頭セクタ、ブート用の特殊領域。ブートローダが格納されている) を読み込み、得られたブートローダに制御を移します。
最近ではBIOSに代わるUEFIが使用される場合がある。2TBを使用する際。
ブートローダ
Linux システムでは GRUB が該当します。 MBR に格納されている第一段階部分と、記憶装置内の別の場所に格納されている第二段階部分があります。 このように分かれている理由は、MBR には厳しいサイズ制限があるためです。 ブートローダは記憶装置内のカーネルをロードし、制御を移す役割を果たします。
カーネル
カーネルは起動されると、高度にハードウェアを認識・制御し、ルートパーティションのマウントなど様々な初期化処理
システムの起動時にカーネルが 出力したログを閲覧
dmesg
cat /var/log/dmesg
init
設定ファイル /etc/inittab の記述に基づいて、自動起動するべきプロセスを立ちあげるなど、アプリケーションレベルの初期化を行います。
/etc/inittab
init の設定ファイル /etc/inittab では、デフォルトランレベルや、ランレベルに応じた動作が設定できます。
Cmd 部は、実行するプロセスです。引数を指定することもできます。
例;id:5:initdefault:
Act 部には、以下に示すようなアクションのうち、いずれかを指定します。指定によって動作が変わります。
/etc/inittab時の動作
wait=プロセスの終了を待つで覚える
最近のシステムではinitプログラムとして、初期化処理を高速化したUpstartやsystemdを採用している場合があります。その場合は基本的に「/etc/inittab」ファイルは使用されません
共通?
telinit
OS 自体を再起動することなく、プロセスレベルで初期化を行ったり、指定のランレベルに移行したりする
init と同様の使い方ができる
rootでしかできない
Redhat系
自動起動設定
普段はランレベルを省略している。 省略した際は2345が対象
chkconfig --level 5 sshd off →sshdをレベル5で自動起動しないように設定
init Q とすると /etc/inittab が再読み込みされる
サービスの起動
自動起動 debian系 SUSE系
バージョン 6.0 より前の Debian GNU系/Linux
自動起動設定 優先順位をつけることができる
自動起動の追加。削除が行える。
なので、これらを使う際には、対象ランレベルや優先度の指定が必須です。 またランレベルはスペース区切りで並べ、最後にドット (.) が必要です。
SUSE 系やバージョン 6.0 以降の Debian 系
自動起動設定
オプションなしでサービスを指定して実行すると、指定したサービスが(適切なランレベルで)自動起動
オプションに -r をつけて実行すると、指定したサービスが自動起動しなくなります。
起動スクリプト
各ランレベルに応じたスクリプトは /etc/rc[0-6].d にある。
/etc/init.d にスクリプトの実体がある。 /etc/rc[0-6].d これが/etc/init.dへのシンボリックリンクである。
この命名ルールに沿ってシンボリックリンクを /etc/rc[0-6].d に追加すれば、ランレベルに応じた自動起動の設定を行うことができます
ln -s ../init.d/network S50network
2-2.システムのリカバリ
システムが起動できない
切り分け
システムが起動できなくなってしまった場合は、まずブートローダまで起動プロセスが進行しているか確認する。 ブートローダが正常に起動する以前にエラーが起こっている場合はブートローダがMBRに正常にインストールされていなかったり、壊れている可能性がある。 このような場合には後述するレスキューモードなどの方法でいったん仮の環境を動作させ、そこからブートローダの再インストールを行うなどの方法を試行します。 それにより回復すれば問題ありませんが、回復しない場合や、そもそもレスキューモードでの動作も不可能な場合などは、物理的な故障や BIOS の設定ミスなど、より低レベルでの障害を疑います。 一方、ブートローダまでは正常に起動するが、カーネルなどの起動途中で何か問題が発生し起動に失敗する場合は、まずブートローダ上から起動設定を変更してメンテナンスを試みます。 具体的には、起動に使おうとしているカーネルイメージ、初期 RAM ディスクイメージ等の指定が正しいか確かめたり、古い起動設定が残してあればそれを使って起動してみたり、シングルユーザモードで起動してみたり、init プロセスを使わずに起動してみたりと、問題になっている部分を迂回する方法を探します。 そしてこれらブートローダ上からの操作ではどうにもならないようであれば、レスキューモード等の、別環境で一時的にブートする機能に頼る方針に切り替えます。
古いカーネルを利用する設定でブートする
「カーネルイメージやデフォルトの起動設定が壊れているために 起動に失敗する場合はこの方法によりメンテナンスを行える可能性がある」
シングルユーザモードでブート
最低限のプロセスで立ち上げるため最低限のシステムで起動する
起動オプション init で初期プロセスを変更
/etc/inittab の設定ミスなどにより、init の動作がおかしく、起動に失敗する場合はこの方法でメンテナンスを行える可能性があります。 具体的には init オプションに /bin/bash などのシェルを指定し、そのシェルからメンテナンスを行う方法が一般的です。
カーネル起動オプション
・GRUB Legacyの場合
・GRUB2の場合
7.システムの保守
バックアップ
用語・概要
完全バックアップ
全てのファイルを対象とする
差分バックアップ
前回のフルバックアップ以後に作成もしくは変更されたファイルのみをバックアップする、フルバックアップよりは処理に時間がかからない、バックアップを復元するにはフルバックアップと差分バックアップが必要となります、
増分バックアップ
前回のバックアップ以後に作成もしくは変更されたファイルのみをバックアップします。 3種類のバックアップの中ではもっとも処理時間が短い。 復元するにはフルバックアップとフルバックアップ以降の全ての増分バックアップが必要
ファイルサーバのバックアップ計画
増分バックアップは毎日行い フルバックアップを週に1度行う
バックアップ対象のシステムと同一拠点にバックアップを保管する事を、オンサイトのバックアップといいます。一方、別拠点にバックアップを保管する事をオフサイトのバックアップといいます。
オープンソースのバックアップシステム
Amanda BackupPC Bacula
rsync
構文:rsync [オプション] 送信元 送信先
テープデバイス
-fでテープデバイスを指定します。 テープデバイスはSCSI接続なら/dev/st0となります。ただ、テープデバイスに/dev/st0を指定した場合、データの読み書きでテープが自動的に巻き戻されます。 その為、複数のファイルを読み書きしたい場合などは巻き戻ししない/dev/nst0をテープデバイスに指定します。
ddコマンド
例) dd if=/dev/sda of=/dev/sdb
アーカイブ(archive)
複数のファイルをまとめて1つのファイルにしたものをアーカイブと呼ぶ 一般的にtarコマンド使用して作成される。
tar.gz 複数のファイルがtarコマンドでアーカイブされている。
実行順序 1. ./configure 2. make 3. su (必要に応じて) 4. make install
パッチ
一般的に「-p1」を指定すればうまくいくらしい
-cコマンドを使い、解凍結果を繋げることで 解凍とパッチを同時に行っている
patch-kernel
カーネルのパッチでバージョンアップする際は大量のパッチを当てなければいけない。 正しい順番を適用するのは手間なので、/usr/src/linux/scriptsディレクトリ内に「patch-kernel」というスクリプトが容易されている。
makefileの作成
ソースからmakeによるインストール
パッチは任意の順番であてられない
コンパイル
プログラムが書かれたソースコードから実行ファイルを生成する事をコンパイルといいます。
makeコマンドでコンパイルしている
インストール
installはインストールではなくターゲットというらしい
インストールは/usr/local/bin /usr/local/sbinに配置される。
インストール先のディレクトリにアクセス権限がないか確認
プログラムの元となる、C言語などのプログラミング言語で記載されたファイルを「ソースファイル」もしくは単に「ソース」といいます。プログラマー等の人の手によって作成されたソースファイルは、そのままでは機械(CPU)がそれを理解し、実行する事はできません。よってこれを、機械語で記載されたファイル「バイナリファイル」(プログラムファイル)に変換する必要があります。この変換作業を「コンパイル」といいます。
C言語などのプログラム言語で記載されたファイルを「ソース」という。 「ソース」はCPUが理解できないので理解するために 「コンパイル」を行う コンパイルされたファイルを「バイナリ」ファイルと呼ぶ。
インストール(make install)後にプログラムの起動する時、環境変数LD_LIBRARY_PATHが正しく設定されていないと、プログラムの実行に必要な共有ライブラリを読み込むことができず、起動に失敗する事があります。 例えば、「/home/ping-t/lib」に共有ライブラリが存在する場合、「export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ping-t/lib」などとして、共有ライブラリの検索パスを追加しておく必要があります。
ログイン関連
ログイン画面の
/etc/motd →ログイン直後に表示される /etc/issue →ログイン画面の表示
Loading...