123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- #!/bin/bash
- set -e
- # 检查软件安装
- function check_package() {
- if ! dpkg -l | grep isc-dhcp-server; then
- sudo apt install -y isc-dhcp-server
- fi
- if ! dpkg -l | grep tftpd-hpa; then
- sudo apt install -y tftpd-hpa
- fi
- if ! dpkg -l | grep tftp-hpa; then
- sudo apt install -y tftp-hpa
- fi
- if ! dpkg -l | grep nfs-kernel-server; then
- sudo apt install -y nfs-kernel-server
- fi
- }
- # 重启服务
- function restart_service() {
- sudo systemctl restart tftpd-hpa.service nfs-kernel-server.service isc-dhcp-server.service
- # sudo systemctl status tftpd-hpa.service nfs-kernel-server.service isc-dhcp-server.service
- # sudo systemctl enable tftpd-hpa.service nfs-kernel-server.service isc-dhcp-server.service
- # for s in tftpd-hpa.service nfs-kernel-server.service isc-dhcp-server.service; do
- # STATUS=$(systemctl status $s | grep Active | awk '{print $2}')
- # # echo -e "$s\t$STATUS"
- # if [ ! $STATUS = "active" ]; then
- # sudo systemctl restart $s
- # fi
- # done
- }
- # 获取有线网卡
- function get_lan_interface() {
- # 获取有线网卡(如:enp0s25,enp4s0),目前以 e开头作为判断条件,需要再找找更精准的方法,或者做成选择项
- IFACE_LAN=$(LANG=en ip link | awk -F '[ :]' '{print $3}' | grep "^e")
- echo ${IFACE_LAN}
- }
- # 配置静态IP地址
- function config_static_ipaddr() {
- IFACE_LAN=$(get_lan_interface)
- echo "IFACE_LAN=${IFACE_LAN}"
- # 备份原配置文件
- CONFIG_FILE=/etc/netplan/01-network-manager-all.yaml
- if [ ! -f ${CONFIG_FILE}.bak ]; then
- sudo cp -v ${CONFIG_FILE}{,.bak}
- fi
- IPADDR=10.0.0.10
- GATEWAY=10.0.0.1
- DNS=10.0.0.10
- echo "IPADDR=${IPADDR}, GATEWAY=${GATEWAY}, DNS=${DNS}"
- CONNECT_NAME="pxe"
- nmcli c add type ethernet con-name ${CONNECT_NAME} ifname ${IFACE_LAN} ipv4.addr ${IPADDR}/24 ipv4.gateway ${GATEWAY} ipv4.method manual
- sudo nmcli c up ${CONNECT_NAME}
- }
- # 配置 tftpd-hpa
- function config_tftp_server() {
- # tftp 路径
- TFTP_PATH=/opt/pxe/
- sudo rsync -rR -v ./opt/pxe /
- sudo chmod 777 -R "${TFTP_PATH}"
- # tftp 配置文件
- CONFIG_FILE=/etc/default/tftpd-hpa
- if [ ! -f ${CONFIG_FILE}.bak ]; then
- sudo cp -v ${CONFIG_FILE}{,.bak}
- fi
- echo "=== tftp config file: ${CONFIG_FILE} ==="
- sudo tee ${CONFIG_FILE} <<EOF
- TFTP_USERNAME="tftp"
- TFTP_DIRECTORY="${TFTP_PATH}"
- TFTP_ADDRESS=":69"
- RUN_DAEMON="yes"
- TFTP_OPTIONS="-l -c -s -vv"
- EOF
- sudo systemctl restart tftpd-hpa.service
- }
- # 测试 tftp
- function test_tftp_server() {
- pushd /tmp >/dev/null
- tftp 127.0.0.1 -c get netbootx64.efi
- if [ -f netbootx64.efi ]; then
- echo "tftp get netbootx64.efi success!"
- else
- echo "tftp failed!"
- fi
- popd >/dev/null
- }
- # 配置 nfs-kernel-server
- function config_nfs_server() {
- # nfs 路径
- NFS_PATH=/opt/pxe
- if [ ! -d "${NFS_PATH}" ]; then
- sudo mkdir -p "${NFS_PATH}"
- sudo chmod 777 -R "${NFS_PATH}"
- fi
- # nfs 配置文件
- CONFIG_FILE=/etc/exports
- if [ ! -f ${CONFIG_FILE}.bak ]; then
- sudo cp -v ${CONFIG_FILE}{,.bak}
- fi
- echo "=== nfs config file: ${CONFIG_FILE} ==="
- sudo tee ${CONFIG_FILE} <<EOF
- ${NFS_PATH}/ *(rw,sync,no_root_squash,no_subtree_check)
- EOF
- echo ""
- sudo systemctl restart nfs-kernel-server.service
- showmount --exports
- }
- # 配置dhcp server
- function config_dhcp_server() {
- DHCP_FILE=/etc/default/isc-dhcp-server
- if [ ! -f ${DHCP_FILE}.bak ]; then
- sudo cp -v ${DHCP_FILE}{,.bak}
- fi
- sudo sed -i "/INTERFACESv4/c INTERFACESv4=\"$(get_lan_interface)\"" ${DHCP_FILE}
- sudo sed -i "/^INTERFACESv6/ {s/^/#/}" ${DHCP_FILE}
- # dhcpd 配置文件
- CONFIG_FILE=/etc/dhcp/dhcpd.conf
- if [ ! -f ${CONFIG_FILE}.bak ]; then
- sudo cp -v ${CONFIG_FILE}{,.bak}
- fi
- echo "=== dhcp config file: ${CONFIG_FILE} ==="
- sudo tee ${CONFIG_FILE} <<EOF
- ddns-update-style none;
- ignore client-updates;
- default-lease-time 600;
- max-lease-time 7200;
- log-facility local7;
- option space PXE;
- allow booting;
- allow bootp;
- option client-system-arch code 93 = unsigned integer 16;
- subnet 10.0.0.0 netmask 255.255.255.0 {
- range dynamic-bootp 10.0.0.100 10.0.0.200;
- option broadcast-address 10.0.0.255;
- option subnet-mask 255.255.255.0;
- option routers 10.0.0.10;
- option domain-name "kylin.com";
- option domain-name-servers 10.0.0.10;
- next-server 10.0.0.10;
- if option client-system-arch = 00:07 or option client-system-arch = 00:09 {
- filename "netbootx64.efi";
- } elsif option client-system-arch = 00:0B {
- filename "netbootaa64.efi";
- } elsif option client-system-arch = 00:00 {
- filename "pxelinux.0";
- }
- }
- # subnet 172.29.220.0 netmask 255.255.255.0 {
- # range dynamic-bootp 172.29.220.15 172.29.220.250;
- # option broadcast-address 172.29.220.255;
- # option subnet-mask 255.255.255.0;
- # option routers 172.29.220.242;
- # option domain-name "kylin.com";
- # option domain-name-servers 172.29.220.242;
- # next-server 172.29.220.242;
- # }
- # subnet 172.29.0.0 netmask 255.255.0.0 {
- # range dynamic-bootp 172.29.220.10 172.29.221.250;
- # option broadcast-address 172.29.220.255;
- # option subnet-mask 255.255.0.0;
- # option routers 172.29.220.242;
- # option domain-name "kylin.com";
- # option domain-name-servers 172.29.220.242;
- # next-server 172.29.220.242;
- # }
- EOF
- sudo systemctl restart isc-dhcp-server.service
- }
- sudo ls >/dev/null
- check_package
- # if lsb_release -i | grep -q Raspbian; then
- # echo "TODO: config Raspbian"
- # else
- # config_static_ipaddr
- # fi
- config_tftp_server
- test_tftp_server
- config_nfs_server
- config_dhcp_server
- # restart_service
|