影片Demo:https://youtu.be/_tEx_A1ZzBU
一、Mirror 鏡像站
1. 準備 200 GB 以上之硬碟空間,並建立裝鏡像站之目錄
mkdir -p /home/ftp
2. 寫一個 getdeb.sh
# 選擇一個外站來下載
HOST=ftp.tw.debian.org
#HOST=debian.nctu.edu.tw
#HOST=opensource.nchc.org.tw
#HOST=ftp.wa.au.debian.org
#HOST=120.117.72.71
#HOST=ftp.debian.org
debmirror \
--arch=i386,amd64,armel,armhf,sha4 \
--dist=jessie,jessie-updates \
--di-arch=i386,amd64,armel \
--di-dist=stable \
--host=$HOST \
--root=":debian" \
--diff=none -p \
--nosource \
--method=rsync \
--section main,contrib,non-free,main/debian-installer \
--i18n \
--ignore-release-gpg /home/ftp/debian/ ;
#--section non-free,contrib,main,main/debian-installer,main/installer-armel,main/i18n,main/source \
#debmirror \
# -v --nosource -d lenny/updates -a i386 \
# -s non-free,contrib,main,main/debian-installer \
# --method=http -h security.debian.org \
# --ignore-release-gpg -r /debian-security /home/ftp/debian/security/
# --section main,contrib,non-free,main/debian-installer,main/installer-armel,main/i18n,main/source \
#wget -r -l1 -nH ftp://$HOST/debian/dists/squeeze/main/source/
date
3. 將鏡像站載到 /home/ftp/debian 目錄下
sh getdeb.sh
4. 修改/home/ftp/debian所有檔案權限
DIR=/home/ftp/debian
chown root.root -Rv $DIR
chmod ug-s -Rv $DIR
find $DIR -type -d -exec chmod 755 {} +
find $DIR -type -f -exec chmod 644 {} +
5. 修改 sources.list 檔:
cat >> /etc/apt/sources.list << EOF deb ftp://localhost/debian jessie main contrib non-free deb-src ftp://localhost/debian jessie main contrib non-free EOF
6. 測試更新
apt-get update
7. 若出現 installer 或 source… 缺少檔案,請自行去別的鏡像站補檔案到對應的目錄。
=============================================================
二、建立私有網路 192.168.10.0/24
1. 將建置環境之對外網路線先移除,
其他含有 DHCP Server 相關的設備也移除 (例如 WiFi 基地台)。
其他含有 DHCP Server 相關的設備也移除 (例如 WiFi 基地台)。
2. PXE Server 端,修改網路設定
vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
########## Eth0/DHCP ##########
#allow-hotplug eth0
#iface eth0 inet dhcp
########### PXE Server Machine ##########
allow-hotplug eth0
iface eth0 inet static
address 192.168.10.254
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
gateway 192.168.10.1
3. 重啟網卡
/etc/init.d/networking restart
4. 確認網路設定成功,若沒有出現 ip:192.168.10.254,再多重啟幾次。
/sbin/ifconfig=============================================================
三、FTP / NFS /HTTP Server(擇一,本例使用 FTP)
‧FTP Server
1. 安裝sudo apt-get install proftpd-basic
2.修改設定檔 /etc/proftpd/proftpd.conf
搜尋 Anonymous ,解除註解,完成如下結果:
sudo vi /etc/proftpd/proftpd.conf
搜尋 Anonymous ,解除註解,完成如下結果:
<Anonymous ~ftp>
User ftp
Group nogroup
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Cosmetic changes, all files belongs to ftp user
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
# Limit the maximum number of anonymous logins
MaxClients 10
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayChdir .message
# Limit WRITE everywhere in the anonymous chroot
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
# Uncomment this if you're brave.
# <Directory incoming>
# # Umask 022 is a good standard umask to prevent new files and dirs
# # (second parm) from being group and world writable.
# Umask 022 022
# <Limit READ WRITE>
# DenyAll
# </Limit>
# <Limit STOR>
# AllowAll
# </Limit>
# </Directory>
</Anonymous>
3.修改 /etc/passwd 設定
搜尋 ftp ,將其中的目錄路徑改為自訂 FTP 目錄 (例如: /home/ftp)
瀏灠器測試 ftp://192.168.10.254
-------------------------------------------------------------------------------------------------
‧PXE Server
1. 安裝
2. 設定
3. 重啟
4. 檢查
Export list for localhost:
/srv/nfs 192.168.10.0/24
‧NFS Client
1. Client 端套件安裝
2.建立掛載 NFS 目錄
3. 手動掛載
2. 修改
3. 修改
4. 重啟
sudo apt-get install isc-dhcp-server
2. 設定
3. 重啟
2.設定
3. 下載開機套件
4. 確立 /srv/tftp 目錄存在
sudo vi /etc/passwd
搜尋 ftp ,將其中的目錄路徑改為自訂 FTP 目錄 (例如: /home/ftp)
瀏灠器測試 ftp://192.168.10.254
-------------------------------------------------------------------------------------------------
‧NFS Server
‧PXE Server
1. 安裝
sudo apt-get install nfs-kernel-server
2. 設定
sudo vi /etc/exports
/srv/nfs 192.168.10.0/24(rw,no_root_squash,async,no_subtree_check)
3. 重啟
exportfs -rav /etc/init.d/nfs-kernel-server restart
4. 檢查
showmount -e localhost正確輸出:
Export list for localhost:
/srv/nfs 192.168.10.0/24
‧NFS Client
1. Client 端套件安裝
sudo apt-get install nfs-common
2.建立掛載 NFS 目錄
mkdir -p /dev/nfs
3. 手動掛載
mount -t nfs -nolock 192.168.10.1:/srv/nfs /dev/nfs-------------------------------------------------------------------------------------------------
‧HTTP Server
1. 安裝sudo apt-get install apache2
2. 修改
vi /etc/apache2/apache2.conf`
<Directory /home/ftp>
Options Indexes
AllowOverride None
Require all granted
</Directory>
3. 修改
vi /etc/apache2/sites-available/000-default.conf`
#DocumentRoot /var/www/html DocumentRoot /home/ftp
4. 重啟
/etc/init.d/apache2 restart=============================================================
四、DHCP Server
1. 安裝sudo apt-get install isc-dhcp-server
2. 設定
vi /etc/dhcp/dhcpd.conf
option domain-name "example.org";
option domain-name-servers 120.117.2.1;
#option domain-name-servers 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
allow booting;
subnet 192.168.10.0 netmask 255.255.255.0{
range 192.168.10.100 192.168.10.200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.10.255;
option routers 192.168.10.1;
option domain-name-servers 120.117.2.1;
next-server 192.168.10.254;
filename "pxelinux.0";
}
3. 重啟
/etc/init.d/isc-dhcp-server restart systemctl enable isc-dhcp-server systemctl status isc-dhcp-server=============================================================
五、TFTP Server
1. 安裝sudo apt-get -y install tftpd-hpa
2.設定
vi /etc/default/tftpd-hpa
TFTP_RUN_DAEMON="yes" TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"
3. 下載開機套件
wget http://ftp.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/netboot.tar.gz
4. 確立 /srv/tftp 目錄存在
mkdir -p /srv/tftp
5. 解壓至 tftp 目錄
tar xfva netboot.tar.gz -C /srv/tftp
6. PXE 開機選單訊息(自行定義)
7. 原檔備份
8. PXE 開機選單
9. 權限o+rx
10. 重啟
=============================================================
#https://www.youtube.com/watch?v=YT7qUoEw0BY
#http://pastebin.com/jadh4U5n
#https://www.debian.org/releases/jessie/example-preseed.txt
=============================================================
3. 遠端 ssh 第一次,無需打 yes ,自動更新 known_hosts 檔方法:
建一設定檔於 PXE Server 端: /root/.ssh/config
vi /srv/tftp/boot.msg
=========================
| INSTALL MENU |
=========================
Choose installation type:
0 Local Boot(Default)
1 PXE Manual Install Debian/Jessie
2 PXE Automated Install Debian/Jessie
=========================
7. 原檔備份
mv /srv/tftp/pxelinux.cfg/default /srv/tftp/pxelinux.cfg/default.bak
8. PXE 開機選單
vi /srv/tftp/pxelinux.cfg/default
DISPLAY boot.msg
PROMPT 1
timeout 3000
default 0
LABEL 0
localboot 0
LABEL 1
kernel debian-installer/amd64/linux
append vga=normal initrd=debian-installer/amd64/initrd.gz --
LABEL 2
kernel debian-installer/amd64/linux
append vga=normal initrd=debian-installer/amd64/initrd.gz auto=true priority=critical url=http://192.168.10.254/preseed.cfg interface=eth0
9. 權限o+rx
chmod -Rv 755 /srv/tftp
10. 重啟
/etc/init.d/tftpd-hpa restart update-rc.d tftpd-hpa defaults systemctl enable tftpd-hpa
六、自動安裝設定 Preseed
#http://www.unt.edu/benchmarks/archives/2008/may08/auto_install_howto-2.pdf#https://www.youtube.com/watch?v=YT7qUoEw0BY
#http://pastebin.com/jadh4U5n
#https://www.debian.org/releases/jessie/example-preseed.txt
vim /home/ftp/preseed.cfg
#https://www.debian.org/releases/jessie/example-preseed.txt # Localization d-i debian-installer/locale string en_US d-i console-keymaps-at/keymap select us d-i console-setup/ask_detect boolean false d-i keyboard-configuration/xkb-keymap select us d-i keyboard-configuration/layoutcode string us # Networking d-i netcfg/choose_interface select auto d-i netcfg/get_hostname string unassigned-hostname d-i netcfg/get_domain string unassigned-domain # APT Mirror d-i mirror/country string enter information manually d-i mirror/http/hostname string ftp://192.168.10.254 d-i mirror/http/directory string /debian #d-i mirror/suite string default d-i mirror/http/proxy string # Timezone / Time d-i clock-setup/utc boolean false d-i time/zone string Asia/Taipei d-i clock-setup/ntp boolean true d-i clock-setup/ntp-server tick.stdtime.gov.tw # Partitoning # # https://wikitech.wikimedia.org/wiki/PartMan/Auto d-i partman-auto/disk string /dev/sda d-i partman-auto/method string regular #d-i partman-auto/expert_recipe string \ root :: \ 5000 25000 -1 ext4 \ $primary{ } \ $bootable{ } \ method{ format } \ format{ } \ use_filesystem{ } \ filesystem{ xfs } \ mountpoint{ / } \ . \ 1024 2048 8192 linux-swap \ $primary{ } \ method{ swap } \ format{ } \ . d-i partman-auto/choose_recipe select root d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/confirm boolean true d-i partman/confirm_write_new_label boolean true d-i partman/confirm_nooverwrite boolean false d-i partman/choose_partition select "Finish partitioning and write changes to disk" # Grub Install d-i grub-installer/only_debian boolean true d-i grub-installer/with_other_os boolean true d-i grub-installer/bootdev string /dev/sda # Account(s) setup # ROOT d-i passwd/root-login boolean true d-i passwd/root-password password abc123 d-i passwd/root-password-again password abc123 # USER d-i passwd/make-user boolean true d-i passwd/user-fullname string student d-i passwd/username string student d-i passwd/user-password password abc123 d-i passwd/user-password-again password abc123 d-i user-setup/allow-password-weak boolean true #d-i passwd/user-default-groups string users,audio,cdrom,video #d-i passwd/user-uid string 1001 # tasksel / extra APT packages #tasksel tasksel/first multiselect standard tasksel tasksel/first multiselect minimal d-i pkgsel/include string \ ssh sshpass sudo aptitude vim ntp rsync popularity-contest popularity-contest/participate boolean true # run shell script d-i preseed/late_command string \ in-target wget ftp://192.168.10.254/env.sh -P /root/; \ in-target /bin/chmod 700 /root/env.sh; \ in-target /bin/sh /root/env.sh
=============================================================
七、新機環境設定
自訂義於 /home/ftp/env.sh#!/bin/bash # KLin # 2015/08/25 USER=student # login directory: /root cd /root/ # APT Package updates #apt-get update # sshd server #apt-get -y install ssh sshpass rsh sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config mkdir -p /root/.ssh ## 使用 `ssh-keygen` 指令生成公鑰,Copy 起來 #cat >> /root/.ssh/authorized_keys << EOF #ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLDfPtWH2zTq92nfsml5i6agoXWQRBzsb9VJzKGwY/jyPfyIL7rl+Q#hD4oGxDLW3pNmtflAkQ3/X3W8j/o7tW14Sdw2eW5HRl2Um2eSa9q2BWHbzT464R+xlGgAI3iUH0yPRgW602EYzeCZi3/#8zSoVHMVrjsZyjOzz5n+EFbNsirVtSOndF9iXa2ByT1GuxjOobBWoIue5/1jb7B8pG6QlRAf6kz0x/1xLWASiBmMaLPf#mHbQ5xvgBFbSOQTTG7vRevuVrpBaUdEHEGiRMY4TS8o/2bOzAoCa9hgCcxb1N3Ys/AKbwU00yWGUSKqhTK93tpbSsUmG#34MaDGmMWmfz root@KaiLin #ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCllLrsVt7koI6q/erYCUubKW2fxHRGYB4xYkY7LacPxiSexnvrX6yk#vRQbWcEOtNig2SXZJ6NwJWIDnkAfehVLbYWSu1S4MfPMzPLQVQryAQxf3oajyLAg+D64QGeBfDmScJ0LIBwPJq9/oqSI#4QgiMUXjj+9kBn6VBzGaB9h2u6AN1YYRJYJbKHFt4mxiqbXuXalw2fC0VWoerp9La9weozvCWOXeuxL6SCYPyTcIDqQ7#t9hSvH93af6HqNtcBr0WzmrYdrVRyNW5KbCD0IFf35yOogzrAon86MVjReVAF2gLHnFYz+bjH4DstcRAAZgJTvT4HGuA#cGqrfXf11RhZ root@120-117-73-86 #EOF # Black List cat >> /etc/modprobe.d/fbdev-blacklist.conf << EOF blacklist nouveau blacklist nv blacklist ast EOF # Setting `sudo` echo "$USER ALL=(ALL:ALL) ALL" >> /etc/sudoers # .bashrc & .vimrc for ACCOUNT in /root /home/$USER do # set .bashrc cat >> $ACCOUNT/.bashrc << EOF # Language Setting "zh.TW.UTF-8" export LC_ALL=zh_TW.UTF-8 export LANG=zh_TW.UTF-8 export LANGUAGE=zh_TW.UTF-8 # define more command aliases alias ls='ls -F --color=auto' alias l='ls -lF --color=auto' alias ll='ls -lF --color=auto' alias lt='ls -lt --color=auto' alias la='ls -aF --color=auto' alias lh='ls -lhF --color=auto' alias lz='ls -lZF --color=auto' alias grep='grep --color=auto' alias vi='vim' alias df='df -h' alias ifconfig='/sbin/ifconfig' EOF # set .vimrc cat >> $ACCOUNT/.vimrc << EOF set hlsearch set bg=dark syntax on EOF done # end test touch /root/env_run.ok # Other shell...=============================================================
八、遠端控制 rsh + sshpass
※ 注意,使用 rsh 時,Server 與 Client 必需有相同之使用者帳號,
若 Server 端使用 root 權限,則 rsh 所執行的指令於 Client 端也為 root 權限。
若 Server 端使用 root 權限,則 rsh 所執行的指令於 Client 端也為 root 權限。
1. 於 server 端發遠端指令的方法參考 http://jamyy.us.to/blog/2013/08/5260.html
2. 安裝
apt-get install sshpass rsh
3. 遠端 ssh 第一次,無需打 yes ,自動更新 known_hosts 檔方法:
建一設定檔於 PXE Server 端: /root/.ssh/config
StrictHostKeyChecking no
4 遠端下指令,注意目前執行 rsh 的使用者權限:
sshpass -p <密碼> rsh <主機 IP> <指令> &
※令 ssh 連線無需輸入密碼
於 PXE Server 端,指令` ssh-keygen `產生 public key ,
並 copy 至 Client 端:/root/.ssh/authorized_keys (自行建立)的檔案內。
=============================================================
九、Reference:
http://www.unt.edu/benchmarks/archives/2008/may08/auto_install_howto-2.pdfhttps://raymii.org/s/articles/virt-install_introduction_and_copy_paste_distro_install_commands.html
http://www.tecmint.com/multiple-centos-installations-using-kickstart/#
http://ubuntuforums.org/showthread.php?t=1463142
http://www.syslinux.org/wiki/index.php/Comboot/menu.c32
http://wiki.hackzine.org/sysadmin/debian-pxe-server.html
http://www.iram.fr/~blanchet/tutorials/read-only_diskless_debian7.pdf
https://www.debian.org/releases/jessie/amd64/ch04s05.html.en
https://www.debian-administration.org/article/478/Setting_up_a_server_for_PXE_network_booting
http://linux.vbird.org/somepaper/20100901-pxe_ks.pdf
http://linux.vbird.org/somepaper/20101020-pxe_ks_2.pdf
https://help.ubuntu.com/community/DisklessUbuntuHowto
https://www.debian.org/releases/jessie/example-preseed.txt