とあるエンジニアの備忘log
2012年12月19日水曜日
NFS v3 と v4 設定まとめ (RHEL/CentOS/Ubuntu編)
NFSのセットアップ手順を簡単にまとめておきます。 NFS v3以前と v4とでポリシーがかなり違うので、それぞれの方法をまとめておきます。 まずは、 RHEL/CentOS でのやり方をメインに説明します。最後に Ubuntu でやる場合の差分情報もまとめておきました。 ### REEL/CentOS 編 #### NFSv3以前の場合 CentOS の場合、nfs-file-server パッケージはデフォルトでインストールされています。 サーバー側の設定は `/etc/exports` に directory client(option,...) client(option,...) ... の形で記述します。 /path/to/dir1 nfs.client.addr(rw,sync) /path/to/dir2 nfs.client.addr(rw,sync) みたいな感じ。 同じクライアントへ、複数のディレクトリを公開することもできる。 設定したら # chkconfig nfs on # service nfs restart RHEL や CentOS はデフォルトでファイアウォールでブロックされているので、システム->管理->ファイアウォールで無効にしておきます。 (ポート番号が固定されないらしいので。) クライアント側から # mount nfs.server.addr:/path/to/dir1 /mount/point1 # mount nfs.server.addr:/path/to/dir2 /mount/point2 みたいな感じでマウントできます。 マウント対象のディレクトリパスは、実際にサーバーが公開されているディレクトリパスよりも上の階層、下の階層も指定できます。 # mount nfs.server.addr:/ /mount/point のようにサーバー側のルートディレクトリも指定できる。 もちろん、公開されているディレクトリしか見えないわけですけど。 #### NFSv4 の場合 v3以前は、サーバーはディレクトリごとに個別に export し、クライアント側もディレクトリごとに個別にマウントしていた。 それに対して、v4 ではサーバーは一つの仮想的なファイルシステムを export し、クライアント側からはそれがサーバーのルートディレクトリとして見えます。 サーバー側の `/etc/exports` の設定は /path/to/dir nfs.client.addr(rw,sync,fsid=0) などのようにします。 `fsid=0` を指定するのがポイントです。 クライアント側はv3以前と同じように # mount nfs.server.addr:/ /mount/point のようにする。`-t nfs4` はつけてもつけなくても変わらなかった。 v4では、クライアントから見た時のディレクトリの見え方が異なります。 v3以前は サーバー側の `/path/to/dir` はクライアントからも `server:/path/to/dir` として見えました。 v4の場合、サーバー側の `/path/to/dir` はクライアント側からは `server:/` に見えます。 前述の通り、v4 では 仮想的なファイルシステムを一つだけ作ってそれを export し、ルートディレクトリとしてクライアントに見せるというポリシーのため、別々のディレクトリを export したいときはちょっと手間がかかります。 とりあえず export するディレクトリツリーを `/export` の下に構築することにする。 例えば、 `/home/user1` と `/home/user2` を export したい場合 # mkdir -p /export/user1 /export/user2 # mount --bind /home/user1 /export/user1 # mount --bind /home/user2 /export/user2 このように export したいディレクトリを bind で `/export` の下に集めるわけだ。 `/etc/exports` の書き方は2通りあります。 1つ目は親ディレクトリに `fsid=0` を指定、子ディレクトリには `nohide` を指定する方法。 /export nfs.client.addr(rw,sync,fsid=0) /export/user1 nfs.client.addr(rw,sync,nohide) /export/user2 nfs.client.addr(rw,sync,nohide) 2つ目は親ディレクトリに `fsid=0` と `crossmnt` を指定する方法。 /export nfs.client.addr(rw,sync,fsid=0,crossmnt) 親に `crossmnt` 指定すると、子に `nohide` 指定するのと同じ効果が得られます。 後者のやり方の方が、重複する記載がないので、楽だと思います。 なお、v4ではポートが固定されるので、ファイアウォールといっしょに使いやすいです。 2049/tcp を開いておきます。 #### v3以前とv4が混在したら、、、 上記のように `/etc/exports` の書き方、つまり `fsid=0` がついているかどうかで、v3 か v4 かが判断されるわけです。 一つの `/etc/exports` の中に、v3以前の書き方とv4の書き方を混在して書くこともできるわけだが、その場合どうなるんでしょうね。実験してみました。 `/etc/exports` の記載は以下のようにします。 # v3 style /path/to/dir1 nfs.client.addr(rw,sync) /path/to/dir2 nfs.client.addr(rw,sync) # v4 style /export nfs.client.addr(rw,sync,fsid=0) /export/user1 nfs.client.addr(rw,sync,nohide) /export/user2 nfs.client.addr(rw,sync,nohide) クライアントから # mount nfs.server.addr:/ /mount/point とするとサーバーの `/export` がマウントされた。ルートディレクトリをマウントしようとすると v4 の意味に解釈されるらしい。 # mount nfs.server.addr:/path/to/dir1 /mount/point とするとサーバーの `/path/to/dir1` がマウントされた。 一応、同一サーバー、同一クライアント間で v3以前と v4 は同時使用できるみたいだ。 ただし、 #mount nfs.server.addr:/path/to /mount/point のように v3 スタイルの上位ディレクトリを指定するとアクセス拒否されるようになりました。 v3以前のやり方のほうが設定は簡単でわかりやすいとは思いますが、v4 だと - ポート番号が2049 固定でファイアウォールと一緒に使いやすい - Kerberos と組み合わせてセキュリティ面を強化 - idmapd で サーバー/クライアント間で異なるUID/GID でも対応できる などのメリットもあるので、自分は NFSv4 を使うようになりました。 Kerberosとの組み合わせ方は、後日まとめます。 ### Ubuntu編 さて、上記は RHEL/CentOS の場合ですが、Ubuntuの場合にも簡単にまとめておきます。 Ubuntu ではデフォルトでは NFS は入っていないので サーバー側は `nfs-kernel-server` パッケージをインストール。 クライアント側は `nfs-common` パッケージをインストールします。 サービス名は `nfs-kernel-server` です。 あとのやり方は RHEL/CentOS編 で説明したのと同じですので、割愛します。
2012年12月18日火曜日
NIS 設定まとめ (RHEL/CentOS/Ubuntu編)
NISの設定方法をメモっておきます。 最初に RHEL/CentOS での方法を記載し、最後に Ubuntu の場合の差分を記載します。 ### RHEL/CentOS編 CentOS 6.3でやってみました。 NISに関連するパッケージは以下です。 - ypserv : NISサーバ - ypbind : NISクライアントとNISドメインをバインドするデーモン - yp-tools: NISクライアントプログラム集 ypbind と yp-tools はデフォルトで入っているはず。 ypserv はサーバー側にだけ必要になります。 #### NISサーバー側の設定 # yum install ypserv でインストールします。 `/etc/sysconfig/network` に以下のようにNISドメイン名を追加する。NISドメイン名はとりあえずサーバーとクライアントで共通であればよいです。普通、ホスト名のドットより後ろの部分を使います。 NISDOMAIN=
ypserv サービスを起動しておく。 `/var/yp/Makefile` の `all:` ターゲットの部分を見ればどのマップ(=NISで管理されるファイル)が作成されるかがわかります。 とりあえずデフォルトのままでOKです。 NISデータベースを初期化します。 32bit OSなら # /usr/lib/yp/ypinit -m 64bit OSなら # /usr/lib64/yp/ypinit -m を実行する。 #### NISクライアント側の設定 RHEL/CentOS なら ypbind と yp-tools はデフォルトで入っているので、特にインストールするものはなし。 `/etc/yp.conf` に以下のような設定を記載する domain
server
`/etc/nsswitch.conf` を開き passwd: files shadow: files group: files のようになっているところを passwd: nis files shadow: nis files group: nis files のように書きかえます。 これで、`passwd`, `shadow`, `group` は NIS ⇒ ローカルファイルの順番に見にいってくれるようになります。 `/etc/nsswitch.conf` の設定を間違えると最悪起動しなくなるので、ご注意ください。(`files` を `file` と書き間違えて、起動しなくなった経験あり)。 もし起動しなくなった場合、KNOPPIX とかで起動して、ハードディスクをマウントし、 `/etc/nsswitch.conf` を正しく修正するのが手っ取り早いと思います。 そして ypbind のサービスを起動する。 # ypwhich を実行し、でNISサーバーとバインドできているのを確認できればOKです。 ちゃんと動いていれば # ypcat passwd とすることでマップの中身が読めるはず。 ユーザー認証を NISで管理できても、ホームディレクトリが作られていなかったら、まともにログインできません。したがって、NIS単独で使うことはあまりなくて、NIS と NFS (さらには autofsも)と組み合わせるのが通常の運用形態だと思います。 NFSのセットアップ方法は次回まとめます。 最後に `yppasswd` コマンドでNIS経由でパスワード変更できるようにします。 NISサーバー側で `yppasswdd` サービスを起動させておきます。すると、NISクライアント側は `yppasswd` コマンドでパスワード変更できるようになります。 ちゃんと設定したつもりなのに、最初は $ yppasswd とすると yppasswd: yppasswdd not running on NIS master host ("localhost.localdomain") というエラーメッセージが出てうまくいきませんでした。 しばらく考えて、エラーの意味がわかった。 NISサーバーもNISクライアントもホスト名が `localhost.localdomain` になっていて、混同されていたようです。 CentOS6.3 はインストーラーがバグっているみたいで、インストール時にホスト名に何を入力しても、結局 `localhost.localdomain` になってしまう。 (RHELのインストーラーは大丈夫です。) で、そのままほったらかしにして、サーバー側もクライアント側も `localhost.localdomain` でかぶっていると `yppasswd` が動きません。 ホスト名は `/etc/sysconfig/network` で HOSTNAME=<ホスト名> で設定できるので、ここで NISサーバーとNISクライアントに別々の名前をつけてあげましょう。 例えば、 `HOSTNAME=my.nisserver` というホスト名にしたとする。 そして、もう一回 # /usr/lib/yp/ypinit -m としてあげると next host to add: my.nisserver next host to add: のように 今つけた、NIS サーバー名が入っている。 そして、クライアント側の `/etc/hosts` に 192.168.11.5 my.nisserver のように NIS サーバーのIPアドレスとの対応を書いておけば `yppasswd` がうまくいきます。 以上が、RHEL/CentOSの場合のやり方です。 ### Ubuntu編 Ubuntu 12.04LTS でのやり方も簡単にまとめておきます。 Ubuntu の場合、サーバーもクライアントも $ sudo apt-get install nis でインストールします。 インストール途中で NISドメインを聞かれると思いますので適当なドメイン名を入れます。 このNISドメイン名は `/etc/defaultdomain` に書き込まれます。 NISサーバー側は `/etc/default/nis` という設定ファイルを開いて NISSERVER=false という行を NISSERVER=master に変更します。 ypserv サービスを起動し $ sudo /usr/lib/yp/ypinit -m でデータベース作成します。 NISクライアント側は `/etc/yp.conf` を編集して domain
server
という設定を記載します。 `/etc/nsswitch.conf` を開き passwd: compat shadow: compat group: compat のようになっている部分を passwd: nis compat shadow: nis compat group: nis compat のように変更。 ypbind サービスを起動します。 なお、Ubuntu 12.04 ではデスクトップマネジャーが lightdm になっていて、ローカルに存在するアカウント名しか選択できないようになっております。 そのままでは任意のアカウント名が入力できないので NISで管理しているアカウント名を入力ができないことになります。 そこで、以下のように入力します。 $ /usr/lib/lightdm/lightdm-set-defaults -m true ログイン画面に「ログイン」という項目が出てきて、任意のアカウント名が入力ができるようになります。
2012年12月15日土曜日
標準エラー出力をファイルに落としたい (teeの標準エラー出力版)
`tee` というコマンドがあります。 「標準入力から読んだ内容を標準出力とファイルに書きだす」というものです。 例えば、 $ foo | tee logfile とすると、 `foo` コマンドの標準出力は、 `logfile` に書き出されます。 なおかつ、標準出力は標準出力として、標準エラー出力は標準エラー出力として出力されます。 ログを記録するときには便利なコマンドですね。 そこで思ったのは、 `tee` コマンドの標準エラー版に相当するものを実現できないかと思いました。 コンパイルのときの warning とかは通常、標準エラー出力へ出てきます。 標準エラー出力をファイルに記録しておいて、 warning を潰していくのに使いたいのです。 で、考えたシェルスクリプトが以下です。 #!/bin/sh exec 3>&1 foo 2>&1 >&3 3>&- | tee logfile >&2 `foo` コマンドの標準エラー出力を `logfile` に書き出します。 なおかつ、標準出力は標準出力として、標準エラー出力は標準エラー出力として出力されます。 `m>&n` は 「`n` 番の出力先と同じものを `m` 番へコピーする (`dup2` する)」という意味です。 `m>&-` は 「`m` 番を閉じる」という意味です。 また、 `exec` は引数にコマンドが与えられていない場合、リダイレクト処理はカレントシェルで効果を表します。 つまり、上記のスクリプトは、 `foo` コマンドの標準出力と標準エラー出力を入れ替えて、 パイプに流し、さらに `tee` コマンドの標準出力(= `foo` コマンドの標準エラー出力) を標準エラー出力に戻す、ということをしています。 (後日、bash なら `foo |& tee logfile >&2` のように簡単に書けることを知った。。) さらに、 `foo` が異常終了した場合に、即座にシェルスクリプトを止めたいときは、以下のようにします。 パイプに渡してしまうと、そのままでは終了ステータスを取れませんので、ちょっと複雑になっております。。 #!/bin/sh exec 3>&1 status=$({ { foo 2>&1 >&3 3>&- 4>&-; echo $? 1>&4 3>&- 4>&-;} | tee log >&2 3>&- 4>&- ;} 4>&1) if [ "$status" != "0" ]; then set -e /bin/false fi bash の `$PIPESTATUS` の実現方法は[こちらのページ](http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8)で勉強させていただきました。
2012年12月4日火曜日
シェルで四則演算
### 方法1 ### 16進数は使えません。 $ expr 1 + 1 2 $ expr 0x10 + 0x0F expr: 整数でない引数 ### 方法2 ### 16進数も使える。 $ echo $(( 1 + 1 )) 2 $ echo $(( 0x10 + 0x0F )) 31 ### 方法3 ### bashの場合は以下も可。 $ echo $[ 1 + 1 ] 2 $ echo $[ 0x10 + 0x0F ] 31 ### 方法4 ### bash の場合、以下のようなこともできるらしい。 $ i=0 $ echo $i 0 $ ((i++)) $ echo $i 1
2012年11月15日木曜日
ARM 命令の条件ビット
ARM 命令の条件フィールドについてまとめておきます。 - N フラグ: 命令の結果を符号付き整数と見て負のときにセット、その他の時にクリアされる - Z フラグ: 命令の結果がゼロであるときにセット、その他の時にクリアされる。 - C フラグ: 比較命令(`CMN`, `CMP`)を含む加減算においてキャリー、 またはボローが発生したときにセット、その他の時にクリアされる。 また論理演算時のシフト動作ではシフトによるキャリアウトの結果が C フラグに反映される。 - `V`フラグ: 加減算命令において符号付きオーバーフローが発生するとセット、 それ以外の時に零セットされる。 `ADDS` 命令の場合、 `ADDS
,
,
` の動作としては以下のようになる。ただし、 `Rd` が `r15(pc)` ではない場合。 Rd = Rn + shifter_operand N Flag = Rd[31] Z Flag = if Rd == 0 then 1 else 0 C Flag = CarryFrom(Rn + shifter_operand) V Flag = OverflowFrom(Rn + shifter_operand) `SUBS` 命令の場合、 SUBS
,
,
の動作としては以下のようになる。ただし、 `Rd` が `r15(pc)` ではない場合。 Rd = Rn - shifter_operand N Flag = alu_out[31] Z Flag = if alu_out == 0 then 1 else 0 C Flag = NOT BorrowFrom(Rn - shifter_operand) V Flag = OverflowFrom(Rn - shifter_operand) `CMP` 命令は結果をレジスタにセットしないが、フラグのセットのされ方は `SUBS` 命令と同じ。 C は符号なし整数として、Carry/Borrow が発生したかを示すのに対し、 V は符号あり整数として、Overflow 発生したかを示している。 ##### 命令を条件付きで実行する場合の条件フィールド ##### cond Mnemonic Meaning Condition flags ----------------------------------------------------------- 0000 EQ Equal Z==1 0001 NE Not equal Z==0 0010 CS(HS) Carry set C==1 0011 CC(LO) Carry Clear C==0 0100 MI Minus, negative N==1 0101 PL Plus, positive or zero N==0 0110 VS Overflow V==1 0111 VC No Overflow V==0 1000 HI Unsigned higher C==1 and Z==0 1001 LS Unsigned lower or same C==0 or Z==1 1010 GE signed greater than or equal N==V 1011 LT signed less than N!=V 1100 GT signed greater than Z==0 or N!=V 1101 LE Signed less than or equal Z==1 or N!=V 1110 None(AL) Always Any - HS (Unsigned higher or same) は CS - LO (Unsigned lower)は CC と同じ。 やってしまいがちなのは、符号なし整数の比較(例えばアドレスの比較)をしたあと、 条件判定に `lt` や `gt` などを使っているケース。 組み込み系でよくあるブートシーケンスで RAM へコードを展開しているコードですが。。 copy_loop: ldmia r0!, {r3 - r10} @ copy from source address [r0] stmia r1!, {r3 - r10} @ copy to target address [r1] cmp r0, r2 @ until source end addreee [r2] ble copy_loop ここで `r1` に `0x70000000`, `r2` に `0x80000000` が入っていたりすると、 意図せずに、ループから抜けてしまいます。 `le` は `signed` での比較になるわけだから、 `0x70000000` と `0x80000000` を比較して「小さい」とはならずに `0x70000000` と `-0x80000000` を比較して 「大きい」という判定になるはずだから。 というわけで、この場合 `ble` ではなくて `bls` を使うべきですね。
2012年11月13日火曜日
Linux で ZFS を使ってみた
Linux 上で ZFS を使ってみました。 対象は Ubuntu, Fedora, RHEL, CentOSあたりとします。 簡単に ZFS を導入する方法としては 1. ZFS-FUSE (Filesystem in Userspace) を使う 2. ZFS on LINUX を使う あたりがあると思います。 ZFS はライセンス上の問題で Linux Kernel と静的にリンクできないので、 1. のようにユーザー空間で動かすか、 2. のようにローダブルモジュールにするかどっちか。いずれにしても、OS 部は従来通りに ext4 などに置かないといけないので、ZFS が使えるのはデータの部分です。 [Ubuntu 12.04 LTS Precise Pangolin で Native ZFS](http://www.blackpig.jp/?p=214) のページのようにルートファイルシステムから ZFS にしてしまう例も紹介されていますが、初心者の自分にはまだ敷居が高いので、いずれ挑戦することにします。 最初 ZFS-FUSE に触れたあと、ZFS on LINUX を導入してみることにします。 ### ZFS-FUSE ### 導入は簡単で、 Ubuntuだと $ sudo apt-get install zfs-fuse Fedora17 だと # yum install zfs-fuse 以上です。 RHEL, CentOS などは標準のリポジトリには zfs-fuse がないので、 EPEL (Extra Packages for Enterprise Linux) のリポジトリを追加すればOKです。 (EPEL の入れ方は以前 [自分的 RHEL/CentOS 6.3 で最初にやること](/2012/11/rhelcentos.html)に記載) ただし、ZFS-FUSE だといろいろと機能制限があるみたいです。 実際やってみると、パーティションのトップで `cd .zfs` でスナップディレクトリに入れる機能は動きませんでした。 なので、手軽に ZFS を使いたい人には zfs-fuse がお勧めですが、フル機能を使いたい人は以下の ZFS on LINUX の方がよいかもしれません。 ### ZFS on LINUX ### [ZFS on Linux](http://zfsonlinux.org/) のページの手順にしたがって tarball をダウンロードし、ソースからコンパイルすることにします。 こちらは ローダブルモジュールとはいえ、 ZFS がカーネル空間で動くようになっていると思います。 ページのインストール方法そのままですが、とりあえず RHEL 6.3 / CentOS 6.3 64bit版でやってみました。 まずは SPL のインストールから。 # yum groupinstall "Development Tools" $ cd spl-0.6.0-rc11 $ ./configure $ make rpm # rpm -Uvh *.x86_64.rpm 続いて、ZFS のインストール # yum install zlib-devel libuuid-devel libblkid-devel libselinux-devel parted lsscsi $ cd zfs-0.6.0-rc11 $ ./configure $ make rpm # rpm -Uvh *.x86_64.rpm これで完了です。 CentOS だと上記のままでOKでしたが、 RHEL だと標準のリポジトリに "Development Tools" がない、 lsscsi もないという状況なので、ちょっと対応がいりました。 CentOS上で `yum groupinfo "Development Tools"` で内容を表示してみると以下のようになります。 Group: Development tools Description: A basic development environment. Mandatory Packages: autoconf automake binutils bison flex gcc gcc-c++ gettext libtool make patch pkgconfig redhat-rpm-config rpm-build Default Packages: byacc cscope ctags cvs diffstat doxygen elfutils gcc-gfortran git indent intltool patchutils rcs subversion swig systemtap Optional Packages: ElectricFence ant babel bzr chrpath cmake compat-gcc-34 compat-gcc-34-c++ compat-gcc-34-g77 dejagnu expect gcc-gnat gcc-java gcc-objc gcc-objc++ imake jpackage-utils kdewebdev libstdc++-docs mercurial mod_dav_svn nasm perltidy python-docs rpmdevtools rpmlint systemtap-sdt-devel systemtap-server なので、RHEL にインストールする場合、上記の `Mandatory Packages` と `Default Packages` のカテゴリのものを全部 `yum install` でインストールしてしまえばよいです。 lsscsi については RPM search で `lsscsi-x.xx-x.el6.x86_64.rpm` をダウンロードしてきて、インストールしました。 インストールが済んだら、さっそく使ってみましょう。 まずは # zpool create tank mirror /dev/disk/by-id/foo /dev/disk/by-id/bar みたいな感じで pool を作成します。(`foo` と `bar` という2台のディスクでミラーを組んだ場合) 次に、以下のようにパーティションを作る。 # zfs create tank/home # zfs create tank/git ちょっと悩んだのは、再起動する度に、マウントが解除されてしまうこと。 再起動後に # zfs get mounted で確認すると全パーティションが `mounted=off` になってしまっている。。 確か、起動時に `zfs mount -a` が行われると man に書いてあったのに変だなぁと思って調査しました。 `/etc/rc.d/init.d/zfs` のスクリプトを読んでみて納得。 # Requires selinux policy which has not been written. if [ -r "/selinux/enforce" ] && [ "$(cat /selinux/enforce)" = "1" ]; then action $"SELinux ZFS policy required: " /bin/false || return 6 fi というコードが入っていて SELinux のせいで、 ZFS が自動マウントされなくなっているようでした。 というわけで SELinux を OFF にします。 `/etc/selinux/config` の SELINUX=enforcing を SELINUX=disabled に変更して再起動すると、無事に ZFS が自動的にマウントされるようになりました。 ### 結局どっちがいいのか ### フル機能が使えるということで最初は ZFS on LINUX を使っていたのですが、運用してみると結構面倒だということがわかりました。 ディストリビューションでは定期的に Kernel がアップデートされます。 Kernel が更新されるたびに ZFS のモジュールもビルドし直さなくてはなりません。 というわけで、自分としては zfs-fuse の方が使いやすいと思いました。
自分的 RHEL/CentOS 6.3 で最初にやること
自分用の備忘録です。 #### RHN に接続 #### RHEL のみ。CentOS では不要。 #### yum install でパッケージをいろいろインストール #### - gcc - emacs - cvs - subversion - git - gitk - git-cvs - git-svn - gimp - indent # GNU indent - man-pages-ja # for Japanese man page - kernel-devel # for building Loadable Modules #### お好みでRPMforge リポジトリを追加 #### [rpmforge-release](http://pkgs.repoforge.org/rpmforge-release/) から自分用の arch で、一番新しいものをダウンロードしてくる。 x86_64 だと現在のところ、`rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm` が最新のようだ。 rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm でインストール。 #### さらにお好みで EPEL (Extra Packages for Enterprise Linux) リポジトリを追加 #### [epel-release](http://download.fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html) から .rpm をダウンロードし、 rpm -ivh epel-release6-7.noarch.rpm でインストール。 #### 追加リポジトリで提供されるパッケージをお好みでインストール #### - ccache (RPMforge または EPEL) - zfs-fuse (EPEL) など。 #### 上記で提供されないパッケージを個別インストール #### - Chrome 64bit .rpm (Fedora/openSUSE版)を選択。 `google-chrome-stable_current_x86_64.rpm` をインストール。 - VirtualBox VirtualBox 4.x.x for Linux hosts -> OL6/ RHEL6 / CentOS6 を選択。 rpm をインストール。 - ccache 追加リポジトリを入れてない場合、rpm searchなどでダウンロード。 - global ソースのtarballからインストール - eclipse CentOSでは標準リポジトリにあるので `yum install` でインストール。 RHELはないので、[ダウンロードページ](http://www.eclipse.org/downloads/)から tarballをダウンロードして解凍。 #### プログレスバー非表示 #### 起動時のログを表示されたい場合。 `/boot/grub/grub.conf` で kernel 行の rhgb, quiet を削除する。 rhgb を削除: プログレスバーを非表示 quiet を削除: Kernelメッセージも表示 #### ホスト名の設定 #### RHEL の場合はインストール時にすでにホスト名を設定していれば、この手順は不要。 CentOS 6.3 の場合は、インストーラー(anaconda)のバグなのか、 インストール時に、ホスト名を設定しても、必ず localhost.localdomain に戻ってしまうので、以下のように修正。 `/etc/sysconfig/network` の HOSTNAME=localhost.localdomain の部分を書き換え。 #### 日本語入力 #### システム->設定 -> 入力メソッド -> 入力メソッドの個人設定 #### 日本語ディレクトリを英語に #### 「ダウンロード」、「テンプレート」、「デスクトップ」、「ドキュメント」、「ビデオ」、「ピクチャ」、「ミュージック」、「公開」 というディレクトリを英語にする。 $ LANG=C xdg-user-dirs-gtk-update #### Ctrlキー入れ替えなど #### 「システム」 -> 「設定」 -> 「キーボード」 -> 「レイアウト」 -> 「レイアウトのオプション」 Ctrlキーの位置 : Ctrl と CapsLock を入れ替える #### git config #### $ git config --global user.name "My Full Name" $ git config --global user.email "my.address@foo.com" $ git config --global color.ui auto #### ssh X forwading #### X で ssh を乗り越えさせる。 ssh クライアント (Xサーバー)側の設定: `/etc/ssh/ssh_config` に以下を追加。 ForwardX11 yes ### システム管理編 (ほとんど会社用) ### #### ユーザー追加 #### # adduser user1 # adduser user2 #### グループ追加 #### `gitusers` というグループを作成し、 `user1` と `user2` を加える場合、以下のような感じ。 $ sudo groupadd -g 2000 gitusers $ sudo gpasswd -a user1 gitusers $ sudo gpasswd -a user2 gitusers #### git 共有リポジトリ作成 #### 例えば、 `/var/git/myrepository.git` を作成する場合 # mkdir /var/git # cd /var/git # mkdir myrepository.git # cd myrepository.git # chmod 2775 . # chgrp gitusers . # git --bare init --shared #### ssh server #### デフォルトで openssh-server がインストールされているので、 # chkconfig sshd on # service sshd start でOK。 #### apache #### デフォルトで httpd がインストールされているので、 # chkconfig httpd on # service httpd start だけでOK。 `/etc/httpd/conf/httpd.conf` を見ると、デフォルトでは Document Root は /var/www/html になっている。 とりあえずそのまま使用するのなら、 /var/www/html の下にコンテンツ追加すればよい。 #### gitweb #### # yum install gitweb `/etc/httpd/conf.d/git.conf` が追加される。 このまま使うなら、ブラウザが http://host_name/git へアクセスすると、/var/www/git を見に行く。 /var/www/git/ はすでに CGI がセットアップされているので触る必要はない。 あとは `/etc/gitweb.conf` で our $projectroot = "/var/git"; などと設定すると、 /var/git 以下のリポジトリが gitweb で公開される。 なお、SELINUX がONだとたぶん gitweb が動きません。 `/etc/sysconfig/selinux` の SELINUX=enforcing を SELINUX=disabled に変更して SELINUXを無効にする。 #### postfix #### 最初から入っているので、そのまま使える。 #### git push でメール送信 #### スクリプトは既に入っている。 例えば、 /my/git/repository.git へ push されたときに、 address@you.want.to.send へ メールを飛ばす場合以下のようにする。 $ cd /my/git/repository.git/hooks $ ln -s /usr/share/git-core/contrib/hooks/post-receive-email post-receive $ git config hooks.mailinglist address@you.want.to.send #### git daemon #### # yum install git-daemon-run $ sudo sv start git-daemon $ > /var/git/myrepository.git/git-daemon-export-ok #### ntp daemon #### デフォルトでインストールされているので # chkconfig ntpd on でオンにする。 ### プロキシ関連の設定 (これもほぼ会社での用途) ### #### yum #### `/etc/yum.conf` に以下を記載。 proxy=http://your.proxy.address.co.jp:8080/ #### Chrome (chromium) #### 「設定」 -> 「詳細設定を表示...」 -> 「ネットワーク」 -> 「プロキシ設定の変更...」 システム全体に反映ボタンを押すと、`/etc/apt/apt.conf`, `/etc/environment` あたりに書き込まれる。 chrome(chromium) のプロキシ設定はユーザーごとに必要。 #### firefox #### 編集 -> 設定 -> 詳細 -> ネットワーク -> 接続設定... #### git プロトコル #### corkscrew で乗り越える。 $ sudo apt-get install corkscrew `/usr/local/bin/git-proxy` というファイルを作って、以下を記載。 #!/bin/sh corkscrew your.proxy.address.co.jp 8080 $1 $2 `~/.profile` に以下を記載 export GIT_PROXY_COMMAND=git-proxy #### subversion #### ~/.subversion/servers の [global] セクションに以下を追加。 http-proxy-host = your.proxy.address.co.jp http-proxy-port = 8080 #### postfix #### `/etc/postfix/main.cf` を開き `relayhost` の部分に会社指定の SMTPサーバーのIPアドレスを指定 #### ntp daemon #### プロキシ越えのやり方がわからない(できない?)ので、 `/etc/ntp.conf` で server の部分を会社指定のものに書き変え。
新しい投稿
前の投稿
ホーム
登録:
投稿 (Atom)