ESXi上で仮想マシンテンプレートの構築 (その4 システムツールのインストール)

作業日: 2012/08/21
BLFS Version 2012-08-18

今回の記事から3回に分けて、どんな用途のシステムにおいても必要な基本的なソフトウェアをインストールしていく。
まず、今回は、システムツールのインストール。

今回インストールするソフトウェアは、インストール順に下記の通り。

  1. OpenSSL
    • SSLプロトコルのオープンソース実装。OpenSSHに必須で、WgetをHTTPSに対応させるために必要。
  2. Wget
    • HTTPやHTTPSからファイルをダウンロードするソフトウェア。今回HTTPSに対応させるために再コンパイル。
  3. pkg-config
    • ライブラリのインストール場所等を管理するプログラム。さしあたって必要なパッケージは無いが、早めにインストールしておいた方がスムーズ。
  4. libtirpc
    • RPCを実装したライブラリ。Linux-PAMのコンパイルに必要。その他、後で出てくるrpcbindやNFS Utilitiesのコンパイルでも必要。
  5. Linux-PAM
    • Linuxの認証を集中管理するパッケージ。OpenSSHや、Sudo、Screen、Shadow等が必要とする。
  6. OpenSSH
    • SSHのサーバとクライアントのオープンソース実装。
  7. Sudo
    • 一般ユーザがroot権限で実行するためのソフトウェア。
  8. Shadow
    • ログイン等の基本的な認証プログラム。ALFSで既にインストールされているが、今回Linux-PAMに対応させるために再コンパイル。
  9. Fcron
    • 定期的にコマンドを実行するためのプログラム。
  10. popt
    • コマンドラインオプションをパースするためのライブラリ。logrorateのコンパイルに必要。
  11. logrotate
    • ログを定期的にローテーションさせるためのプログラム。
  12. Heirloom mailx
    • メールを送信するためのプログラム。logrorateがログをメールで送信する際に必要。
  13. rpcbind
    • Portmapの代替品で、NFSに必要。
  14. 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の設定も必要になる。

Comments are closed.