環境設定

コンソールログイン時にスクリプトを実行する

~/.bashrc に記述する

コンソールのプロンプト文字列を変更する

環境変数PS1 を設定する
// ドットを含むホスト名を表示させる
vi ~/.bashrc

 PS1="[\u@\H \W]\\$"

新規HDDの追加

パーティションを切ってフォーマットしてマウントします。
// HDD のデバイスを確認
dmesg | grep hd

// パーティションの作成(2TB 以下)
fdisk /dev/hdb

// パーティションの作成(2TB 以上も可能)
parted /dev/hdb

// パーティションの作成(2TB 以上アライメント対応)
gdisk /dev/hdb

// 確認(sector 表示)
sgdisk -p /dev/hdb

Advanced Format Technology(AFT) 対応HDD について

近年の大容量HDD(2TB 以上) には4KB セクターの品がありますが、CentOS 6 以前では未対応です。その場合、parted を使います。
parted /dev/sdb

 // ディスクラベルをGPT に
 (parted) mklable GPT

 // 設定単位はセクタ
 (parted) unit s

 // パーティションを作成
 // AFTに対応する為、開始位置は64セクタ目。終了位置は最後のセクタ
 (parted) mkpart primary 64s -1s  
ただし、これだと開始位置は4Kbyte(8セクタ)で割り切れますが、終了位置は割り切れないかもしれない。 今作成した値から8で割り切れる値を算出して再度パーティションを確保し直します。
 (parted) print
 // 番号 開始  終了         サイズ       ファイルシステム  名前  フラグ
 //  1   64s   4883781134s  4883781071s  ext3              1
 //  4883781128 = (4883781134 / 8) * 8;

 (parted) mkpart primary 64s 4883781128s
// フォーマット(ext3 ファイルシステムの作成)
mkfs.ext3 /dev/sdb1

// ext4 の場合
yum install e4fsprogs
mkfs.ext4 /dev/sdb1

// マウントポイントの作成
mkdir /mnt/hdb

// マウントして完了
mount -t ext3 /dev/hdb1 /mnt/hdb

// ボリュームラベルを設定
e2label /dev/hdb /label_hdb

// 自動でマウントさせるには/etc/fstab に記載します。
vi /etc/fstab

// ↓ 以下を追加。
//(3項はフォーマットの種類。6項はルートパーテイションなら1、その他は2)
 LABEL=/label_hdb /mnt/hdb ext3 defaults 1 2

// fstab の情報でマウントできるかテスト
mount -a

USB 接続 FDD

Compaq ノート(N410C) ではUSB 接続FDD を使います。通常は/dev/fd0 ですが、USB の場合はSCSI に見えるせいで /dev/sda となります。

ログローテート

/etc/logrotate.d/ に設定ファイルを新規作成すれば、任意のログをローテートできます。特別な設定が不要なら既存の/etc/logrotate.d/syslog に ログファイル名を追記してやるという手もあります。
vi /etc/logrotate.d/user_log

 /var/log/ping_test.log /var/log/test.log {
     rotate 10
     missingok
     notifempty
     size 2M
 }
上記の設定では最大10まで過去ログを残す。ログファイルが無くても正常終了。ファイルが空なら何もしない。ファイルサイズが 2MB を超えたら ローテートする(size 設定は、日時でのローテートより優先される)。
// エラーが出ないかチェック
/usr/sbin/logrotate -vd /etc/logrotate.conf
対象のログファイルが重複して別の設定にも記述されているとエラーになります。

シェル操作

実行中の処理をバックグラウンドに移す

ctrl + z を押して、実行中の処理を中断させる。すると中断中のプロセスID が表示されるので、これをbg コマンドで指定する。 jobs コマンドでバックグランドで実行中のプロセスを確認できる。ただしバックグランドで実行中のプロセスもシェルを終了とともに強制終了してしまう。

シュル終了後もプロセスを実行させ続ける

nohup /test.sh > /var/log/output.log &
リダイレクトを使って標準出力を任意のファイルにも出せる(デフォルトは nohup.log)

ネットワーク

kernel 2.6.24 以前でRTL8111c を動かすには

kernel のバージョンが2.6.24 以前ではRTL8111c を載せたLAN カードは上手く動きません。例えば intel のAtom マザーとか D945GCLF2。Realtek のダウンロードセンターからドライバをダウンロードします。LINUX driver for kernel 2.6 and 2.4.x で、ver 8.010.00 もしくは最新のそれを使います。
// コンパイルには下記も必要です(カーネルソースとコンパイラ)
yum install kernel-devel (Xen 環境なら kernel-xen-devel)
yum install gcc
// r8169 は邪魔なので消す
lsmod | grep r8169
rmmod r8169


cd /tmp
tar vjxf r8168-8.010.00.tar.bz2
cd r8168-8.010.00

make clean modules
make install
depmod -a
insmod ./src/r8168.ko (or r8168.o kernel 2.4.x only?)


// r8168 を読むように指定
vi /etc/modprobe.conf

 alias eth0 r8168

// ネットワークを再起動
service network restart

開発環境

開発環境をインストールするには

グループインストールが便利です。
yum groupinstall "Development Tools"

旧バージョンのGCC を使うには

gcc2.95.3 といった古いGCC を使いたいときもあるでしょう。以下の手順でインストールしておいて、随時使い分けます。
注意すべき点はインストール先の指定です。これを怠るとgcc4.1 を上書きする形でのバッディングとなり最悪です。 /usr/local/gcc2.95.3 へのインストールを指示します。
cd /tmp
wget "ftp://sunsite.sut.ac.jp/pub/archives/gnu/gcc/gcc-2.95.3.tar.gz"
tar zxvf gcc-2.95.3.tar.gz
cd gcc-2.95.3

// インストール先を指定
./configure --prefix=/usr/local/gcc-2.95.3 --enable-shared

make CFLAGS='-O2 -march=i686' LIBCFLAGS='-O2 -march=i686' \
 LIBCXXFLAGS='-O2 -march=i686 -fno-implicit-templates' bootstrap
make install

ln -s /usr/local/gcc-2.95.3 /usr/local/gcc2
PATH を変更して、gcc 2.95.3 が正しく呼び出されるか確認します。
export PATH=/usr/local/gcc2/bin:$PATH

// バージョンチェック
gcc -v

 gcc version 2.95.3 20010315 (release)

// 環境変数 CXX でコンパイラを指定
CXX="gcc -O3" ./configure --prefix=/usr/local/mysql-5.0.89\
 --with-charset=utf8 --with-extra-charsets=complex\
 --with-named-curses-libs=/usr/lib/libncurses.so.5
もちろん環境変数PATH はコンソールにログインしている間が有効なので、 再ログインすれば元通りgcc4.1 になります。

電源ボタンでシャットダウンスクリプトを走らせる

電源ボタンによるシャットダウンは、acpid サービスによって実現されています。

acpid のイベントスクリプトを編集する

/etc/acpi/events にイベントとアクションを記述したファイルを配置します。
cd /etc/acpi/events
vi power.conf

 // action を変更
 action=/shutdown.sh

消えたファイルを復元する [extundelete]

extundelete はext3 ファイルシステムで誤って削除したファイルを復元するソフトです。

コンパイル

// コンパイラをインストール
yum install gcc gcc-c++ libstdc++ -y


tar -jxvf extundelete-0.2.0.tar.bz2
cd extundelete-0.2.0.tar.bz2

./configure
make
make install

復活

デバイスを指定して復元を試みます
extundelete --restore-all /dev/hda1

GRUB shell が立ち上がってしまう。

OS が起動せずGRUB shell が立ち上がってしまうのはMBR が壊れたからです。Linux レスキュー(netinstall 版でも可)を 立ち上げてそこからのシェルから修復します。
chroot /mnt/sysimage
grub-install

DD コピー

dd if=/dev/sdb of=/dev/sdc conv=sync,noerror bs=4096

iptables によるDNAT

// [192.168.23.3:5550(listen, Lan1) - 192.168.8.3(Lan2)] - 192.168.8.33:5555(Lan1)
iptables -t nat -A PREROUTING -m tcp -p tcp --dst 192.168.23.3 --dport 5550 -j DNAT --to-destination 192.168.8.33:5555
iptables -t nat -A POSTROUTING -m tcp -p tcp --dst 192.168.8.33 --dport 5555 -j SNAT --to-source 192.168.8.3

// forward accept
iptables -A FORWARD -m tcp -p tcp --src 192.168.0.0/16 --dport 5550 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

// DNAT, SNAT(return NAT)
iptables -t nat -A PREROUTING -m tcp -p tcp --dst 192.168.23.3 --dport 5900 -j DNAT --to-destination 192.168.8.33:5900
iptables -t nat -A POSTROUTING -m tcp -p tcp --dst 192.168.8.33 --dport 5900 -j SNAT --to-source 192.168.8.3

// forward accept
iptables -A FORWARD -m tcp -p tcp --src 192.168.0.0/16 --dport 5900 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT