Debian運用での話題
Debianを運用していて必要となるさまざま話題について。
HDDのマウント設定
HDDをフォーマットして、mountコマンドで動作確認して、
mount /dev/sdb1 /home/s1
問題なければシステム起動時に自動マウントさせるためには、/etc/fstab ファイルに設定します。 たとえば、
/dev/sdb1 /home/s1 ext3 defaults 0 0
次のWebサイトの情報を参考にしました ここから
HDDの消去コマンド
10MBのブロックサイズでゼロを書き込む # dd if=/dev/zero of=/dev/hda bs=10MB
もしくは 乱数を2回書き込んだ後,ゼロフィルを実行 # shred -n 2 -z /dev/hda
HDDの修復コマンド(fsck)
HDDを修復する方法
起動中のHDDはfsckコマンドで修復できません。アンマウントして修復できるような環境で実行します。
ディスクの確認 # fdisk -l
HDDのアンマウント # umont /dev/xxxx (デバイス名)
修復 # fsck -v -y /dev/xxxx (デバイス名)
VNCサーバー
vnc4serverをインストールする場合
1)apt-get install vnc4server もしくは aptitude -y install vnc4server
2) /etc/vnc.conf を新規作成し、以下の設定を追加
$geometry = "2048x1024";
$depth = "24";
3) suになるか sudoコマンドでVNCパスワード作成
vncpasswd
4) .vnc/xstartup に Gnomeセッションの起動スクリプト追加
exec gnome-session &
5) VNCサーバーの起動 vncserver :1 停止 vncserver -kill :1
Debian 8 (jessie)の場合、GNOMEではVNCサーバーに接続エラーが起きるので、GUI環境をGNOME2ベースのMateを使用します。
詳細は ここを参照
XRDPをインストールする場合
Debian 9 Stretch GNOMEデスクトップ もしくは Mateデスクトップ
最初に xserver-xorg-legacy を削除するとGNOMEでもXRDPが実行できました。バグのようですが、詳細は、https://unix.stackexchange.com/questions/389005/using-xrdp-without-local... にて。
# apt-get purge xserver-xorg-legacy
# apt -y install xrdp
# systemctl start xrdp
# systemctl enable xrdp
Windowsのリモートデスクトップ接続で、セッションに [Xvnc] を選択し、ユーザー名とパスワードを入力し接続します。
Debian 10 Buster の場合、GNOME環境をtaskselで選択インストールすると、サスペンドやスリープなどのPC環境をサポートする機能も含めてインストールされ、サーバーとして使うには、20分ぐらいで電源が落ちたり、不要な機能がありましたので、taskselコマンドで、デスクトップ環境、GNOME環境をアンインストールして、再起動後に、taskselコマンドで、デスクトップ環境とMateだけを選択してインストールしてから再起動します。
その後、xrdpをインストールしてもつながらない場合は、 ここを参考に https://www.hiroom2.com/2017/06/19/debian-9-xrdp%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/#sec-1
「could not acquire name on session bus」のエラーが表示される場合は、/etc/xrdp/startwm.sh を編集します。
exec mate-session (これを挿入)
test -x /etc/X11/Xsession && exec /etc/X11/Xsession (これは元から)
exec /bin/sh /etc/X11/Xsession (これは元から)
起動時に「Could not acquire name on session bus」が表示される場合は、mate-sessionの起動前に
unset DBUS_SESSION_BUS_ADDRESS
を挿入してXRDPを再起動して改善しました。 詳細は http://verifiedby.me/adiary/0126
Debian 10 での設定サンプル /etc/xrdp/startwm.sh
最後の行あたりは、以下のように設定します。
unset DBUS_SESSION_BUS_ADDRESS
exec mate-session
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
ネットワークコマンド
digコマンドやnslookupコマンドが使えない場合は、追加インストールします。
- apt-get install net-tools
- apt-get install dnsutils
ファイル転送
rcp コマンド
リモートホストからローカルホストへコピー
リモートホストの「example.com」にユーザー名「user1」でログインし、「file1」というファイルをローカルホストへ「file2」という名前でコピー
- rcp [email protected]:/home/user1/file1 file2
リモート間でファイルのコピー
- rcp [email protected]:/home/user1/file1 [email protected]:/home/user2/file2
オプション
- -p コピー元の更新日時、アクセス権の情報もコピーする
- -r コピー元のディレクトリ内のファイルをすべてコピーする
scp コマンド
暗号化してファイル転送
scp [オプション] コピー元 コピー先
主なオプションは
- -C 通信を圧縮する
- -i 秘密鍵ファイル RSAまたはDSA認証の秘密鍵ファイルを指定する
- -P ポート番号 ポート番号を指定する
- -p オリジナルファイルの更新時間とモードを維持する
- -r ディレクトリ内を再帰的にコピーする
- -v プログレス情報を表示する
- -1 SSH1を使用する
- -2 SSH2を使用する
- -4 IPv4を使用する
- -6 IPv6を使用する
リモートホストからローカルにファイルをコピー、ひとつのファイル「/home/user/file1」をコピー
- scp [email protected]:/home/user/file1 ~/tmp
ローカルからリモートホストにファイルをコピー
scp コピー元ファイル ユーザ名@リモート・ホスト名:/リモート先のPATH
- scp ~/tmp/file1 [email protected]:/home/user/tmp/
リモートホストから別のリモートホストにファイルをコピー
scp [email protected]:/home/user/tmp/file1 [email protected]:/home/user/tmp/
パーティションの変更
HDDのDiskからDiskへのコピーなどでパーティションサイズを拡大させたい、結合させたいときに、Gpartedプログラムを使います。
Diskに未割当の領域があり、それを、既存のパーティションに結合させる手順
- 作業は、LiveLinuxか別のLinuxにHDDを接続して、ブートOSではないHDD状態で作業します。
- Gpartedを起動して、該当するHDDを選択
- Extendedの拡張領域を拡大、全域(できれば若干余裕領域を残す)にすることで未割当領域を拡張領域に含める
- スワップ領域を最後(未割当の後)に移動させる
- Extendedの拡張領域をスワップサイズに縮小、スワップの後の空き領域がゼロ(0)にする
- 既存パーティションを選択して、リサイズする、拡大させt、前方と後方がともにゼロ(0)にする
- これで既存パーティションが拡大
パーティション変更を実行(保留を実行)させると、Linuxブートなどのワーニングが表示されますが、とりあえず実行します。
詳細は ここ を参考にしました
Debian パッケージのインストールツール
tasksel コマンド GUI環境や初期デスクトップ環境をインストール・アンインストールするのに便利です。
PINGでサーバーの監視スクリプト
参考にしたサイト: https://qiita.com/nkojima/items/e9a851e40ef8e2af9993
#!/bin/bash
IP_LIST=(172.17.12.143 172.17.11.130 172.17.15.81 172.17.15.82)
MAILTO='送信先のメールアドレス'
LOG_FILE=./ping.log
for ip in ${IP_LIST[@]}
do
ping_result=$(ping -w 5 $ip | grep '100% packet loss')
date_result=$(date)
if [[ -n $ping_result ]]; then
echo "[SEVERE] server inactive: $ip $date_result" >> $LOG_FILE
echo $ip | mail -s "[ALERT] server down!! $date_result" $MAILTO
else
echo "[INFO] server active: $ip $date_result" >> $LOG_FILE
fi
done