作業日: 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
- 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の設定も必要になる。