[トップ] [自作PC] [PCの履歴] [フリーソフト] [プロバイダー選び] [レンタルサーバー]
[ワイマックスで損しない方法] [VPS比較] [フレッツ光東西でギガビットインターネット接続] [着メロ] [MSX] [ツイッターでポイントを貯めよう! ]

東京電力(時分) 万kW / 万kW (.0%) 東北電力(時分) 万kW / 万kW (.4%)
関西電力(時分) 万kW / 万kW (.1%) 九州電力(時分) 万kW / 万kW (.7%)
北海道電力(時分) 4.0万kW / 3.4万kW (.0%)

このはちゃんでFreeBSDを気合いでインストしてみるなの

対象のバージョンは、.0-RELEASEです

  • このはちゃんでFreeBSDを気合いでインストしてみるなの
    • 初期インストール
    • 各種設定ファイルインストール
    • 良くわからない、pkg を自動化
      • /etc/profileに当初設定しておく
      • おなじみの /usr/local/etc/pkg/repos/FreeBSD.confを置いておく
      • パッケージの最小自動インストール
      • conohaの大量IPアドレスを一括登録する
      • カーネルビルダー
      • addconf.sh
      • er.sh
  • アンケート

初期インストール

Uptimeが2分秒ぐらいで終了してしまいます。
何といっても、面倒なIPアドレスの入力が不要なの。

OSインストール部分を完全自動化してもいいんだけど・・・

各種設定ファイルインストール

良くわからない、pkg を自動化

PACKAGESITEがどうのこうのって、ななこ、頭悪いので、よくわからないんえす。

それなので、自動化してみました。

/etc/profileに当初設定しておく

.0-RELEASE初期状態であれば、以下のようでよいようです。

PACKAGESITE="pkghttp://pkg.freebsd.org/¥${ABI}/latest/"
export PACKAGESITE

おなじみの /usr/local/etc/pkg/repos/FreeBSD.confを置いておく

ファイルはあっても、とりあえず害はないなの
FreeBSD: {
  url: "pkghttp://pkg.FreeBSD.org/${ABI}/latest",
  mirror_type: "srv",
  enabled: yes
}

パッケージの最小自動インストール

PACKAGESITEの環境変数だか、よくわからなくなるので、最初から自動化をしてみるなの

#!/bin/sh
er() {
/bin/sh /root/script/er.sh $1 $2 $3 $4 $5 $6 $7 $8 $9
}

mkdir -p /root/script
cd /root/script

echo ----------------------------------------------------
echo Install pkg
echo ----------------------------------------------------
er pkg update -f

echo ----------------------------------------------------
echo Install svnup from pkg
echo ----------------------------------------------------
er pkg install -y svnup

echo ----------------------------------------------------
echo Install perl5. from pkg
echo ----------------------------------------------------
er pkg install -y perl5.
#ln -s /usr/local/bin/perl /usr/bin/perl

echo ----------------------------------------------------
echo Install wget from pkg
echo ----------------------------------------------------
er pkg install -y wget

echo ----------------------------------------------------
echo Install openssl from pkg
echo ----------------------------------------------------
er pkg install -y openssl

echo ----------------------------------------------------
echo Install openssl from gnupg
echo ----------------------------------------------------
er pkg install -y gnupg

echo ----------------------------------------------------
echo Install bash from pkg
echo ----------------------------------------------------
er pkg install -y bash

echo ----------------------------------------------------
echo Install portmaster from pkg
echo ----------------------------------------------------
er pkg install -y portmaster

echo ----------------------------------------------------
echo Remove /etc/pkg /usr/local/etc/pkg.conf
echo ----------------------------------------------------
rm -rf /etc/pkg/*
rm -rf /usr/local/etc/pkg.conf

echo ----------------------------------------------------
echo Delete PACKAGESITE
echo ----------------------------------------------------
cat /etc/profile|grep -v PACKAGESITE>/tmp/profile
cp /tmp/profile /etc/profile
rm -f /tmp/profile

conohaの大量IPアドレスを一括登録する

#!/bin/sh

TEMP="/tmp/ipset"
TMPRCCONF="$TEMP/rc.conf"
ETCRCCONF="/etc/rc.conf"
TMPRESOLVCONF="$TEMP/resolv.conf"
ETCRESOLVCONF="/etc/resolv.conf"
TMPHOSTS="$TEMP/hosts"
ETCHOSTS="/etc/hosts"
CONFLIST="/usr/local/etc/apache/httpd.conf /usr/local/etc/apache/Includes/vhosts.conf /usr/local/etc/nginx/nginx.conf"

er() {
        /bin/sh /root/script/erexec.sh $1 $2 $3 $4 $5 $6 $7 $8 $9
}

if test "$1" = ""; then
        echo $0 hostname
        exit
fi

mkdir -p $TEMP
cd $TEMP
cat <$TEMP/ipset.pl
#!/usr/bin/perl
my ¥$rcconf=<) {
        chomp;
        my(¥$cmd,¥$ip,¥$hostname)=split(/¥t/,¥$_);
        if(¥$cmd eq "DOMAIN") {
                ¥$domain=¥$ip;
                ¥$resolvconf.=<$TMPRCCONF")||die "$TMPRCCONF¥n";
        print W ¥$rcconf;
        close(W);

        open(W,">$TMPRESOLVCONF")||die "$TMPRESOLVCONF¥n";
        print W ¥$resolvconf;
        close(W);

        open(W,">$TMPHOSTS")||die "$TMPHOSTS¥n";
        print W ¥$hosts;
        close(W);

        foreach(@ipv4) {
                ¥$val{NAMEVIRTUALHOSTSV4}.=<) {
                ¥$buf.=¥$_;
        }
        close(R);
        foreach(keys ¥%val) {
                ¥$buf=~s/¥¥¥$¥$_/¥$val{¥$_}/g;
        }
        print "Replace ¥$file¥n";
        open(W,">¥$file")||die "¥$file¥n";
        print W ¥$buf;
        close(W);
}
EOF

/usr/local/bin/perl $TEMP/ipset.pl $TEMP/$1.ip

echo Add $ETCHOSTS
cat $TMPHOSTS>>$ETCHOSTS
echo Add $ETCRCCONF
cat $TMPRCCONF>>$ETCRCCONF
echo Replace $ETCRESOLVCONF
cat $TMPRESOLVCONF>$ETCRESOLVCONF

そして、定義ファイルはこんな感じで

DOMAIN  example.jp
SERVERNAME      sv1.example.jp
FAKESVNAME      www.example.jp
WEBMASTER       
ADMINEMAIL      
NAMESERVER      7.7.0.3
NAMESERVER      0.7.3.4
NAMESERVER      8.8.8.8
NAMESERVER      8.8.4.4
APACHEPORT      
APACHESSLPORT   3
SSHPORT 
IPV4GW  7.7.?.?
IPV6GW  ::?:?::1
IPV4_vtnet0     7.7.?.?/5.5.4.0 v4.sv1.conoha,sv1,0.sv1,1.sv1,2.sv1,3.sv 1,4.sv1,5.sv1,6.sv1,7.sv1,8.sv1,9.sv1,a.sv1,b.sv1,c.sv1,d.sv1,e.sv1,f.sv1
IPV6_vtnet0     :::2:7:7:5:2/     v6.sv1.conoha,sv1
IPV6_vtnet0     :::2:a7:?:?:?0/       0.v6.sv1.conoha,0.sv1
IPV6_vtnet0     :::2:a7:?:?:?1/       1.v6.sv1.conoha,1.sv1
IPV6_vtnet0     :::2:a7:?:?:?2/       2.v6.sv1.conoha,2.sv1
IPV6_vtnet0     :::2:a7:?:?:?3/       3.v6.sv1.conoha,3.sv1
IPV6_vtnet0     :::2:a7:?:?:?4/       4.v6.sv1.conoha,4.sv1
IPV6_vtnet0     :::2:a7:?:?:?5/       5.v6.sv1.conoha,5.sv1
IPV6_vtnet0     :::2:a7:?:?:?6/       6.v6.sv1.conoha,6.sv1
IPV6_vtnet0     :::2:a7:?:?:?7/       7.v6.sv1.conoha,7.sv1
IPV6_vtnet0     :::2:a7:?:?:?8/       8.v6.sv1.conoha,8.sv1
IPV6_vtnet0     :::2:a7:?:?:?9/       9.v6.sv1.conoha,9.sv1
IPV6_vtnet0     :::2:a7:?:?:?a/       a.v6.sv1.conoha,a.sv1
IPV6_vtnet0     :::2:a7:?:?:?b/       b.v6.sv1.conoha,b.sv1
IPV6_vtnet0     :::2:a7:?:?:?c/       c.v6.sv1.conoha,c.sv1
IPV6_vtnet0     :::2:a7:?:?:?d/       d.v6.sv1.conoha,d.sv1
IPV6_vtnet0     :::2:a7:?:?:?e/       e.v6.sv1.conoha,e.sv1
IPV6_vtnet0     :::2:a7:?:?:?f/       f.v6.sv1.conoha,f.sv1
IPV4_vtnet1     .0.0./5.0.0.0     local0.sv1

カーネルビルダー

configだけつくるの
#!/usr/bin/perl

$arch=`/usr/bin/uname -m`;
$arch=~s/[¥r|¥n]//g;
$generic="GENERIC";
$name=$ARGV[0];

if($name eq "") {
        print "Usage : $ARGV[0] kernel_name¥n";
        exit;
}

&main($name);

sub main {
        my($name)=@_;

        # GENERICカーネルのコンフィグ読み込み
        my $fh=&safe_open("/usr/src/sys/$arch/conf/$generic");

        my $buf;
        foreach(<$fh>) {
                # 整形して、コメントをカットする
#               next if(/¥t(^#)/);
                while(/¥t¥t/) { s/¥t¥t/¥t/g; }
                s/¥t#/#/g;
                s/#.*//g;
                # カーネル名の設定
                if(/(^ident)/) { s/GENERIC/$name/g; }

                # メイン部分の削除
                next if(/¥t(DEBUG=)/);
                next if(/¥t(MD_ROOT)/);
                next if(/¥t(NFSD)/);
                next if(/¥t(NFS_ROOT)/);
                next if(/¥t(MSDOSFS)/);
                next if(/¥t(CD)/);
                next if(/¥t(GEOM_RAID)/);
                next if(/¥t(COMPAT)/);
                next if(/¥t(MAC)/);

                # フロッピーディスクドライブの削除
                next if(/¥t(fdc)/);

                # サードパーティのATAコントローラーの削除
                next if(/¥t(mvc)/);
                next if(/¥t(siis)/);

                # SCSIコントローラの削除
                next if(/¥t(ahc|AHC)/);
                next if(/¥t(ahd|AHD)/);
                next if(/¥t(esp|hptiop|isp|mpt|mps|ncr|sym|trm|adv|adw|aic|bt|isci)/);

                # SCSIの不要なコントローラの削除
                next if(/¥t(sa|cd|pass|ses|ctl)/);

                # RAIDコントローラの削除
                next if(/¥t(amr|arcmsr|asr|ciss|dpt|hpt|iir|ips|mly|twa|tws)/);
                next if(/¥t(aac|aacp|aacraid|ida|mfi|mlx|pst|twe)/);

                # PS/2マウス、画面の不要なものの削除
                next if(/¥t(psm|splash|SC_PIXEL_MODE)/);

                # PCMCIA/PCCARDの削除
                next if(/¥t(cbb|pccard|cardbus)/);

                # RS2C/パラレルポートの削除
                next if(/¥t(uart|ppc|ppbus|lpt|ppi|vpo|puc)/);

                # イーサーネットコントローラの削除 (de emは残す)
                next if(/¥t(bxe|igb|ixgbe|le|ti|txp|vx)/);

                # miibusイーサーネットコントローラの削除
                next if(/¥t(miibus|ae|age|alc|ale|bce|bfe|bge|cas|dc|et|fxp|gem)/);
                next if(/¥t(hme|jme|lge|msk|nfe|nge|nve|pcn|re|rl|sf|sge|sis|sk)/);
                next if(/¥t(ste|stge|tl|tx|vge|vr|wb|xl)/);
                next if(/¥t(cs|ed|ex|ep|fe|sn|xe)/);
                next if(/¥t(wlan|IEEE|an|ath|AH_SUPPORT|ATH|AH_AR|bwi|bwn|ipw|iwi|iwn)/);
                next if(/¥t(malo|mwl|ral|wi|wpi)/);
                next if(/¥t(padlock_rng|rdrand_rng|vlan|tun|md|gif|faith|firmware)/);
                next if(/¥t(USB_DEBUG|uhci|ohci|ehci|xhci|usb|ukbd|umass)/);
                next if(/¥t(sound|snd)/);
                next if(/¥t(mmc|sdhci)/);
                next if(/¥t(virtio|vtnet|hyperv|XEN|xen|vmx)/);
                $buf.=$_;
        }
        while($buf=~/¥t¥t/) { $buf=~s/¥t¥t/¥t/g; }
        while($buf=~/¥t¥n/) { $buf=~s/¥t¥n//g; }
        while($buf=~/¥n¥n/) { $buf=~s/¥n¥n/¥n/g; }
        $buf.=</usr/src/sys/$arch/conf/$name");
        print $fh $bunner;
        print $fh $buf;
        close($fh);

        my $fh=&safe_open(">/root/kernel-conf/$name");
        print $fh $bunner;
        print $fh $buf;
        close($fh);
}

sub safe_open {
        my($fn)=@_;
        open my $fh, $fn ||die "$fh can't open";
        print "Open $fn¥n";
        $fh;
}

addconf.sh

#!/bin/sh

# /etc/rc.conf に追記する

# sendmailを無効にする
cat <>/etc/rc.conf
sendmail_enabled="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
makemotd_enable="YES"
EOF

# /usr/local/etc/rc.d/makemotd
mkdir -p /usr/local/etc/rc.d
touch /usr/local/etc/rc.d/makemotd
chmod 5 /usr/local/etc/rc.d/makemotd
chmod 0 /root

hypervが入っているのは、ご愛嬌なの。 Windows 8.1 Pro があれば、Hyper-Vで簡単にローカルでテストできるしね。

er.sh

#!/bin/sh

er() {
        STATS="1"
        while [ "$STATS" = "1" ]
        do
                $1 $2 $3 $4 $5 $6 $7 $8 $9
                if [ "$?" = "0" ]; then
                        STATS="0"
                else
                        PWD=`pwd`
                        echo "Error : $1 $2 $3 $4 $5 $6 $7 $8 $9"
                        echo "(pwd : $PWD)"
                        echo -n "About[A] / Retry[R] / Ignore[I] : "
                        read test
                        if [ "$test" = "a" ]; then
                                exit
                        fi
                        if [ "$test" = "i" ]; then
                                STATS="0"
                                echo
                        fi
                        if [ "$test" = "i" ]; then
                                echo
                        fi
                fi
        done
}
echo "==>$1 $2 $3 $4 $5 $6 $7 $8 $9"
er $1 $2 $3 $4 $5 $6 $7 $8 $9

アンケート

このページのトラックバックURL
https://daiba.cx/?cmd=tb&tb_id=ecbd2ae5ac

リンク元

Diary/--のトラックバックはありません。

Diary/--のリンク元はありません。