FreeBSD > jail fulltree 10.0-Release

Top > FreeBSD > jail fulltree 10.0-Release

jail fulltree 10.0-Release



FreeBSD 10.0-Releaseにjail fulltreeを導入した時の備忘的まとめです
今後、このfulltreeを使用して minitree を作成していきます


jail fulltree 8.2-Release (i386+512M)
mainte jail fulltree 8.1-RELEASE
common jailstp

以上のサイトを参考にさせていただいております
基本的にはwirednoize様のmainte jail fulltree のそのままです
ですので、詳細はmainte jail fulltree 8.1-RELEASEを参照してください



mainte 用 jail fulltree の構築


HOST環境での作業

base バイナリの構築

ftp サーバよりrelease/baseファイルを取得して、jail環境を構築します
'bsdinstall jail' を使用したかったのですが、ダウンロードするアドレスに間違いあって動かなかったので、従来の方法で構築します

  • base バイナリ展開用ディレクトリを作成します
    # mkdir /tmp/base
    # cd /tmp/base
    
  • base.txzを取得します
    日本のミラーサーバは数字なし[ftp]と2-9の番号つき[ftp2]~[ftp9]がありますので、適宜変更してください
    # fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/base.txz
    
    
  • jail fulltree 用ディレクトリを作成します
    zfs でディレクトリを切り分けます
    # zfs create tank0/jail
    # zfs create -o mountpoint=/home/mainte tank0/jail/mainte100
    
  • base バイナリを展開します
    # cat base.txz | tar --unlink -xpJf - -C /home/mainte
    

jail fulltree の初期設定

  • 設定のため、起動させます
    # mount -t devfs devfs /home/mainte/dev
    # jail /home/mainte test.localdomain 192.168.100.90 /bin/tcsh
    

    JAIL環境での作業

  • 起動時の警告を抑制するため、空の/etc/fstabファイルを作成します
    # touch /etc/fstab
    
  • sendmailの警告を抑制するため/etc/mail/aliases.dbを生成します
    # newaliases
    
  • rc.confの設定をします
    # vi /etc/rc.conf
    
    network_interface=""
    rpcbind_enable="NO"
    inet_enable="NO"
    syslogd_flags="-ss"
    sshd_enable="NO"
    sendmail_enable="NO"
    sendmail_submit_enable="NO"
    sendmail_outbound_enable="NO"
    sendmail_msp_queue_enable="NO"
    
  • resolv.conf の設定をします
    # echo 'nameserver 192.168.1.1' > /etc/resolv.conf
    
  • root のログインシェルを変更します
    jexec を使用して jail fulltree に入るので ログインシェルを無しにします
    # vipw
    
    root::0:0::0:0:Charlie &:/root:/usr/sbin/nologin
    toor:*:0:0::0:0:Bourne-again Superuser:/root:/usr/sbin/nologin
    
    上記2行のみ変更
    
  • タイムゾーンを変更します
    # cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    
  • crontab を編集します
    # vi /etc/crontab
    
    #
    SHELL=/bin/sh
    PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
    HOME=/var/log
    #
    #minute hour    mday    month   wday    who     command
    1       0       *       *       *       root    newsyslog
    
    その他は削除
    
  • newsyslog を編集します
    # vi /etc/newsyslog.conf
    
    # logfilename    [owner:group] mode count size when  flags [/pid_file][sig_num]
    /var/log/all.log               600  7     *    @T00  -
    
    その他は削除
    
  • ログを設定します
    # echo '*.* /var/log/all.log' > /etc/syslog.conf
    # touch /var/log/all.log
    # chmod 600 /var/log/all.log
    
  • /etc/hosts.allowをすべて拒否に変更します
    # echo 'ALL : ALL : deny' > /etc/hosts.allow
    
  • /etc/make.confを設定します
    X等のグラフィック関係、IPV6など使用しないものを無効にし、マルチバイト関数はないとハマルとのこと
    SUPHOST と MASTER_SITE_OVERRIDE は、CVSup サイト一覧 と ftp サイト一覧 から日本のサイトを選択
    WRKDIRPREFIX と DISTDIR の設定は、/usr/ports ディレクトリをを綺麗にしておくのに必須とのこと
    最適化のためCPUTYPE CFLAGS COPTFLAGS を設定
    /usr/share/example/etc/make.conf/usr/share/mk/bas.cpu.mkを参考にCPUTYPEをnoconaに設定しました
    # vi /etc/make.conf
    
    WITHOUT_X11=yes
    WITHOUT_GUI=yes
    NO_X=true
    WITHOUT_IPV6=yes
    WITH_MBSTRING=yes
    SUPHOST=cvsup3.jp.freebsd.org
    MASTER_SITE_OVERRIDE=ftp://ftp3.jp.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}
    WRKDIRPREFIX=/tmp
    DISTDIR=/tmp/distfiles
    CPUTYPE=nocona
    CFLAGS= -O2 -fno-strict-aliasing -pipe
    COPTFLAGS= -O2 -fno-strict-aliasing -pipe
    
  • Jail環境での作業を終了します
    # exit
    

jail fulltree の稼動


HOST環境での作業

自動起動設定

  • jail共通起動停止シェルスクリプトの設置
    jail共通起動停止シェルスクリプトから最新の common_Njailstp.file.?.?.gz をダウンロードします
    解凍して common_Njailstp.file にファイル名を変更後、/usr/local/etc/rc.d におきます
  • 自動起動用スクリプトの設定
    # vi /usr/local/etc/rc.d/mainte90_jail.sh
    
    #!/bin/sh
    #---------------------------------------
    Jid="240"
    Secu="-1"
    NtwkIF="lo0"
    HsFQDN="mainte90.localdomain"
    IPAdrs="192.168.1.240
    BDcast="192.168.1.240"
    NTmask="255.255.255.255"
    PsName="mainte90"
    ChRoot="/home/$PsName"
    MTdpnf="$ChRoot/dev
    /tmp/$PsName/tmp $ChRoot/tmp"
    #----------------------------------------------------------------------
    BFsrtJ="/bin/mkdir -p /tmp/$PsName/tmp/distfiles
    /bin/chmod 1777 /tmp/$PsName/tmp"
    /sbin/mount -t zfs tank0/ports /home/$PsName/usr/ports"
    AFsrtJ=""
    BFstpJ="jexec Jid /bin/sh /etc/rc.shutdown"
    AFstpJ="/bin/rm -rf /tmp/$PsName"
    Jstcom="/bin/sh /etc/rc"
    #---------------------------------------
    . /usr/local/etc/rc.d/common_Njailstp.file
    jailstartop $1
    
  • 実行権限付与
    chmod u+x /usr/local/etc/rc.d/mainte_jail.sh
    
  • 起動・停止
    /usr/local/etc/rc.d/mainte_jaile.sh start
    /usr/local/etc/rc.d/mainte_jaile.sh stop
    

jail fulltree の整備

  • maintenance 用 jail fulltree を起動します
    # /usr/local/etc/rc.d/mainte_jail.sh start
    # jexec 240 /bin/tcsh
    

portsnap で ports の更新


JAIL環境での作業

  • portsnap を起動して ports の更新をします
    初回
    # portsnap fetch && portsnap extract && portsnap update
    
    2回目以降
    # portsnap fetch && portsnap update
    

portsの自動メンテナンス

portsnap fetch の代わりに portsnap cron を使ったスクリプトを記述します
portsnap の実行ログを保存します
後で、ログローテーションの対象にするので、ひたすら追記書きさせます
portsnap を cron で流して ports の自動更新をします。

  • portsnap の自動更新スクリプト
    # mkdir /root/update
    # cd /root/update
    # vi ports_update_cron.sh
    
    #!/bin/sh
    LogFile="/var/log/ports_update.log"
    echo "### `date` ###" >> $LogFile
    /usr/sbin/portsnap cron >> $LogFile 2>&1
    /usr/sbin/portsnap update >> $LogFile 2>&1
    echo "### `date` ###" >> $LogFile
    
  • portsnap の手動更新スクリプト
    # vi port_update.sh
    
    #!/bin/sh
    /usr/sbin/portsnap fetch
    /usr/sbin/portsnap update
    
  • 実行権の付与
    # chmod u+x ports_update.sh ports_update_cron.sh
    
  • crontab の設定
    適当な頻度で ports の自動更新が走るように設定を追記します
    vi /etc/crontab
    
    # portsnap ports_update
    1    9    *    *    1,4 root /root/update/ports_update_cron.sh > /dev/null 2>&1
    
  • ログローテーション設定
    portsnap のログローテーション設定を 追記します
    vi /etc/newsyslog.conf
    
    # logfilename    [owner:group] mode count size when  flags [/pid_file][sig_num]
    /var/log/all.log               600  7     *    @T00  -
    /var/log/ports_update.log      600  7     1    *     N
    

ports メンテナンス結果のメール送信

ports 更新の有無を簡単に知る為に、定期的に portversion のコマンド結果をメールで送信します

  • mail コマンドを使ってメールを送信するスクリプト
    # vi portvermail.sh
    
    #!/bin/sh
    #------------------------------------------
    MailTO="root"
    MilTmp=/tmp/pkgversion.txt
    MilHed="mainte pkg version list"
    #------------------------------------------
    echo $MilHed > $MilTmp
    echo "" >> $MilTmp
    /usr/sbin/pkg_version -v >> $MilTmp
    cat $MilTmp | /usr/bin/mail -s "$MilHed" $MailTO
    
  • 実行権の付与
    chmod u+x portvermail.sh
    
  • ports_update_cron.sh へ追加
    echo '/root/update/portvermail.sh' >> ports_update_cron.sh
    

pkg_replace のインストール

ports の更新やインストールに pkg_replace を入れます

  • ports からインストールとハッシュテーブルの再構築
    # cd /usr/ports/ports-mgmt/pkg_replace
    # make install clean
    # rehash
    

portconf のインストール

portをインストールする際の設定をmake install でも同じくするためのツールだそうです

  • pkg_replace コマンドでインストールします。
    # pkg_replace -vcCN ports-mgmt/portconf
    

ports の脆弱性チェック設定

ports ソフトウェアの脆弱性をチェックします

  • 脆弱性のチェック
    # pkg audit -F
    

ports の脆弱性チェック結果のメール送信

毎日 pkg audit のチェック結果をメールで報告させます

  • mail コマンドを使ってメールを送信するスクリプトを記述します
    #cd /root/update
    #vi pkg_auditmail.sh
    
    #!/bin/sh
    RanDOM=`jot -r 1 1 1800`
    /bin/sleep $RanDOM
    #------------------------------------------
    MailTO="root"
    MilTmp="/tmp/pkg_audit.txt
    MilHed="pkg audit report"
    #------------------------------------------
    echo $MilHed > $MilTmp
    echo "" >> $MilTmp
    /usr/sbin/pkg audit -F >> $MilTmp
    cat $MilTmp | /usr/bin/mail -s "$MilHed" $MailTO
    
  • 実行権の付与
    chmod u+x pkg_auditmail.sh
    
  • crontab の設定
    適当な頻度で ports の自動更新が走るように設定を追記します
    vi /etc/crontab
    
    # pkg audit	
    1    5    *    *    *     root  /root/update/pkg_auditmail.sh > /dev/null 2>&1
    

sendmail の設定

結果メールを送信する為に sendmail を起動し、送信後に sendmail を止めるスクリプトを作成します

  • 全拒否の hosts.allow
    # vi /root/update/hosts.allow_deny
    
    ALL : ALL : deny
    
  • sendmail許可の hosts.allow
    # vi /root/update/hosts.allow_mail
    
    sendmail : localhost : allow
    sendmail : 192.168.1.90 : allow
    sendmail : .localdomain : allow
    ALL : ALL : deny
    
  • sendmail 完全停止用の rc.conf
    cp /etc/rc.conf rc.conf_none
    
  • sendmail 起動用の rc.conf
    現在の /etc/rc.confを流用します
    # cp /etc/rc.conf rc.conf_mail
    # sed -i -e "/^sendmail_/d" /root/update/rc.conf_mail
    # echo 'sendmail_enable="NO"' >> /root/update/rc.conf_mail
    
  • メールの転送設定
    echo 'admin@localdomain' > /root/.forward
    
  • メール送信シェルスクリプトの作成
    # vi resend.sh
    
    #!/bin/sh
    cp -p /root/update/rc.conf_mail /etc/rc.conf
    cp -p /root/update/hosts.allow_mail /etc/hosts.allow
    sh /etc/rc.sendmail start
    sleep 6
    sh /etc/rc.sendmail stop
    sleep 4
    pkill sendmail
    cp -p /root/update/hosts.allow_deny /etc/hosts.allow
    cp -p /root/update/rc.conf_none /etc/rc.conf
    
  • 実行権付与
    # chmod u+x resend.sh
    
  • portvermail.sh の変更
    メール送信シェルスクリプトの起動を追記します
    echo '/root/update/resend.sh' >> /root/update/portvermail.sh
    
  • portauditmail.sh の変更
    メール送信シェルスクリプトの起動を追記します
    echo '/root/update/resend.sh' >> /root/update/portauditmail.sh
    

freebsd-update 自動更新設定

freebsd-updateがディレクトリ指定で updateできるようなのでその機能を利用します

  • Jail環境での作業を終了します
    # exit
    


HOST環境での作業

  • freebsd-updateスクリプトの設定
    freebsd-update fetch の代わりに freebsd-update cron という cron 動作用のコマンドを使用します
    また HOST は cron(fetch) のみ jail は install まで行います
    # mkdir /root/update
    # cd /root/update
    # vi freebsd-update_cron.sh
    
    #!/bin/sh
    
    ### HOST用
    /usr/sbin/freebsd-update cron
    #/usr/sbin/freebsd-update install
    
    ### mainte jail用
    /usr/sbin/freebsd-update -b /home/mainte90 -d /home/mainte90/var/db/freebsd-update fetch
    /usr/sbin/freebsd-update -b /home/mainte90 -d /home/mainte90/var/db/freebsd-update install
    
  • 実行権付与
    chmod u+x freebsd-update_cron.sh
    
  • crontab の設定
    適当な頻度で freebsd-update が起動するように追記します
    vi /etc/crontab
    
    # freebsd-update
    0      6     *     *   2,4,6  root   /root/freebsd-update_cron.sh > /var/log/freebsd-update.log 2>&1
    
  • freebsd-update の結果をメール送信
    freebsd-update cron が実行されて何らかのアップデートがあった場合、ローカルの root 宛にメールを出してくれる機能が組み込まれているので、特別な作業はありません
  • メールの転送設定
    ローカルのroot宛にメールを出してくれるので、普段使うアドレスへ転送する設定をします
    echo 'admin@localdomain' > /root/.forward
    

資料

アーカイブ

関連ページ


名前:
コメント:
最終更新:2014年11月16日 12:20