由 DHCP Server 的動態 IP 轉成固定 IP – Linux Server 篇

Linux 安裝完成之後,如果沒有在手動或自動安裝中設定好網路組態,通常就要手動設定網路,但如果是用由 DHCP Server 自動取得 IP,會節省許多的時間,但如果是 Server 的話,還是使用固定 IP 會比較好。[@more@]
底下文章內容取自:HowTos/NetworkInstallServer – CentOS Wiki
1. 建立 Script 檔
# vim /usr/local/bin/set_static_ip
#!/bin/bash
echo “Converting DHCP scope to static IP address”

DEVICE=`route -n|grep ‘^0.0.0.0’|awk ‘{print $8}’`
IPADDR=`ifconfig $DEVICE|grep ‘inet addr:’|awk ‘{sub(/addr:/,””); print $2}’`
NETMASK=`ifconfig $DEVICE|grep ‘Mask’|awk ‘{sub(/Mask:/,””); print $4}’`
NETWORK=`ipcalc $IPADDR -n $NETMASK|awk -F= ‘{print $2}’`
GATEWAY=`route -n|grep ‘^0.0.0.0’|awk ‘{print $2}’`
HWADDR=`ifconfig $DEVICE|grep ‘HWaddr’|awk ‘{print $5}’`
HOSTNAME=`hostname`

cat <<EOF >/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=$HOSTNAME
GATEWAY=$GATEWAY
EOF

cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$DEVICE
DEVICE=$DEVICE
BOOTPROTO=static
IPADDR=$IPADDR
NETMASK=$NETMASK
ONBOOT=yes
HWADDR=$HWADDR
EOF

2. 賦予執行權限
# chmod 700 /usr/local/bin/set_static_ip

3. 執行
# /usr/local/bin/set_static_ip

4. 觀看成果
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=test.tces.ilc.edu.tw
GATEWAY=192.168.1.254

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.6
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=6C:62:6D:61:80:81

在 PXE 開機選單中加入 Clonezilla 功能

Clonezilla 是一套類似 Ghost 的備份和還原程式,是由國家高速網路中心所開發,完全免費,支援多種平台的備份及還原,如:Windows / Linux / Mac…等等,一般使用時都是放在 USB 隨身碟(硬碟) 或燒錄成光碟來使用,不過既然有 PXE,就放在 PXE Server 上,更加的方便,完全不用光碟或隨身碟,既方便又環保。
Clonezilla 官方網站: http://clonezilla.nchc.org.tw/clonezilla-live/

參考網站:
【FreeBSD】架設電腦教室大量佈署環境 – PXE + Clonezilla Live + NFS 備份/還原 @ 有為青年生活札記 :: 痞客邦 PIXNET ::
Clonezilla live

下載 Clonezilla: 版本會一直更新,視所需平台而定
# wget http://downloads.sourceforge.net/project/clonezilla/clonezilla_live_alternative_testing/20140107-trusty/clonezilla-live-20140107-trusty-amd64.zip
# wget http://downloads.sourceforge.net/project/clonezilla/clonezilla_live_alternative_testing/20140107-trusty/clonezilla-live-20140107-trusty-i386.zip
# mkdir /var/lib/tftpboot/images/Clonezilla
# unzip clonezilla-live-20140107-trusty-amd64.zip -d /var/lib/tftpboot/images/Clonezilla

[@more@]
修改 PXE 選單
# vim /var/lib/tftpboot/pxelinux.cfg/default
加入下面幾行
使用 tftp
LABEL Clonezilla Live
   MENU LABEL Clonezilla Live
   MENU PASSWD Clonezilla
   kernel images/Clonezilla/live/vmlinuz
   append initrd=images/Clonezilla/live/initrd.img boot=live config noswap nolocales edd=on nomodeset ocs_live_run=”ocs-live-general” ocs_live_extra_param=”” ocs_live_keymap=”NONE” ocs_live_batch=”no” ocs_lang=”zh_TW.UTF-8″ vga=788 nosplash fetch=tftp://192.168.1.6/images/Clonezilla/live/filesystem.squashfs

使用 nfs
LABEL Clonezilla Live
   MENU LABEL Clonezilla Live
   MENU PASSWD Clonezilla
   kernel images/Clonezilla/live/vmlinuz
   append initrd=images/Clonezilla/live/initrd.img boot=live config noswap nolocales edd=on nomodeset ocs_live_run=”ocs-live-general” ocs_live_extra_param=”” ocs_live_keymap=”NONE” ocs_live_batch=”no” ocs_lang=”zh_TW.UTF-8″ vga=788 nosplash  netboot=nfs nfsroot=192.168.1.6:/Clonezilla

PXE 功能表


開機畫面


開機完成

在 PXE 開機選單中加入 SPFDisk / Ghost / FreeDOS 選項

複製 PXE 所需的程式
# cp /usr/share/syslinux/memdisk /var/lib/tftpboot
建立目錄
# mkdir /var/lib/tftpboot/dos
複製檔案到相對應目錄
# cp spfdisk.img /var/lib/tftpboot/dos
# cp ghost.img /var/lib/tftpboot/dos
# cp fdboot.img /var/lib/tftpboot/dos
[@more@]
修改 PXE 選單
# vim /var/lib/tftpboot/pxelinux.cfg/default
加入下面幾行
LABEL SPFDisk
   MENU LABEL SPFDisk
   MENU PASSWD SPFDisk
   kernel memdisk
   append initrd=dos/spfdisk.img

LABEL Symantec Ghost
   MENU LABEL Symantec Ghost
   MENU PASSWD Ghost
   kernel memdisk
   append initrd=dos/ghost.img

LABEL FreeDOS 1.0
   MENU LABEL FreeDOS 1.0
   MENU PASSWD FreeDOS
   kernel memdisk
   append initrd=dos/fdboot.img


選項開機畫面

輸入設定的密碼



SPFDisk 執行畫面


Symantec Ghost 選項


FreeDOS 選項

FreeDOS 開機畫面

在 PXE 開機選單中加入 memtest 選項

有時候覺得電腦的記憶體有問題,想要測試一下,就要用 memtest86 的開機光碟,或是利用隨身碟加上 grub4dos 開機來測試,燒光碟不環保,隨身碟又不一定會隨時放在身上,這時候利用 PXE 開機來執行,就是最方便了!
底下文章參考 memtest86+ PXE boot | panticz.de

Memtest86+ – Advanced Memory Diagnostic Tool 官方網站:http://www.memtest.org/

1. 建立 /var/lib/tftpboot/memtest 目錄
# mkdir /var/lib/tftpboot/memtest

2. 切換目錄
# cd /var/lib/tftpboot/memtest

[@more@]3. 下載 memtest86+ 程式,一定要下載 zip/gz 檔
# wget http://www.memtest.org/download/5.01/memtest86+-5.01.bin.gz

4. 解壓縮
# gunzip memtest86+-5.01.bin.gz
更改檔名
# mv memtest86+-5.01.bin memtest86+-5.01
# ls -l
總計 148
-rw-r–r–. 1 root root 150024 2013-09-28 01:45 memtest86+-5.01

5. 修改 PXE 選單
# vim /var/lib/tftpboot/pxelinux.cfg/default
加入下面幾行
LABEL Memory Test
   MENU LABEL Memory Test – memtest86+
   kernel memtest/memtest86+-5.01

開機畫面

記憶體測試

解決 FTP 時 550 Failed to change directory. 的問題

在建立 PXE Server 時,有透過 FTP 的方式來網路安裝 Linux,是使用 ln -s(Symbolic Link) 的方式來連結。
# ln -s /var/www/html/CentOS /var/ftp/CentOS

但建立完之後,使用 ftp 連線時,卻發現無法切換到 CentOS 目錄,出現 550 Failed to change directory 的錯誤訊息
# lftp 192.168.1.6
lftp 192.168.1.6:~> ls
lrwxrwxrwx    1 0        0              20 Jan 08 09:31 CentOS -> /var/www/html/CentOS
drwxr-xr-x    2 0        0            4096 Jan 08 09:29 Linux
drwxr-xr-x    2 0        0            4096 Jan 06 19:16 pub
lftp 192.168.1.6:/> cd CentOS/
cd: Access failed: 550 Failed to change directory. (/CentOS)
lftp 192.168.1.6:/> bye
[@more@]本來以為是 SELinux 的問題,幾乎把所有有關 ftp 的選項都打開了,也是沒有辦法
# getsebool -a | grep ftp
allow_ftpd_anon_write –> off
allow_ftpd_full_access –> on
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
ftp_home_dir –> on
ftpd_connect_db –> off
ftpd_use_fusefs –> off
ftpd_use_passive_mode –> on
httpd_enable_ftp_server –> off
tftp_anon_write –> off
tftp_use_cifs –> off
tftp_use_nfs –> off

後來乾脆來 SELinux 整個關掉,也是不行

後來在網路上找了很久,終於找到這一篇文章 網路一族: vsftp 出現 550 failed to change directory
文章中提到的第 2 點,可能是 Soft Link 的問題,因為 chroot 不能使用 Link 的功能

根據這一個提示,在網路上搜尋 Soft Link 550,在 FileZilla Forums • View topic – Symbolic links cause error 550 because path is too deep  找到了解決的方式

刪除原來的 Link
# rm -rf /var/ftp/CentOS
建立要連結的目錄
# mkdir /var/ftp/CentOS
使用 mount –bind 的方式來建立連結
 # mount –bind /var/www/html/CentOS /var/ftp/CentOS

這樣子就可以正常切換到 /var/ftp/CentOS 目錄了!

安裝 aeasyedit 文字編輯器

剛接觸 Linux / BSD 對於系統上的文字編輯器 vi  / vim,一時之間不太習慣它的用法,所以才有各式各樣的編輯器,如:joe / ee…等等的替代編輯器,aeasyedit 也是其中的一套,它是由 Hugh Mahon 所開發,它的特別之處是它把常用到的一些功能按鍵就直接顯示在畫面上,並且使用了一些在 Windows 平台上軟體常用的快速鍵,如:Ctrl+C / Ctrl+V / Ctrl+X 等。使用者就不用記那麼多的按鍵了。
[@more@]安裝方式:
因為 aeasyedit 不是官方套件中的套件,所以要使用 rpmforge 套件庫來安裝
# yum install aeasyedit –enablerepo=rpmforge

安裝之後執行 aee 即可
# aee

Esc 鍵 — 出現功能表
Ctrl+E — 呼叫命令列,類似 vi / vim 的 Esc 鍵 + :
Ctrl+T — 檔案最前面
Ctrl+B — 檔案最後面
Ctrl+N– 下一頁
Ctrl+P — 上一頁
Ctrl+L — 刪除游標所在行
Ctrl+G+L — 復原刪掉的那一行
Ctrl+W — 刪除一個字串
Ctrl+G+W — 復原刪除的字串
Ctrl+K —  刪除字元
Ctrl+G+K — 復原刪除的字元
Ctrl+F — 搜尋
Ctrl+G+F — 輸入要搜尋的字串
Ctrl+D — 移動游標到所在行的開頭
Ctrl+O — 移動游標到所在行的尾端
Ctrl+U — 標記
Ctrl+X — 剪下
Ctrl+C — 複製
Ctrl+V — 貼上
Ctrl+Z — 取代

squid Proxy Server 使用 LDAP Server 做認證

1. 修改設定檔
# vim /etc/squid/squid.conf
在 acl 區段加入下面這二行,192.168.154.167 為 LDAP Server’ IP
acl squid_user proxy_auth REQUIRED
auth_param basic program /usr/lib64/squid/squid_ldap_auth -b “dc=ldap,dc=tces.ilc.edu.tw” -h 192.168.154.167 -f “uid=%s”

2. 在 /etc/squid/squid.conf 中的 http_access deny all 前面加入下面這一行
http_access allow squid_user

3. 重新啟動 Squid Proxy Server
# server squid restart
[@more@]

檢驗是否有成功
# grep -v t850008 /var/log/squid/access.log | tail -5
1389089280.327     32 192.168.220.14 TCP_CLIENT_REFRESH_MISS/200 2722 GET http://safebrowsing-cache.google.com/safebrowsing/rd/ChNnb29nLW1hbHdhcmUtc2hhdmFyEAEYtdwHILrcByoFOe4BAAMyBTXuAQAP t850008 DIRECT/2404:6800:4008:c02::64 application/vnd.google.safebrowsing-chunk
1389089280.368     12 192.168.220.14 TCP_CLIENT_REFRESH_MISS/200 4471 GET http://safebrowsing-cache.google.com/safebrowsing/rd/ChNnb29nLW1hbHdhcmUtc2hhdmFyEAAYhZIIIJiSCCoGDwkCAP8DMgYFCQIA_wM t850008 DIRECT/2404:6800:4008:c02::64 application/vnd.google.safebrowsing-chunk
1389089280.414     12 192.168.220.14 TCP_CLIENT_REFRESH_MISS/200 4977 GET http://safebrowsing-cache.google.com/safebrowsing/rd/ChFnb29nLXBoaXNoLXNoYXZhchABGOe5CSDsuQkyBedcAgA_ t850008 DIRECT/2404:6800:4008:c02::64 application/vnd.google.safebrowsing-chunk
1389089280.460     12 111.249.220.14 TCP_CLIENT_REFRESH_MISS/200 2445 GET http://safebrowsing-cache.google.com/safebrowsing/rd/ChFnb29nLXBoaXNoLXNoYXZhchABGO25CSCAugkqB-5cAgD__wcyBe1cAgAB t850008 DIRECT/2404:6800:4008:c02::64 application/vnd.google.safebrowsing-chunk
1389089280.494     12 192.168.220.14 TCP_CLIENT_REFRESH_MISS/200 4918 GET http://safebrowsing-cache.google.com/safebrowsing/rd/ChFnb29nLXBoaXNoLXNoYXZhchAAGMPyEiDM8hIqBUa5BAB_MgVDuQQABw t850008 DIRECT/2404:6800:4008:c02::64 application/vnd.google.safebrowsing-chunk

將 ldapsearch 輸出內容 (LDIF) 轉 UTF-8 編碼

因為 LDAP 的中文是使用 Base64 編碼過,所以要經過轉換成 utf8,才能夠看的懂,之前已經有找到是利用 php 程式來轉換,不過並不是所有的電腦都會安裝 php,最好的方式是直接使用系統內部的程式來轉換,經過一番搜尋,終於在 O老猴的失憶錄: OpenLDAP 中文顯示亂碼 ,找到了解答。
方式就是利用 alias 命令別名
# vim /etc/profile 或 vim $HOME/.bash_profile

alias un64=’awk ”’BEGIN{FS=”:: “;c=”base64 -d”}{if(/w+:: /) {print $2 |& c; close(c,”to”); c |& getline $2; close(c); printf(“%s:: %sn”, $1, $2); next} print $0 }””

讓命令生效
# source /etc/profile

# source $HOME/.bash_profile

使用方式:
# /usr/bin/ldapsearch -x -b “ou=Teacher,dc=ldap,dc=tces.ilc.edu.tw” uid=* | un64

建立 PXE Server 透過網路安裝 Linux

原本自己在安裝 Linux 時,都是自己客製化 Linux,挑選要安裝的套件,並做一些系統的調整後,做成 ISO 光碟,然後利用卡碟機來安裝,雖然很方便,但如果有同時多台要安裝,就會有些麻煩,所以想要利用 PXE(Preboot Execution Environment)  的功能,直接從網路上下載來安裝,另外一方面,現在的電腦主機絕大部分都有支援從 PXE 網路開機的功能,只不過在 BIOS 中預設是關閉的,只要打開就可以了![@more@]底下文章參考 鳥哥的 Linux 私房菜 — 安裝伺服器與 kickstart 和 CentOS 6 PXE Server Install (DHCP+TFTP+HTTP(FTP)+Kickstart) – ghoseliang- 點部落 完成

安裝 PXE Server 的方式
1. 安裝 DHCP Server
# yum install dhcp

2. 設定 DHCP Server
# vim /etc/dhcp/dhcpd.conf
Authoritative;
default-lease-time                      259200;
max-lease-time                          518400;
option routers                          192.168.1.254;
option broadcast-address                192.168.1.255;
option subnet-mask                      255.255.255.0;
option domain-name-servers              140.111.66.10,168.95.1.1,8.8.8.8;
ddns-update-style                       none;
server-name                             pxe;

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.61 192.168.1.65;
    option subnet-mask                  255.255.255.0;
    option domain-name                  “pxe.tces.edu”;
    next-server 192.168.1.6;
    filename “pxelinux.0”;

}

3. 啟動 DHCP Server,並設定成開機時啟動
# chkconfig –level 3 dhcpd on
# service dhcpd start
正在啟動 dhcpd:                                           [  確定  ]
檢查 DHCP Server 是否有正常執行
# netstat -antulp | grep dhcp
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               5526/dhcpd

4. 安裝 tftp Server
# yum install tftp-server tftp

5. 修改 /etc/xinetd.d/tftp
# vim /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

6. 啟動 tftp 服務
# /etc/init.d/xinetd start
正在啟動 xinetd:                                          [  確定  ]
# chkconfig –level 3 xinetd on
# chkconfig –level 3 tftp on
# netstat -antulp | grep xinetd
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               5595/xinetd

7. 安裝 syslinux 套件
# yum install syslinux

8.複製設定檔到 /var/lib/tftpboot 目錄
# cp /usr/share/syslinux/menu.c32  /var/lib/tftpboot
# cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
# cp /usr/share/syslinux/memdisk /var/lib/tftpboot
# cp /usr/share/syslinux/mboot.c32 /var/lib/tftpboot
# cp /usr/share/syslinux/chain.c32 /var/lib/tftpboot

9. 建立 /var/lib/tftpboot/pxelinux.cfg 目錄,用來存放 PXE 開機時 Client 端的一些設定
# mkdir /var/lib/tftpboot/pxelinux.cfg

10. 下載 Linux ISO 光碟,並掛載
建立掛載目錄
# mkdir -p /mnt/{x86_64,i386}
掛載 ISO 檔
# mount -o loop /var/ftp/pub/CentOS-6.5-x86_64-bin-DVD1.iso /mnt/x86_64
# mount -o loop /var/ftp/pub/CentOS-6.5-i386-bin-DVD1.iso /mnt/i386

11.  建立支援 HTTP 安裝的目錄,並複製 ISO 檔光碟的檔案
# mkdir -p /var/www/html/CentOS/6.5/os/{x86_64,i386}
# cp -ra /mnt/x86_64/* /var/www/html/CentOS/6.5/os/x86_64
# cp -ra /mnt/i386/* /var/www/html/CentOS/6.5/os/i386
如果系統有啟動 SELinux,要多執行下面的動作
# restorecon -R -v /var/www/html

12. 建立支援 FTP 安裝的目錄
# ln -s /var/www/html/CentOS /var/ftp
如果系統有啟動 SELinux,要多執行下面的動作
# restorecon -r /var/ftp
# setsebool -P ftp_home_dir=1
# setsebool -P allow_ftpd_full_access on

13. 建立 PXE 開機所須的目錄,並複製開機檔案到對應的目錄
# mkdir -p /var/lib/tftpboot/images/CentOS/6.5/{x86_64,i386}
# cp /mnt/x86_64/images/pxeboot/vmlinuz /var/lib/tftpboot/images/CentOS/6.5/x86_64
# cp /mnt/x86_64/images/pxeboot/initrd.img /var/lib/tftpboot/images/CentOS/6.5/x86_64
# cp /mnt/i386/images/pxeboot/vmlinuz /var/lib/tftpboot/images/CentOS/6.5/i386
# cp /mnt/i386/images/pxeboot/initrd.img /var/lib/tftpboot/images/CentOS/6.5/i386

建立 PXE 開機的開機選單
# vim /var/lib/tftpboot/pxelinux.cfg/default
UI vesamenu.c32
TIMEOUT 300
DISPLAY ./boot.msg
MENU TITLE Welcom to Tou-Cheng Elementary School PXE Server System

LABEL local
  MENU LABEL Boot from local drive
  MENU DEFAULT
  localboot 0

LABEL Install CentOS 6.5 x86_64 from FTP
  MENU LABEL Install CentOS 6.5 x86_64 from FTP
  kernel images/CentOS/6.5/x86_64/vmlinuz
  append initrd=images/CentOS/6.5/x86_64/initrd.img method=ftp://192.168.1.6/CentOS/6.5/os/x86_64/

LABEL Install CentOS 6.5 x86_64 from HTTP
  MENU LABEL Install CentOS 6.5 x86_64 from HTTP
  kernel images/CentOS/6.5/x86_64/vmlinuz
  append initrd=images/CentOS/6.5/x86_64/initrd.img method=http://192.168.1.6/CentOS/6.5/os/x86_64/

  建立 PXE 開機的 boot.msg 開機訊息
# vim /var/lib/tftpboot/boot.msg
Welcom to Tou-Cheng Elementary School PXE Server System

The 1st menu can let you system goto hard disk menu.
The 2st menu can goto interactive installation step.