渡米生活。(日記)

渡米生活。本家から切り離しました。あまり渡米生活に関係のないプログラムネタや音楽ネタなど。

Scientific Linux 6.3またはCentOS7インストールログ1:インストール

職場のマシンを一斉にSL6.3にアップデートすることになったので、そのメモ。完全に自分用なので、不親切です。すみません。。

使用マシン:DELL PowerEdge T410, 自作PC

0)データのバックアップ。

1)Scientific Linux 6.3またはCentOS7のisoイメージをとってくる

インストールディスクを作る。ここはMacで作業。
ディククイメージは、CERNからとってくるとダウンロードにえらく時間がかかるので、国内ミラーサーバからとってくる。
以下、ターミナルで作業。

$ ftp anonymous@ftp.kddilabs.jp
(パスワードを聞かれるので何も入力せずにリターン)
ftp> cd /Linux/packages/scientificlinux/6.3/x86_64/iso
ftp> get SL-63-x86_64-2012-08-02-Everything-DVD1.iso
ftp> get SL-63-x86_64-2012-08-02-Everything-DVD2.iso

とってきたら、ディスクユーティリティでこれを2枚のDVDに焼く。

2918/2/20 追記:
CentOS7にアップデートするのに、やはりMacBook 2012 MidのSuper Driveで焼こうとしたら、3枚試して3枚ともエラーしました。結局BuffaloのBDDrive + Toast14の組み合わせで、かつ速度をx2まで落として作成したら使えるDVDになりました。

※マシンが古すぎてDVDが読めない、という場合は仕方がないのでネットワークインストールを試す。
以下のサイトに詳細があります。
Scientific Linux 6.1をネットワークインストールする

2)インストール

まず、DVD1の方をマシンにつっこんで、再起動。
起動時にF11を押して起動ディスクをOptical Driveに変更。(このへんはBIOSによる)
あとは、インストーラの指示に従うだけ。

※途中でディスク2に変更しろ、と言われたが、何故かディスク1が取り出せなくなり、昔ながらの伸ばしたクリップの先で強制排出をやるはめに。

2.5)ネットワークドライバのインストール

実は、インストールマシンは自作で、マザーボードはASRockのB85M-ITXとZ97M-ITXでした。これらのボードは、オンボードLANに Qualcomm Atheros QCA8171 というのが乗ってまして、これはScientific Linux 6系列では未サポートです。CentOS7ではすでにサポートされています。
自分のマシンに何が乗っているかは、lspciコマンドで調べます。
たいていの場合は、調べた名前で検索をかければ、誰かがネットに解決法を上げてくれています。

で、このネットワークコントローラの場合の解決方法は、RedHat 未サポートドライバを提供してくれるelrepoにお願いする、ということの模様。

http://elrepo.reloumirrors.net/elrepo/el6/x86_64/RPMS/

ここから、
kmod-alx-0.0-8.el6.elrepo.x86_64.rpm

をとってきてUSBにコピー。(勿論これはネットに繋がっているマシンでやる)
※最新バージョンのkmod-alx-0.0-9.el6.elrepo.x86_64.rpmは、なんかいろいろ足りない、といってインストールできない。LINUXパッケージが発表された頃に公表されたrpmを使う方がよさそう。

こいつを、新マシンに持っていって、

$ su
# rpm -ivh kmod-alx-0.0-8.el6.elrepo.x86_64.rpm

これでドライバは入りましたが、インストール時にNICが認識されなかったので、/etc/sysconfigの下にnetworkファイルがありません。
このままではネットワーク使えないので、手動で作ります。

# cd /etc/sysconfig
# vi network
NETWORKING=yes
HOSTNAME=test-007
:wq
# shutdown -r now

test-007は勿論正しいHOSTNAMEに変えて下さい。
ようするに、networkファイルに、NETWORKING=yesと正しいホストネームの2行が書かれていればOK.

これで、ネットワークを認識するようになりました。
(Z97M-ITXは折角無線LANももっているのだけど、これは認識しなかった。別の作業が必要みたいだけど、とりあえず有線が動いていればいいので放置。)

3)ユーザーの設定

ログインアカウントを作成。
ユーザID、グループIDは今迄使ってきたものを使用。

4)ネットワーク接続前の設定

rootでログインして作業。
※ネットのケーブルに繋ぐ前にセキュリティセットアップ

/etc/ssh/sshd_config

#以下冒頭のコメントアウトを外してyesをnoに変更
PermitRootLogin no
MaxAuthTries 6

#セーブしたらsshd restart
# /etc/init.d/sshd restart
# CentOS7の場合はこっち
# systemctl restart sshd.service

suできるユーザーを制限
(user1, user2にはsuを許すアカウント名を入れる)
この結果、wheelに入っていない人はsu hogeも出来なくなるので注意。
rootにsuできる人を制限する機能だといいんだが……
(まあ、su hogeしたい時はssh hoge@localhostで入ればいいか。)

# vi /etc/group
wheel:x:10:root,user1,user2

# vi /etc/pam.d/su
# 以下の行がコメントアウトされているので、冒頭の#を消す
auth required /lib/security/$ISA/pam_wheel.so use_uid

/etc/hosts
いくつかのマシンでクラスターを作っているので、いちいちDNSに問い合わせずに済むよう、hostsを登録。

/etc/nsswitch.conf

#以下のようになっていれば良し
hosts:   files dns
ファイヤーウォール設定(iptables)

最近職場のネットワークがハックされたので、ネットにつなぐ前にファイヤーウォールを設定する。

まず、以下の内容をfirewall.sh(名前はどうでもいい)というファイル名で保存。(もちろんlocal IPsには正しいIP addressを入れる。)

※とりあえず、このくらい塞いどけばすぐにハックされることはないだろう、という程度の設定です。
適宜ご自身の環境に合わせて変更してご利用ください。

#!/bin/sh

#---------------------
# local IPs
#---------------------

localIP='XXX.XXX.XXX.XXX'

#または自動設定。デバイス名がem1の場合。
#localIP=`/sbin/ifconfig em1 | grep Bcast | awk '{print $2}' | sed -e 's/addr://'`

anyhost='0.0.0.0/0'

mymachine1='XXX.XXX.XXX.XXX'
mymachine2='XXX.XXX.XXX.XXX'

trustedIPs="$mymachine1 $mymachine2"

#---------------------
# clear filtering rule
#---------------------

/sbin/iptables -F

#-------------
# accept local
#-------------

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

#-------------
# allow established connection
#-------------

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#---------------------------------------
# accept all packets from trusted IPs
#---------------------------------------

for i in $trustedIPs; do
   /sbin/iptables -A INPUT -s $i -j ACCEPT
   /sbin/iptables -A OUTPUT -d $i -j ACCEPT
done

#------------
# allow ping
#------------

# inbound
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -d $localIP -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp --icmp-type echo-reply -s $localIP -j ACCEPT

# outbound
/sbin/iptables -A OUTPUT -p icmp --icmp-type echo-request -s $localIP -j ACCEPT
/sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -d $localIP -j ACCEPT

#-------------------------------
# allow ssh
#-------------------------------

# inbound
/sbin/iptables -A INPUT -p tcp -s $anyhost -d $localIP --dport 22 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -s $localIP -d $anyhost --sport 22 -j ACCEPT

# outbound
#/sbin/iptables -A INPUT -p tcp -s $anyhost -d $localIP --sport 22 -j ACCEPT
#/sbin/iptables -A OUTPUT -p tcp -s $localIP -d $anyhost --dport 22 -j ACCEPT

#------------
# allow DNS
#------------
/sbin/iptables -A INPUT -p udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

#------------
# logging
#------------
/sbin/iptables -N LOGGING
/sbin/iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
/sbin/iptables -A LOGGING -j DROP
/sbin/iptables -A INPUT -j LOGGING

#------------
# set policy
#------------
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP

こちらのサイトを参考にさせていただきました(というかほとんど丸写し)。
http://www.rapidsite.jp/support/manual/rv7/e_90.html

sshの設定で、outboundの設定がちょっとトリッキー。
ネットでおちてる例題はホスティング会社が提供するリモートマシン用の設定であることが多くて、inboundの設定しか書かれていないことが多い。これだけだと、外から入るのはできるのだけど、内側から外のマシンへのsshが通らない。

上の例は、policy OUTPUT ACCEPT と、ESTABLISHEDは通す設定があるため、outboundの設定をコメントアウトしても通る。でも、このどちらかの条件が欠けた場合は、この部分のコメントアウトをはずす必要があります。

OUTPUTポリシーをACCEPTにするかどうかは随分迷ったのだけれど、DROPにすると多分オートアップデートなんかもそれぞれポートを設定してやらなきゃならないんだろうな、と思ったら、頑張る気が失せた。ESTABLISHEDを通すことにしたのも同じ理由。
(OUTPUTの設定がいちいち書かれているのは最初OUTPUTポリシーをDROPにしていた名残なので、気になる人は消してもよい)


CentOS7の場合は以下の作業を先にやる

# systemctl stop firewalld
# systemctl disable firewalld
# yum install iptables-services

ネットにつなぐ前に以下のコマンドを実行。

# sh firewall.sh
# /sbin/service iptables save

2行めのコマンドで、次回起動時からも同じ設定が利用されるようになる。


既にネットワークが開通していて、リモートからサーバにログインしてサーバの設定を行っている場合は、別のシェルを開いてためしに外からのsshが通るかどうか確認してから親シェルを閉じないと、二度と接続できなくなる恐れがあるので大変危険。また、/sbin/iptables -Fの直後でコケると現在開いている窓のプロンプトすら返ってこなくなります…デフォルトは全開ではなくて全閉なのか…

5)ネットワーク設定

面倒なのでROOTでログインしてシステム→設定→ネットワーク接続で設定。
(GUIでログインするな、とか怒られるけど)

ポイントは、

1)まず既に登録されている設定を消去(設定名の付け方がアホで、最悪の場合勝手に設定ファイルを作っておきながらあとで自動読み込みできない、とかになる)

2)新しく接続を追加。

というステップを踏む事。

あとは、以下に注意して設定する。

  • 接続名をデバイス名に変更。em1など。デフォルトの漢字まじりの設定名はファイル名に漢字が入ってしまい、あとで読み込めなくなる(アホや……)
  • 「この接続を完了するにはIPv4アドレス化が必要になります」の項目はチェックつけたままでよし
  • 最後に「すべてのユーザーに利用可能」に必ずチェック!

6)ディレクトリ名が日本語なのはうざいので英語名に変更

普通は以下のコマンドを実行

$ export LANG=C; xdg-user-dirs-gtk-update

"don't ask me this again" にチェックを入れて、実行

しかし、これCUIでは動かないし、いちいちこれをやるのは本当にうざいので、もうmvコマンドで名前変更した。別にお仕着せのディレクトリはいらん、という人はいっそ全削除でもよいのでは。
以下スクリプト

#/bin/sh

mv ダウンロード Downloads
mv テンプレート Templates
mv デスクトップ Desktop
mv ドキュメント Documents
mv ビデオ Videos
mv 音楽 Music
mv 画像 Pictures
mv 公開 Public

7)yumのアップデート

Scientific Linux 6.3の場合、デフォルトで1日1回yumのオートアップデートが実行される。Kernelなど、勝手にアップデートされては困るようなものは、デフォルトではオートアップデートはしない仕様になっている。
(それはいいのだが、なぜ真っ昼間にこいつが走るのか……。夜中に走ることになってるはずなのに。この時間変更できないのかね。もしかして、夜中って、アメリカの夜中?!)
今はどうやらランダムに時間を選んでいるらしい。続けて真っ昼間に走ったのは運がわるかったのか?

//デフォルトのダウンロードサーバは重いので一番早いミラーを選ぶようにする
# yum install yum-plugin-fastestmirror -y


これで、とりあえずは使えるようになります。