作業日: 2012/08/21
BLFS Version 2012-08-18
今回の記事から3回に分けて、どんな用途のシステムにおいても必要な基本的なソフトウェアをインストールしていく。
まず、今回は、システムツールのインストール。
今回インストールするソフトウェアは、インストール順に下記の通り。
- OpenSSL
- SSLプロトコルのオープンソース実装。OpenSSHに必須で、WgetをHTTPSに対応させるために必要。
- Wget
- HTTPやHTTPSからファイルをダウンロードするソフトウェア。今回HTTPSに対応させるために再コンパイル。
- pkg-config
- ライブラリのインストール場所等を管理するプログラム。さしあたって必要なパッケージは無いが、早めにインストールしておいた方がスムーズ。
- libtirpc
- RPCを実装したライブラリ。Linux-PAMのコンパイルに必要。その他、後で出てくるrpcbindやNFS Utilitiesのコンパイルでも必要。
- Linux-PAM
- Linuxの認証を集中管理するパッケージ。OpenSSHや、Sudo、Screen、Shadow等が必要とする。
- OpenSSH
- SSHのサーバとクライアントのオープンソース実装。
- Sudo
- 一般ユーザがroot権限で実行するためのソフトウェア。
- Shadow
- ログイン等の基本的な認証プログラム。ALFSで既にインストールされているが、今回Linux-PAMに対応させるために再コンパイル。
- Fcron
- 定期的にコマンドを実行するためのプログラム。
- popt
- コマンドラインオプションをパースするためのライブラリ。logrorateのコンパイルに必要。
- logrotate
- ログを定期的にローテーションさせるためのプログラム。
- Heirloom mailx
- メールを送信するためのプログラム。logrorateがログをメールで送信する際に必要。
- rpcbind
- Portmapの代替品で、NFSに必要。
- NFS Utilities
- NFSをマウントしたりサーバーとしてエクスポートするために必要なプログラム群。
OpenSSL-1.0.1e
cd /root/src-blfs && wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz && wget http://www.linuxfromscratch.org/patches/blfs/svn/openssl-1.0.1e-fix_manpages-1.patch && tar zxf openssl-1.0.1e.tar.gz && cd openssl-1.0.1e && patch -Np1 -i ../openssl-1.0.1e-fix_manpages-1.patch && ./config --prefix=/usr zlib-dynamic --openssldir=/etc/ssl shared && make && make test && make MANDIR=/usr/share/man install && install -dv -m755 /usr/share/doc/openssl-1.0.1e && cp -vfr doc/* /usr/share/doc/openssl-1.0.1e && cd ../ && rm -rf openssl-1.0.1e
Wget-1.14
Wgetは既にダウンロード済み。
cd /root/src-blfs && tar Jxf wget-1.14.tar.xz && cd wget-1.14 && ./configure --prefix=/usr \ --sysconfdir=/etc \ --with-ssl=openssl && make && make check && make install && cd ../ && rm -rf wget-1.14
pkg-config-0.28
cd /root/src-blfs && wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz && tar zxf pkg-config-0.28.tar.gz && cd pkg-config-0.28 && ./configure --prefix=/usr \ --docdir=/usr/share/doc/pkg-config-0.28 \ --with-internal-glib \ --disable-host-tool && make && make check && make install && cd ../ && rm -rf pkg-config-0.28
libtirpc-0.2.3
cd /root/src-blfs && wget http://downloads.sourceforge.net/project/libtirpc/libtirpc/0.2.3/libtirpc-0.2.3.tar.bz2 && wget http://www.linuxfromscratch.org/patches/blfs/svn/libtirpc-0.2.3-remove_nis-1.patch && tar jxf libtirpc-0.2.3.tar.bz2 && cd libtirpc-0.2.3 && patch -Np1 -i ../libtirpc-0.2.3-remove_nis-1.patch && sed "s@AM_CONFIG_HEADER@AC_CONFIG_HEADERS@g" -i configure.ac && autoreconf -fi && ./configure --prefix=/usr --sysconfdir=/etc CFLAGS="-fPIC" && make && make install && mv -v /usr/lib/libtirpc.so.* /lib && ln -sfv ../../lib/libtirpc.so.1.0.10 /usr/lib/libtirpc.so && cd ../ && rm -rf libtirpc-0.2.3
Linux-PAM-1.1.6
cd /root/src-blfs && wget --no-check-certificate \ https://fedorahosted.org/releases/l/i/linux-pam/Linux-PAM-1.1.6.tar.bz2 && tar jxf Linux-PAM-1.1.6.tar.bz2 && cd Linux-PAM-1.1.6 && ./configure --prefix=/usr \ --sysconfdir=/etc \ --docdir=/usr/share/doc/Linux-PAM-1.1.6 \ --disable-nis && make && install -v -m755 -d /etc/pam.d && cat > /etc/pam.d/other << "EOF" && auth required pam_deny.so account required pam_deny.so password required pam_deny.so session required pam_deny.so EOF make check && rm -rfv /etc/pam.d && make install && chmod -v 4755 /sbin/unix_chkpwd && cd ../ && rm -rf Linux-PAM-1.1.6
PAMの設定ファイルの作成
install -v -m755 -d /etc/pam.d && cat > /etc/pam.d/system-account << "EOF" && # Begin /etc/pam.d/system-account account required pam_unix.so # End /etc/pam.d/system-account EOF cat > /etc/pam.d/system-auth << "EOF" && # Begin /etc/pam.d/system-auth auth required pam_unix.so # End /etc/pam.d/system-auth EOF cat > /etc/pam.d/system-password << "EOF" && # Begin /etc/pam.d/system-password # use sha512 hash for encryption, use shadow, and try to use any previously # defined authentication token (chosen password) set by any prior module password required pam_unix.so sha512 shadow try_first_pass # End /etc/pam.d/system-password EOF cat > /etc/pam.d/system-session << "EOF" && # Begin /etc/pam.d/system-session session required pam_unix.so # End /etc/pam.d/system-session EOF cat > /etc/pam.d/other << "EOF" # Begin /etc/pam.d/other auth required pam_warn.so auth required pam_deny.so account required pam_warn.so account required pam_deny.so password required pam_warn.so password required pam_deny.so session required pam_warn.so session required pam_deny.so # End /etc/pam.d/other EOF
OpenSSH-6.2p1
cd /root/src-blfs && wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.2p1.tar.gz && tar zxf openssh-6.2p1.tar.gz && cd openssh-6.2p1 && install -v -m700 -d /var/lib/sshd && chown -v root:sys /var/lib/sshd && groupadd -g 50 sshd && useradd -c 'sshd PrivSep' -d /var/lib/sshd -g sshd \ -s /bin/false -u 50 sshd && ./configure --prefix=/usr \ --sysconfdir=/etc/ssh \ --datadir=/usr/share/sshd \ --with-md5-passwords \ --with-privsep-path=/var/lib/sshd \ --with-pam && make && install -v scp /usr/sbin make tests && make install && install -v -m755 -d /usr/share/doc/openssh-6.2p1 && install -v -m644 INSTALL LICENCE OVERVIEW README* \ /usr/share/doc/openssh-6.2p1 && echo "PermitRootLogin no" >> /etc/ssh/sshd_config && echo "USEPAM yes" >> /etc/ssh/sshd_config && cat > /etc/pam.d/sshd << "EOF" && # Begin /etc/pam.d/sshd # Set failure delay before next prompt to 3 seconds auth optional pam_faildelay.so delay=3000000 # Check to make sure that the user is allowed to login auth requisite pam_nologin.so # Check to make sure that root is allowed to login # Disabled by default. You will need to create /etc/securetty # file for this module to function. See man 5 securetty. #auth required pam_securetty.so # Additional group memberships - disabled by default #auth optional pam_group.so # include the default auth settings auth include system-auth # check access for the user account required pam_access.so # include the default account settings account include system-account # Set default environment variables for the user session required pam_env.so # Set resource limits for the user session required pam_limits.so # Display date of last login - Disabled by default #session optional pam_lastlog.so # Display the message of the day - Disabled by default #session optional pam_motd.so # Check user's mail - Disabled by default #session optional pam_mail.so standard quiet # include the default session and password settings session include system-session password include system-password # End /etc/pam.d/sshd EOF chmod 644 /etc/pam.d/sshd && cd ../ && rm -rf openssh-6.2p1
tar jxf blfs-bootscripts-20130324.tar.bz2 && cd blfs-bootscripts-20130324 && make install-sshd && cd ../ && rm -rf blfs-bootscripts-20130324
Sudo-1.8.6p3
cd /root/src-blfs && wget http://www.sudo.ws/sudo/dist/sudo-1.8.6p3.tar.gz && tar zxf sudo-1.8.6p3.tar.gz && cd sudo-1.8.6p3 && ./configure --prefix=/usr \ --libexecdir=/usr/lib/sudo \ --docdir=/usr/share/doc/sudo-1.8.6p3 \ --with-all-insults \ --with-env-editor \ --with-pam \ --without-sendmail && make && make install && cd ../ && rm -rf sudo-1.8.6p3 && cat > /etc/pam.d/sudo << "EOF" && # Begin /etc/pam.d/sudo # include the default auth settings auth include system-auth # include the default account settings account include system-account # Set default environment variables for the service user session required pam_env.so # include system session defaults session include system-session # End /etc/pam.d/sudo EOF chmod 644 /etc/pam.d/sudo
visudoを使って、/etc/sudoersの下記をコメントアウト
%wheel ALL=(ALL) ALL
gid 90でwheelグループを追加
groupadd -g 90 wheel
ユーザをwheelグループに追加する場合は、
usermod -G wheel ユーザ名
のようにする。
Shadow-4.1.5.1
cd /root/src-blfs && wget http://pkg-shadow.alioth.debian.org/releases/shadow-4.1.5.1.tar.bz2 && tar jxf shadow-4.1.5.1.tar.bz2 && cd shadow-4.1.5.1 && sed -i 's/groups$(EXEEXT) //' src/Makefile.in && find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; && sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile.in && sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \ -e 's@/var/spool/mail@/var/mail@' etc/login.defs && sed -i -e 's@PATH=/sbin:/bin:/usr/sbin:/usr/bin@&:/usr/local/sbin:/usr/local/bin@' \ -e 's@PATH=/bin:/usr/bin@&:/usr/local/bin@' etc/login.defs && ./configure --prefix=/usr --sysconfdir=/etc && make && make install && mv -v /usr/bin/passwd /bin && cd ../ && rm -rf shadow-4.1.5.1
sed -i 's/yes/no/' /etc/default/useradd && install -v -m644 /etc/login.defs /etc/login.defs.orig && for FUNCTION in FAIL_DELAY LASTLOG_ENAB \ FAILLOG_ENAB QUOTAS_ENAB \ FTMP_FILE PASS_MIN_LEN \ MAIL_CHECK_ENAB \ OBSCURE_CHECKS_ENAB \ PORTTIME_CHECKS_ENAB \ CONSOLE MOTD_FILE \ NOLOGINS_FILE ENV_HZ \ SU_WHEEL_ONLY \ CRACKLIB_DICTPATH \ SYS_UID_MIN SYS_UID_MAX \ SYS_GID_MIN SYS_GID_MAX \ PASS_CHANGE_TRIES \ PASS_ALWAYS_WARN \ CHFN_AUTH ENVIRON_FILE do sed -i "s/^${FUNCTION}/# &/" /etc/login.defs done && cat > /etc/pam.d/login << "EOF" && # Begin /etc/pam.d/login # Set failure delay before next prompt to 3 seconds auth optional pam_faildelay.so delay=3000000 # Check to make sure that the user is allowed to login auth requisite pam_nologin.so # Check to make sure that root is allowed to login # Disabled by default. You will need to create /etc/securetty # file for this module to function. See man 5 securetty. #auth required pam_securetty.so # Additional group memberships - disabled by default #auth optional pam_group.so # include the default auth settings auth include system-auth # check access for the user account required pam_access.so # include the default account settings account include system-account # Set default environment variables for the user session required pam_env.so # Set resource limits for the user session required pam_limits.so # Display date of last login - Disabled by default #session optional pam_lastlog.so # Display the message of the day - Disabled by default #session optional pam_motd.so # Check user's mail - Disabled by default #session optional pam_mail.so standard quiet # include the default session and password settings session include system-session password include system-password # End /etc/pam.d/login EOF cat > /etc/pam.d/passwd << "EOF" && # Begin /etc/pam.d/passwd password include system-password # End /etc/pam.d/passwd EOF cat > /etc/pam.d/su << "EOF" && # Begin /etc/pam.d/su # always allow root auth sufficient pam_rootok.so auth include system-auth # include the default account settings account include system-account # Set default environment variables for the service user session required pam_env.so # include system session defaults session include system-session # End /etc/pam.d/su EOF cat > /etc/pam.d/chage << "EOF" && #Begin /etc/pam.d/chage # always allow root auth sufficient pam_rootok.so # include system defaults for auth account and session auth include system-auth account include system-account session include system-session # Always permit for authentication updates password required pam_permit.so # End /etc/pam.d/chage EOF for PROGRAM in chfn chgpasswd chpasswd chsh groupadd groupdel \ groupmems groupmod newusers useradd userdel usermod do install -v -m644 /etc/pam.d/chage /etc/pam.d/${PROGRAM} sed -i "s/chage/$PROGRAM/" /etc/pam.d/${PROGRAM} done && if [ -f /etc/login.access ]; then mv -v /etc/login.access{,.NOUSE} fi && if [ -f /etc/limits ]; then mv -v /etc/limits{,.NOUSE} fi
Fcron-3.1.2
cd /root/src-blfs && wget http://fcron.free.fr/archives/fcron-3.1.2.src.tar.gz && tar zxf fcron-3.1.2.src.tar.gz && cd fcron-3.1.2 && cat >> /etc/syslog.conf << "EOF" && # Begin fcron addition to /etc/syslog.conf cron.* -/var/log/cron.log # End fcron addition EOF /etc/rc.d/init.d/sysklogd reload && groupadd -g 22 fcron && useradd -d /dev/null -c "Fcron User" -g fcron -s /bin/false -u 22 fcron && ./configure --prefix=/usr --sysconfdir=/etc \ --localstatedir=/var --without-sendmail --with-boot-install=no && make && make install && cd ../ && rm -rf fcron-3.1.2
tar jxf blfs-bootscripts-20130324.tar.bz2 && cd blfs-bootscripts-20130324 && make install-fcron && cd ../ && rm -rf blfs-bootscripts-20130324
Popt-1.16
cd /root/src-blfs && wget http://rpm5.org/files/popt/popt-1.16.tar.gz && tar zxf popt-1.16.tar.gz && cd popt-1.16 && ./configure --prefix=/usr && make && make check && make install && cd ../ && rm -rf popt-1.16
Logrotate-3.8.2
作業日時点での最新版は3.8.3だが、make testが正常に動かなかったので、古い3.8.2を使用した。
cd /root/src-blfs && wget http://pkgs.fedoraproject.org/repo/pkgs/logrotate/logrotate-3.8.2.tar.gz/ddd4dcf28c38b3ac6bc6ff4e0148308a/logrotate-3.8.2.tar.gz && tar zxf logrotate-3.8.2.tar.gz && chown -R root:root logrotate-3.8.2 && cd logrotate-3.8.2 && sed -i 's%/bin/mail%/usr/bin/mail%' config.h && make && make test && sudo make install && cd ../ && rm -rf logrotate-3.8.2
mkdir /etc/logrotate.d && cat > /etc/logrotate.conf << "EOF" # Begin of /etc/logrotate.conf # see "man logrotate" for details # rotate log files weekly weekly # keep 10 weeks worth of backlogs rotate 10 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # # Syslog # /var/log/auth.log /var/log/boot.log /var/log/cron.log /var/log/daemon.log /var/log/kern.log /var/log/mail.log /var/log/sys.log /var/log/user.log { create 0644 root root sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript } # # wtmp # /var/log/wtmp { monthly create 0644 root root rotate 1 } # # btmp # /var/log/btmp { monthly create 0600 root root rotate 1 } # End of /etc/logrotate.conf EOF
fcrontab -e
SHELL=/bin/bash PATH=/bin:/usr/bin:/sbin:/usr/sbin HOME=/root 0 5 * * * /usr/sbin/logrotate /etc/logrotate.conf >& /dev/null
Heirloom mailx-12.4
cd /root/src-blfs && wget http://downloads.sourceforge.net/heirloom/mailx-12.4.tar.bz2 && wget http://www.linuxfromscratch.org/patches/blfs/svn/mailx-12.4-openssl_1.0.0_build_fix-1.patch && tar jxf mailx-12.4.tar.bz2 && cd mailx-12.4 && patch -Np1 -i ../mailx-12.4-openssl_1.0.0_build_fix-1.patch && make SENDMAIL=/usr/sbin/sendmail && make PREFIX=/usr UCBINSTALL=/usr/bin/install install && ln -v -sf mailx /usr/bin/mail && ln -v -sf mailx /usr/bin/nail && install -v -m755 -d /usr/share/doc/mailx-12.4 && install -v -m644 README mailx.1.html /usr/share/doc/mailx-12.4 && cd ../ && rm -rf mailx-12.4
rpcbind-0.2.0
NFS Utilitiesの実行時に必要。
cd /root/src-blfs && wget http://downloads.sourceforge.net/rpcbind/rpcbind-0.2.0.tar.bz2 && tar jxf rpcbind-0.2.0.tar.bz2 && cd rpcbind-0.2.0 && sudo sed -i 's/^sunrpc/rpcbind/' /etc/services && ./configure --prefix=/usr --bindir=/sbin && make && sudo make install && cd ../ && rm -rf rpcbind-0.2.0
tar jxf blfs-bootscripts-20130324.tar.bz2 && cd blfs-bootscripts-20130324 && sudo make install-rpcbind && cd ../ && rm -rf blfs-bootscripts-20130324
NFS Utilities-1.2.7
cd /root/src-blfs && wget http://downloads.sourceforge.net/nfs/nfs-utils-1.2.7.tar.bz2 && tar jxf nfs-utils-1.2.7.tar.bz2 && cd nfs-utils-1.2.7 && LIBS=-lpthread ./configure --prefix=/usr \ --sysconfdir=/etc \ --without-tcp-wrappers \ --disable-nfsv4 \ --disable-nfsv41 \ --disable-gss && make && sudo make install && cd ../ && rm -rf nfs-utils-1.2.7
クライアントとして使うにせよ、サーバーとして使うにせよ、ブートスクリプト等のインストールが必要になる。これは実際に仮想マシンをデプロイしてから行う。また、クライアントの場合は、BLFSのConfiguring for Network Filesystemsの設定も必要になる。