パッケージ管理システムまとめ
LinuxではWindowsでいうWindowsUpdateみたいなパッケージ自動更新システムがあります。ただWindowsと違ってOSのコアモジュールからサードパーティ(?)製のアプリまで一緒くたに管理されてるのが特徴。なので、メールソフトも音楽再生ソフトも全部同じコマンドで管理できます。
ディストリによる管理コマンドの違い。
Redhat系ではyum、Debiun系ではaptというコマンドを使って管理します。ちなみにディストリによってはsynaptic(Ubuntu)、YaST2(OpenSUSE)などのGUIが用意され、それこそWindowsUpdate的な感覚でパッケージを管理できます。
yumの主なコマンド
パッケージアップデート
- アップデート可能なパッケージを一覧表示する
- yum check-update
- アップデート可能な全てのパッケージをアップデートする
- yum update
- 指定したパッケージをアップデートする
- yum update [パッケージ名]
OSインストール後に、まずyum updateするのが常套手段。-yをつけると自動応答モードとなる。
パッケージ検索/情報表示
- リポジトリに問い合わせを行い、パッケージの検索を行う
- yum search [パッケージ名]
- リポジトリに問い合わせを行い、利用可能なパッケージを一覧表示する
- yum list
- インストールされている/アップデート可能なパッケージを一覧表示する
- yum list [installed/updates]
- 利用可能なパッケージの情報を表示(パッケージ指定可能)
- yum info (パッケージ名)
yum list installedはローカルを検索するので早い。インストール/アップデート前に検索するとよい。
yum check-updateとyum list updatesは同じである。
パッケージインストール/アンインストール
- 指定したパッケージをインストール/アンインストール
- yum [install/remove] [パッケージ名]
aptの主なコマンド
パッケージアップデート
- ソフトウェアをダウンロードできるサイトのリストの更新
- apt-get update
- インストール済みのソフトウェアの更新
- apt-get upgrade
パッケージ検索/情報表示
- パッケージ情報を収集・更新する
- apt-cache gencaches
- パッケージを検索する
- apt-cache search [検索キーワード]
- パッケージの情報を開示する
- apt-cache show [パッケージ名]
apt-cache showでは、指定したパッケージのインストール情報も表示される。
パッケージインストール/アンインストール
- 指定したパッケージをインストール/アンインストール
- apt-get [install/remove] [パッケージ名]
apt-getなのに、removeが続くのが違和感。
crontabで設定したタスク実行時に、メールを送信しないようにする。
crontab -e で30分に1回タスクを動かしてるんだが、30分に1回メールが飛んできてウザい!cronの設定でメールを飛ばさないようにしたい!と思い、/etc/crontabファイルを編集。
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin #MAILTO=root MAILTO="" HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
cronは1分に1回設定ファイルを見ているらしいから、これでメール来なくなるよね…と思いきや引き続き来る。念のため service crond restart したけれどそれでも来る。こりゃおかしいと思いいろいろ調べると/etc/anacrontabというファイルがあり、そっちの設定を変更しなければいけない様子。
http://cyberam.dip.jp/linux_foundation/taskschedule/anacron_main.html
上記サイトの説明では、結局cronからanacronが呼ばれるので、anacronの設定ファイルを編集しないといけないみたい。
# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" 1 65 cron.daily run-parts /etc/cron.daily 7 70 cron.weekly run-parts /etc/cron.weekly 30 75 cron.monthly run-parts /etc/cron.monthly
上記のようにMAILTOを編集したところ、めでたくメールが来なくなりました…と言いたい所だけどまだ来る!なんで!?
実はcrontab -e で設定するのでした。
どうやらcronには2つの動かし方があるらしく。
1./etc/crontabに記載されている以下のディレクトリにスクリプトを設置し、時次、日次、週次、月次タスクとして動かす。この場合は/etc/crontabのMAILTOオプションが有効になる。
- /etc/cron.hourly
- /etc/cron.daily
- /etc/cron.weekly
- /etc/cron.monthly
2.crontab -eで設定ファイルを呼び出し、自分の好きな時間にcronを実行するようにする。この場合、スクリプトの標準出力がcrontabを設定したユーザーにメール送信される。そしてcrontab -eの設定ファイルは**/var/spool/cron/user**にある。なんと分かりにくい…。
ということで、以下のように標準出力をブラックホールに投げてやればメールは来なくなる。
UNIXの部屋 コマンド検索:crontab (*BSD/Linux)
# 標準出力のみメールしない場合 * * * * * command 1> /dev/null # 標準エラーもメールしない場合 * * * * * command >/dev/null 2>&1
vsftpdの基本設定
vsftpdでFTPサーバを動作させたのでメモ。
# vsftpd -v vsftpd: version 2.0.5
基本設定は/etc/vsftpd/vsftpd.confで行う。以下主要な部分だけを抜粋。後日追加するかもしれん。
# cat vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). # 匿名ログインを許可しない anonymous_enable=NO # # Uncomment this to allow local users to log in. # ローカルユーザーのログインを許可する local_enable=YES # # Uncomment this to enable any form of FTP write command. # FTPの書き込みコマンドを許可する write_enable=YES # # Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) # デフォルトのumaskを022とする local_umask=022 # /etc/vsftpd/user_listを有効にする userlist_enable=YES # /etc/vsftpd/user_listをホワイトリストとして動作させる userlist_deny=NO # You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). # 以下の3つの設定で、chroot_list_fileに書かれているユーザーはlocal_rootより上のディレクトリに移動できないようになる。 chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/user_list # local_root=/var/www
vsftpd: version 2.0.5には/etc/vsftpd/ftpusersというファイルがあり、ここに書かれているユーザーはftpログインできない。つまりuser_listに名前がある、かつftpusersに名前がないユーザーのみ、/var/www以下のディレクトリにftpログインできる。
なんでこんな仕様になっているかは分からないが、デフォルトではシステムアカウントがuser_listとftpusers両方に記載されており、自分のログイン用アカウントのみuser_listに記載されていた。つまり何も設定しなくても
service start vsftpd
と打てば自分のアカウントでftpログインできる。
もちろんこれは危険なので
ftpログイン専用のアカウントを作成する。
usreadd user01_www passwd user01_www usermod -s /sbin/nologin user01_www
useradd -s /sbin/nologinとすれば、システムへのログインを禁止できる。
んで、user_listから自分のログインアカウントを削除し、user01_wwwを追記すればOK。
rubyをソースからインストール→アンインストール
勉強のためにapt-getではなくソースからrubyをインストールしようと試みた。
% wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.6-p114.tar.gz % tar -xvzf ruby-1.8.6-*.tar.gz % cd ruby-1.8.6-* % ./configure % make % su # make install # exit % make clean
これでrubyが/usr/local/bin以下にインストールされた。続いてrubygemsのインストールも同じようにソースから。んで、取り合えずgem install rakeしようと思ったらエラーが…。
$ gem install rake /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- zlib (LoadError) from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/package.rb:10 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/format.rb:9 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/installer.rb:11 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:3 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:4 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:140:in `load_and_instantiate' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:65:in `[]' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:118:in `find_command' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:104:in `process_args' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:75:in `run' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:39:in `run' from /usr/local/bin/gem:24
zlibが入ってないからだなぁとかいろいろ試したんだがどうにも復旧せず、諦めてapt-getでrubyとrubygemをインストールすることにした。
その後、同じようにgem install rakeとすると同じエラーが…(汗 どうやら/usr/local/binの方を優先して読みにいっているようです。
$ which -a ruby /usr/local/bin/ruby /usr/bin/ruby $ which -a gem /usr/local/bin/gem /usr/bin/gem $ set | grep ^PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
ふむふむ。
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /usr/games
の順番なのね。これを入れ替えるのはまずそうだし、フルパス打てばいいんだけど面倒なので/usr/local/bin以下のrubyをアンインストールすることにする。
調べてみた。
調査の結果、ソースからインストールしたアプリをアンインストールするのは面倒な作業だということが分かりました。
- ITmedia エンタープライズ : Linux Tips「ソースコンパイルでインストールしたプログラムを削除したい」
- http://www.geocities.jp/abcmja/basic_usage.html
make unintallが使えない=ほとんどの場合は、Makefileの中身を見るorログを確認してインストールしたファイルを手動で消去する。あるいはこういうツールを使うのでもいいらしい。
make uninstallってほとんどないですよね。だからCheckInstall - devworks
CheckInstall Homepage
あ、けどこれCheckInstallで導入したやつしかアンインストールできないんだよね(汗 もう面倒なので/usr/local/bin以下のファイル全消去することにします。
$ ls -al 合計 2044 drwxr-xr-x 2 root root 4096 2008-11-27 01:45 . drwxr-xr-x 10 root root 4096 2008-10-30 07:53 .. -rwxr-xr-x 1 root root 3882 2008-11-27 01:36 erb -rwxr-xr-x 1 root root 788 2008-11-27 01:45 gem -rwxr-xr-x 1 root root 379 2008-11-27 01:36 irb -rwxr-xr-x 1 root root 1543 2008-11-27 01:36 rdoc -rwxr-xr-x 1 root root 1491 2008-11-27 01:36 ri -rwxr-xr-x 1 root root 2055069 2008-11-27 01:36 ruby -rwxr-xr-x 1 root root 153 2008-11-27 01:36 testrb $ sudo rm -rf * $ ls -al 合計 8 drwxr-xr-x 2 root root 4096 2008-11-29 18:57 . drwxr-xr-x 10 root root 4096 2008-10-30 07:53 ..
きれいさっぱりw
/etc/fatabで他PCのドライブをマウントするとき、IDとpasswordを外部ファイル化する。
/etc/fstabで起動時に別PCのドライブを自動的にマウントさせにいくことが可能です。
$ ls -al /etc/ | grep fstab -rw-r--r-- 1 root root 597 2008-11-26 23:29 fstab //192.168.1.101/D /home/user01/D cifs username=user01,password=PASS01,codepage=cp932,iocharset=utf8,defaults 0 0
とはいえ/etc/fstabはユーザーにも読み取り権限がありパスワードが丸見えなので、クレデンシャルオプションを使用して別ファイルにパスワードを記録します。
//192.168.1.101/D /home/user01/D cifs credentials=/etc/smbpasswd,codepage=cp932,iocharset=utf8,defaults 0 0 $ cat /etc/smbpasswd username=user01 password=PASS01
んで外部ファイルのアクセス権限を操作し、rootしか読めないようにする。
$ sudo chown root:root /etc/smbpasswd $ sudo chmod 0600 /etc/smbpasswd $ ls -l /etc/smbpasswd -rw------- 1 root root 35 2008-11-29 21:55 /etc/smbpasswd
ネットワーク設定
ネットワーク設定は以下のファイル。
★Debian /etc/network/interfaces auto lo iface lo inet loopback ★Redhat /etc/sysconfig/network-scripts/ifcfg-eth0 # Intel Corporation 82557/8/9 [Ethernet Pro 100] DEVICE=eth0 BOOTPROTO=dhcp HWADDR=00:10:A4:A6:E5:4C ONBOOT=yes TYPE=Ethernet
上記はどちらもDHCP設定のもの。固定IPの場合は、その旨を設定ファイルに記載する。
Ubuntuはなぜかループバックアドレス・インターフェイスの設定しか記載されていないが、記載されていないデバイスはデフォルトでDHCPにでもなってくれるんだろう。