SlideShare a Scribd company logo
1 of 102
Download to read offline
Linux Diskless Command line - 1



        Linux Ubuntu Diskless x86x64
         ในตระกูล linux ไม่ได้ขึ้นกับระบบ Ubuntu อย่างเดียวในการทาระบบ Diskless
   สามารถทาได้หมด ไม่ว่าจะเป็น Linux ClearOS ,Linux CentOS ,Linux Clark connect ,Unix
           FreeBSD ขอแค่เข้าใจ package และตั้งค่าการทางานของระบบให้ถูกต้อง
                        กระบวนการและโครงสร้างแถบไม่แตกต่างกัน




ในรูปตัวอย่างใช้งาน hdd เครื่องละ 1 ลูก .. จะทาการ upload img
เข้าไปใน hdd บนเครื่องแม่ โดยไม่ต้องถอด hdd ที่เครื่องลูกมาเป็น master
Linux Diskless Command line - 2


ความหมายเนื้อเรื่องต่างๆ ศึกษาเพิ่มเติมได้ทั่วไป

*ศึกษาเพิ่มได้ที่

http://wiki.nakhon.net/wiki/Diskless_Server

http://www.linuxthai.org/

http://ict.in.th/
Linux Diskless Command line - 3


ลักษณะการต่อสายแลนบนเครื่องแม่ (เฉพาะในคู่มือ)




อันดับแรกก็ลง OS แล้วเข้าใช้งานตามปกติ ล็อกอินยูสเซอร์ที่แอด จากนั้นกาหนดรห้สผ่านให้
root ต่อด้วยการเปลี่ยนสถานะยูสเซอร์เข้าไปเป็น root
Linux Diskless Command line - 4


# sudo passwd
[sudo] password for portspro:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

# su
Password:
Added user root.

# cd



*หมายเหตุ
อันดับแรกต้องทาให้เครื่อง Server ออกเน็ตได้ก่อน เพื่อทาการ download package
ในการติดตั้งมาลงที่ Server ตัวมันเอง

# ifconfig -a
ดู device การ์ดแลนทั้งหมด
Linux Diskless Command line - 5


ในตัวอย่างจะกาหนดค่าดังนี้
การ์ดแลนใบที่ 1 ชื่อ device อุปกรณ์คือ eth0 จะทาเป็นการ์ดที่รับเน็ตเข้ามาแบบ dhcp
การ์ดแลนใบที่ 2 ชื่อ device อุปกรณ์คือ eth1 ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static

# nano /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
      address 10.0.0.254
      netmask 255.255.255.0

ทาการแก้ไขค่า แล้วบันทึกออก




จากนั้น restart service network ใหม่

# /etc/init.d/networking restart
Linux Diskless Command line - 6


# ifconfig




ทาการอัพเวลาให้ระบบให้ตรงกับปัจจุบัน

# /usr/sbin/ntpdate -u pool.ntp.org




ทาการอัพเดต package

# sudo apt-get update
Linux Diskless Command line - 7




# sudo apt-get install tftp-hpa tftpd-hpa xinetd
# mkdir /tftpboot
# sudo chown nobody.nogroup /tftpboot
# sudo chmod 777 /tftpboot
# sudo nano /etc/default/tftpd-hpa
จากเดิม
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

แก้เป็น โดยการเพิ่ม 2 บรรทัดลงไป และกาหนดตาแหน่ง path ไฟล์บูตให้เครื่องลูก
# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /tftpboot"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"




# sudo /etc/init.d/tftpd-hpa start
# netstat -a |grep tftp
udp      0     0 *:tftp            *:*
Linux Diskless Command line - 8


สร้างไฟล์ tftp ขึ้นมาทางานร่วมกับ Service

# nano /etc/xinetd.d/tftp
เพิ่มคาสั่งเข้าไปในตัวไฟล์ที่สร้าง พร้อมระบุพาธ tftpboot ให้ถูกต้อง
service tftp {
  protocol = udp
  port = 69
  socket_type = dgram
  wait = yes
  user = nobody
  server = /usr/sbin/in.tftpd
  server_args = /tftpboot
  disable = no
}




# sudo /etc/init.d/xinetd start
Linux Diskless Command line - 9




undionly.kpxe
เป็นไฟล์ gpxe สาหรับปล่อยให้เครื่องลูกมารับไปบูตเข้าใช้งานโอเอสจากเครื่องแม่
ทาการ download file undionly.kpxe ลงมา
แล้วทาการ Upload ขึ้นไปเก็บที่ server ในตาแหน่ง /tftpboot
โหลดได้ที่

http://www.mediafire.com/?tj30x1ew8jfb4c6
Linux Diskless Command line - 10




DHCP-Server
# sudo apt-get install dhcp3-server
# nano /etc/default/isc-dhcp-server
เพิ่ม device การ์ดแลนที่จะแชร์ disk ในตัวอย่างคือ eth1
# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/isc-dhcp-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#    Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
Linux Diskless Command line - 11


# echo "" > /etc/dhcp/dhcpd.conf
# nano /etc/dhcp/dhcpd.conf
เพิ่มคาสั่งเข้าไปทั้งหมด

ddns-update-style interim;
ddns-rev-domainname "in-addr.arpa.";

option domain-name "sysdiskless";
option domain-name-servers 8.8.8.8,8.8.4.4;
option ntp-servers us.pool.ntp.org;

ignore client-updates;
update-static-leases on;
use-host-decl-names on;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

subnet 10.0.0.0 netmask 255.255.255.0 {
  default-lease-time 43200;
  max-lease-time 86400;
  allow unknown-clients;
  option routers 10.0.0.254;
  range 10.0.0.100 10.0.0.199;
}



host bootdisk1 {
 hardware ethernet 50:e5:49:e9:95:e8;
 fixed-address 10.0.0.1;
 option host-name com1;

    if exists user-class and option user-class = "gPXE" {
      filename "";
      option root-path "aoe:e0.0";
    } else {
      filename "undionly.kpxe";
    }
}

*หมายเหตุ
คาสั่งที่ใช้ใน dhcpd.conf เป็นเพียงคาสั่งเพื่อทดสอบระบบเท่านั้น คาสั่งจึงไม่มาก
Linux Diskless Command line - 12




ต่อไปทาการค้นหาที่เครื่อง server ใช้ domain name ชื่ออะไร
# hostname -d
sysdiskless

ในอย่าง domain คือ sysdiskless

# nano +4 /etc/dhcp/dhcpd.conf




# sudo /etc/init.d/isc-dhcp-server start
Linux Diskless Command line - 13




Vblade
# sudo apt-get install vblade
# mkdir /var/run/vblade
# /etc/init.d/vblade start
* Starting vblade deaemons vblade




ทดสอบ
ทาการทดสอบแบบง่ายๆ เพื่อให้รู้ว่าเครื่องแม่พร้อมจะแชร์ disk แล้ว ..
ด้วย script การปล่อย disk จากเครื่อง server เอง ด้วยโปรแกรม vblade

# cd /root
# nano test.sh
Copy ใส่คาสั่งลงทั้งหมดเลยครับ ไม่ต้องแก้ไขอะไรมาก แก้อยู่บรรทัดเดียว ตรงบรรทัดสุดท้าย
เพื่อระบุการ์ดแลนที่จะแชร์ disk ตัวอย่างเป็น eth1
vblade 0 0 eth1 /dev/mapper/test1 &
แก้ตามการ์ดแลนใบที่แชร์ disk
ขั้นตอนนี้เป็นการทดสอบจาก hdd sda ของเครื่องแม่เท่านั้น !

#!/bin/bash
losetup -r /dev/loop0 /dev/sda
dd if=/dev/zero of=/dev/test1 bs=512 count=0 seek=$(blockdev --getsize /dev/loop0)
losetup /dev/loop1 /dev/test1
echo "0 $(blockdev --getsize /dev/loop0) snapshot /dev/loop0 /dev/loop1 p 64" | dmsetup create test1
vblade 0 0 eth1 /dev/mapper/test1 &




# chmod +x /root/test.sh
Linux Diskless Command line - 14


ก่อนทดสอบให้ดูค่าเก่าที่ device mapper ก่อน .. มีแค่ device sda ของเครื่องแม่เท่านั้น
ทดสอบเพื่อเห็นผลต่าง

# fdisk -l




จะเห็นว่าตอนนี้มีแค่ /dev/sda

ต่อไปสั่งรัน script
# bash /root/test.sh
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.8998e-05 s, 0.0 kB/s
pid 1662: e0.0, 40130390 sectors O_RDWR
Linux Diskless Command line - 15


จากนั้นดูว่า disk ถูกโหลดลงใน device mapper หรือยัง

# fdisk -l




จะเห็นว่ามีเพิ่มขึ้นจากครั้งก่อน คือ /dev/mapper/test1
แสดงว่าเครื่อง server พร้อมแชร์ disk แล้วครับ
Linux Diskless Command line - 16




ทดสอบเครื่องลูก
ทาการเปิดเครื่องลูกแล้วตั้งค่าให้ boot lan
ผลลัพธ์ที่เครื่องลูกต้องได้รับ ตามรูปครับ




เครื่องลูกบูตถึงหน้า boot grup ของ linux เหมือนเครื่องแม่
ก็แสดงว่าท่านทาผ่านและถูกต้องแล้วครับ
ปิดเครื่องลูกได้เลยครับ ไปขั้นตอนต่อไปในการ upload img ขึ้น Server
Linux Diskless Command line - 17




Upload Image
ในขั้นตอนนี้จะ upload image โดยใช้โปรแกรม Ghost 32 ขึ้นไปที่ Server Diskeless
ในตัวอย่างนี้จะ ghost hdd ทั้งลูกที่อยู่บนเครื่องลูก อัพขึ้นไปที่ img เครื่องแม่เท่านั้น

*กลับมาที่หน้าจอเครื่องแม่

# cd /root

ทาการสร้าง script ในการจองพื้นที่ img ให้เครื่องลูก
# nano blockimg.sh
ใส่เข้าไปทั้งหมด

#!/bin/bash
#
dd if=/dev/zero of=/mnt/imgos bs=512 count=0 seek=12345678
vblade 0 0 eth1 /mnt/imgos &
#
echo "Create block image os ... [ OK ]";

*ความหมายคาสั่งในตัว script
จากนั้นทาการสร้าง block device สาหรับเก็บ img ที่พาธ /mnt ส่วน img ชื่อ imgos
โดยที่ความจุ 12345678 เท่ากับ 6 GB กว่าๆ และใช้ aoe ที่ e0.0
*ตัวอย่างคาสั่งตรงบรรทัด vblade 0 0 eth1 /mnt/imgos &
ทาการเปลี่ยนตามการ์ดแลนที่ทาการแชร์ disk ให้เครื่องลูก




ต่อไปก็กาหนดสิทธิ์ +x ให้ไฟล์ และสั่งรัน
Linux Diskless Command line - 18


# chmod +x /root/blockimg.sh
# bash /root/blockimg.sh
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.6288e-05 s, 0.0 kB/s
Create block image os ... [ OK ]
pid 1616: e0.0, 12345678 sectors O_RDWR




ถ้าผลลัพธ์ที่ได้ออกมาเหมือนในตัวอย่างก็ผ่านครับ
จากนั้นไปทาขั้นตอนต่อไปที่หน้าจอเครื่องลูกได้เลยครับ
Linux Diskless Command line - 19




AoE tool
ทาการติดตั้ง driver สาหรับบูต aoe ลงที่เครื่องลูก
Download ไฟล์ลงมาติดตั้งได้เลยครับ http://www.mediafire.com/?jwjgylj57j7iww6




อันดับแรกให้ทาการปิด Firewall บน Windows ก่อน ..




จาก On ให้เปลี่ยนเป็น Off ซะ
Linux Diskless Command line - 20




เมื่อโหลดไฟล์ aoe tool เรียบร้อยแล้ว ทาการติดตั้งลงไป โดยการไปที่
Start -> Setting -> Control Panel -> เลือก Add Hardware ตามรูปภาพเลยครับ
Linux Diskless Command line - 21




ทาการ Browse .. เพื่อนาไฟล์ aoe.inf
Linux Diskless Command line - 22
Linux Diskless Command line - 23




ตรวจสอบว่า driver aoe โหลดเข้าไปหหรือยัง




ผลลัพธ์ตามภาพ จากนั้น Restart เครื่องลูก 1 ครั้ง
Linux Diskless Command line - 24




การ Mount Disk ด้วย
AoE tool




ตรวจดูว่า IP Address ที่ได้รับถูกต้องหรือไม่




เปิดใช้งานคาสั่งดอส
Linux Diskless Command line - 25




พิมพ์ aoe แล้ว enter เพื่อแสดงรายการอาณ์กิวเมนท์พร้อรายละเอียดการทางาน




พิมพ์ aoe scan เพื่อแสดงรายการ disk ที่ถูกแชร์ออกมาจากเครื่องแม่
Linux Diskless Command line - 26




คลิกขาวเมาท์เพื่อทาการ Mark ตาแหน่งที่จะ copy




รายการ disk แสดงออกมา พร้อม aoe e0.0 ที่เครื่องแม่แจกมาให้ใน dhcpd.conf
จากนั้นก็อปปี้ mac address ของเครื่องลูกเอาไว้
Linux Diskless Command line - 27




ทาการ mount disk ด้วยคาสั่ง
aoe mount <ตามด้วย mac addr> <ตามด้วย aoe e0.0>




พิมพ์คาสั่งแสดงรายการโชว์ที่กระทาไปแล้ว ด้วย aoe show
Linux Diskless Command line - 28




กลับไปดูที่ Device Manager -> Disk drivers
จะเห็นว่ามี disk เกิดขึ้นมาใหม่ชื่อ device คือ AoE Disk
Linux Diskless Command line - 29




จากนั้นไปที่ Disk Management เพื่อ Initiallize Disk ให้ OS มองเห็น

จากนั้นทาตามรูปเลยครับ




คลิกเครื่องหมายถูกที่หน้า Disk 1
Linux Diskless Command line - 30




ไม่ต้องมีเครื่องหมายถูก Next ต่อไป




ต่อไปทาการ Format Disk ที่สร้างขึ้นมาใหม่
Linux Diskless Command line - 31




ตามรูปเลยครับ
Linux Diskless Command line - 32




ทาเป็น Primary Partition
Linux Diskless Command line - 33




ขั้นตอนการเลือก Drive letter ส่วนตัวผมชอบสร้างที่ drive Z เพราะมันแตกต่างดี




File system จะเป็นอะไรก็ได้ แต่แนะนา NTFS ส่วนตัวอย่างเครื่องทดลองไม่แรง จึงใช้ FAT32
Linux Diskless Command line - 34




Success !
Linux Diskless Command line - 35


เมื่อเสร็จขั้นตอนตามรูปแล้ว ต่อไปก็ปรับแต่ง Registry ให้ Start ที่ 0
(ในตัวอย่างใช้ winxp จึงต้องตั้งค่าเหล่านี้ ส่วน MS ตัวอื่นก็ศึกษาเพิ่มเติมจาก google)




ไปที่ Device Manager ต่อด้วยการ์ดแลนที่จะทาการ boot disk
แล้ว Properties เพื่อดู Service ที่การ์ดแลนใช้งาน




คลิกเลือกที่แถบ Details ตรงช่อง combo box เลือกรายการคาว่า Service ดังรูป
ตัวอย่าง Service แลนการ์ดชื่อ E100B
Linux Diskless Command line - 36




Start -> Run พิมพ์ regedit




HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Services
Linux Diskless Command line - 37




ในตัวอย่าง Service แลนการ์ดชื่อ E100B




เลือก Start แล้วไปตั้งค่าจาก 0x00000003(3) เปลี่ยนไปเป็น 0
Linux Diskless Command line - 38




ใส่เลข 0 เข้าไป ตามรูป




เสร็จ ! .. จากนั้น restart เครื่องลูก 1 ครั้ง เพื่อเริ่มค่าการปรับแต่ง registry อีกครั้ง
Linux Diskless Command line - 39


Ghost 32 -to- Image
ในขั้นตอนตัวอย่างนี้จะเป็นการ ghost แบบ Disk -to- Disk ลงใน Image ที่เตรียมไว้
*หมายเหตุ
ในขั้นตอนการ Ghost นี้ เปิดใช้งานเฉพาะโปรแกรม Ghost32.exe เท่านั้น
โหลดได้ที่ http://www.mediafire.com/?xwimf6g4xd37jk8
Linux Diskless Command line - 40




Local -> Disk -> To Disk




เลือก Disk ต้นฉบับ หรือ ต้นทาง




เลือก Disk ปลายทาง
Linux Diskless Command line - 41




ในตัวอย่างไม่เลือกอะไรมาก เพราะ Disk ทดลองพื้นที่ไม่มาก




ตอบ YES
Linux Diskless Command line - 42




เลือก Volume Snapshot
เพื่อให้โปรแกรม Ghost ข้ามโปรแกรม Ghost32.exe ไป .. ในขณะที่กาลังทาการ Ghost

*เพิ่มเติม
ในขณะที่กาลัง Ghost อยู่ มีข้อความมาแสดงโชว์ ให้ตอบ Yes ผ่านไป
Linux Diskless Command line - 43




เสร็จสินการ Ghost
คลิกเลือก Continue แล้วออกจากโปรแกรม Ghost32 เพื่อไปดู Disk ที่เปลี่ยนแปลงไป




Disk -to- Disk
ปิดเครื่องลูกแล้วตั้งค่า BIOS บูตแลน
Linux Diskless Command line - 44


ก่อนจะทาการทดสอบ ให้กลับมาแก้ไขค่าเก่าที่อยู่ใน device mapper ออกเสียก่อน
เพราะค่าเดิมบน shell script ให้แชร์ disk /dev/sda ของเครื่องแม่อยู่

ที่ Terminal บนเครื่องแม่ ให้พิมพ์คาสั่งดู device ที่ทางานอยู่บน mapper ก่อน

# dmsetup table
test1: 0 12345678 snapshot 7:0 7:1 P 64




ค้นหา Process ID ของ /dev/mapper/test1
# lsof /dev/mapper/test1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vblade 1985 root 3u BLK 252,0    0t0 13672 /dev/mapper/../dm-0




pid คือ 1985
ต่อไปทาการฆ่า pid 1985
แล้วลบ test1 ที่ถูกโหลดลงใน device mapper จากนั้นแสดงตาราง device mapper

# kill -9 1985
# dmsetup remove --force /dev/mapper/test1
# dmsetup table
No devices found
Linux Diskless Command line - 45


ขั้นตอนต่อไปทาการล้าง loop device ของ test1

# losetup -a
/dev/loop0: [0005]:5960 (/dev/sda)
/dev/loop1: [0005]:13661 (/dev/test1)




ในตัวอย่างจะทาการล้าง loop0 และ loop1 ที่เป็นค่าเก่าออก ก่อนที่จะรัน shell script ใหม่อีกครั้ง
เพื่อไม่ให้เกิดการ Busy เมื่อมีข้อมูลซ้ากัน

#   losetup --detach /dev/loop0
#   losetup --detach /dev/loop1
#   rm -rf /dev/loop0
#   rm -rf /dev/loop1
#   losetup -a




จะเห็นว่าใน loop device ไม่มีการใช้งานแล้ว




*หมายเหตุ
คาสั่งการ kill และ remove บน mapper และ loop จะง่ายขึ้นในขั้นตอนการติดตั้งระบบ
Diskless แบบใช้งานจริง หลังจากเสร็จในเรื่องของการทดลองอย่างง่าย
จะใช้โค้ดภาษา C เข้ามาช่วยใช้งาน shell script ให้ง่าย รวดเร็ว คุณภาพ ดีขึ้นกว่าเดิม
Linux Diskless Command line - 46


ต่อไปทาการแก้ไขไฟล์ script ให้แชร์ Disk Image ที่ทาเสร็จเรียบร้อยแล้ว
# nano /root/test.sh
ที่บรรทัดที่สองแก้เป็นตาแหน่งของ img
#!/bin/bash
losetup -r /dev/loop0 /mnt/imgos
dd if=/dev/zero of=/dev/test1 bs=512 count=0 seek=$(blockdev --getsize /dev/loop0)
losetup /dev/loop1 /dev/test1
echo "0 $(blockdev --getsize /dev/loop0) snapshot /dev/loop0 /dev/loop1 p 64" | dmsetup create test1
vblade 0 0 eth1 /dev/mapper/test1 &




สั่งรัน shell script block device สาหรับแชร์ disk อีกครั้ง

# bash /root/test.sh
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.8134e-05 s, 0.0 kB/s
root@portspro:~# pid 2138: e0.0, 12345678 sectors O_RDWR




ต่อไปทาการเปิดเครื่องลูกทดสอบบูตแลนได้เลย
Linux Diskless Command line - 47


บูตแลนเสร็จเข้าวินโดว์




ผ่าน ! ….. จบเร็วครับกับการทดลองอย่างง่าย

*** ต่อไปจะเป็นการติดตั้งละใช้งานจริง
Linux Diskless Command line - 48



การติดตั้งและใช้งานจริง
ท่านใดเข้าใจหลักการทางานของระบบ Diskless ก็สามารถข้ามมาทาในขั้นตอนนี้ได้เลย
เพราะเรื่องแรกเป็นการหัดทาระบบอย่างง่าย (เหมาะกับมือใหม่)
Linux Diskless Command line - 49


โครงการวางระบบในร้านเกมส์แห่งหนึ่ง มีเครื่องลูกจานวณ 20 เครื่อง
   - เครื่องแยกเน็ต - แยกเกมส์
      โดยที่เครื่องแยกเน็ต-แยกเกมส์ มีการ์ดแลน 3 ใบ ,แลนออนบอร์ด 1 พอร์ต
      1 พอร์ตบนออนบอร์ดมีหน้าที่แจกเน็ตให้เครื่องลูก ไอพี 192.168.254.254
      *ส่วนการ์ดแลน 3 ใบ
      ใบที่ 1 จัดทา PPPoE เส้นที่ 1 สาหรับพอร์ดเน็ต 1 - 1023
      ใบที่ 2 จัดทา PPPoE เส้นที่ 2 สาหรับพอร์ตเกมส์ 1024 - 65535
      ใบที่ 3 จัดทา Chillispot Wifi Hotspot (รายได้เสริมแบบคูปอง)

   -   เครื่องระบบ Linux Diskless x86x64 (64bit)
       โดยที่เครื่องระบบ Linux Diskless มีการ์ดแลน 4 ใบ ,แลนออนบอร์ด 1 พอร์ต
       1 พอร์ตบนออนบอร์ดมีหน้าที่แจก dhcp-server ให้เครื่องลูกตอนบูตแลน
       แลนออนบอร์ด ไอพี 192.168.254.200
       ยิ่ง Gateway ไปที่เครื่องแยกเน็ต-แยกเกมส์ ไอพี 192.168.254.254
       *ส่วนการ์ดแลน 4 ใบ
       ใบที่ 1 ไอพี 192.168.254.201 --> เฉลี่ยเครื่องลูก 5 เครื่อง
       ใบที่ 2 ไอพี 192.168.254.202 --> เฉลี่ยเครื่องลูก 5 เครื่อง
       ใบที่ 3 ไอพี 192.168.254.203 --> เฉลี่ยเครื่องลูก 5 เครื่อง
       ใบที่ 4 ไอพี 192.168.254.204 --> เฉลี่ยเครื่องลูก 5 เครื่อง

       *ส่วน Harddisk ของเครื่อง Diskless นี้ใช้ 5 ตัว (ตามงบ) ตัวล่ะ 1 TB
       โดยที่
       HDD(sda) 1 กับ HDD(sdb) 2 นามาทาเป็น Raid0 บน HW BIOS
       RAID 0 คือ ระบบ Linux Ubuntu Server 64 bit
       ส่วน
       HDD(sdc) 3 ทาเป็น Master แชร์ Disk ให้เครื่องลูก ถอดจากเครื่องลูกมาใส่โดยตรง
       และ
       HDD(sdd) 4 กับ HDD(sde) 5 นามาทาเป็น Raid0 บน Software Linux
       RAID 0 คือ COW สาหรับ Copy on Write บนระบบ Diskless



*** แนะนา
ในตัวอย่างเครื่องระบบ Linux Diskless ใช้การ์ดแลน 4 ใบ ตามจริงใบเดียวก็รองรับ 20 เครื่อง
ได้อยู่แล้ว เนื่องจากการ์ดแลนเสริม 1000Mbits ราคาก็ไม่แพง Slot PCI ก็เหลือว่างเยอะ
ผมจึงเพิ่มความเร็วให้ระบบทางานได้ดีขึ้นกว่าเดิม โดยการเสริมเส้นทางจราจรให้ระบบ
Diskless เฉลี่ยเครื่องลูกต่อใบดีกว่าเยอะครับ
Linux Diskless Command line - 50


แผนผังตัวอย่าง
Linux Diskless Command line - 51


ท่านใดที่มาถึงขั้นตอนนี้ก็คงเข้าใจระบบ Linux Diskless พอสมควร
ในส่วนนี้จะไปแบบเร็วนิดหนึ่งครับ

อันดับแรกก็ลง OS แล้วเข้าใช้งานตามปกติ ล็อกอินยูสเซอร์ที่แอด จากนั้นกาหนดรห้สผ่านให้
root ต่อด้วยการเปลี่ยนสถานะยูสเซอร์เข้าไปเป็น root

login as: portspro
portspro@192.168.254.200's password:
Added user portspro.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic x86_64)

* Documentation: https://help.ubuntu.com/

# sudo passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

# su
Password:
Added user root.

# cd
Linux Diskless Command line - 52




สร้าง Raid Software Linux
ทาการสร้าง raid software ระหว่าง sdd กับ sde สาหรับ /cow

*ขั้นตอนนี้ถ้าไม่ได้ทา Raid ก็ข้ามไปขั้นตอนการติดตั้ง Package ได้เลยครับ

# mkdir /cow
# fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xfbcf5ebb.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help):n
Partition type:
   p primary (0 primary, 0 extended, 4 free)
   e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-1953525167, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1953525167, default 1953525167):
Using default value 1953525167

Command (m for help): p

Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3539557b

  Device Boot     Start    End   Blocks Id System
/dev/sdd1         2048 1953525167 976761560 83 Linux

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): da
Changed system type of partition 1 to da (Non-FS data)
Linux Diskless Command line - 53


Command (m for help): p

Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3539557b

  Device Boot       Start    End   Blocks Id System
/dev/sdd1           2048 1953525167 976761560 da Non-FS data

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

# fdisk /dev/sde
จากนั้นก็ทาเหมือนกัน

สาหรับการสร้าง RAID 0 จากพาร์ทิชั่นบนฮาร์ดดิสก์ 2 ลูก
เช่น จาก /dev/sdd1 และ /dev/sde1 สามารถใช้คาสั่งได้ดังนี้

# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1
The program 'mdadm' is currently not installed. You can install it by typing:
apt-get install mdadm

# apt-get install mdadm

# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1
mdadm: /dev/sdd1 appears to contain an ext2fs file system
  size=976761560K mtime=Thu Jan 1 07:00:00 1970
mdadm: /dev/sde1 appears to be part of a raid array:
  level=raid0 devices=2 ctime=Mon Jan 7 05:33:05 2013
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

บันทึกค่าของ RAID
ขั้นตอนต่อไป ให้บันทึกค่าของ RAID ลงไฟล์กาหนดค่า

# mdadm --detail --scan >> /etc/mdadm.conf
Linux Diskless Command line - 54


ตรวจสอบสถานะ RAID

เมื่อสร้าง RAID แล้ว การตรวจสอบสถานะของ RAID สามารถทาได้หลายวิธี
ตรวจสอบโดยใช้คาสั่ง mdadm ได้ดังนี้

# mdadm --detail /dev/md0
/dev/md0:
      Version : 1.2
 Creation Time : Wed Mar 6 08:28:27 2013
    Raid Level : raid0
    Array Size : 1953518592 (1863.02 GiB 2000.40 GB)
  Raid Devices : 2
 Total Devices : 2
   Persistence : Superblock is persistent

  Update Time : Wed Mar 6 08:28:27 2013
       State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
 Spare Devices : 0

   Chunk Size : 512K

       Name : sysdisk:0 (local to host sysdisk)
       UUID : 3773f98a:a6a69ef0:a0284fb0:f67b2873
      Events : 0

  Number Major Minor RaidDevice State
    0   8    49    0   active sync /dev/sdd1
    1   8    65    1   active sync /dev/sde1

# cat /proc/mdstat
Linux Diskless Command line - 55


ฟอร์แมต Disk ที่เป็น Raid Device

# mke2fs -t ext4 -L cow_raid0md0 /dev/md0
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=cow_raid0md0
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
122101760 inodes, 488379648 blocks
24418982 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
       32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
       4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
       102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

โดยที่
-t ext4 คือให้ใช้ filesystem แบบ ext4
-L image_partition คือให้ตั้งชื่อ filesystem ว่า image_partition
/dev/md0 คือชื่อ device ของ RAID

เพื่อลดขนาดของเนื้อที่สงวนจากเดิม 5% เป็น 10 MB

# tune2fs -r 20480 /dev/md0
tune2fs 1.42.5 (29-Jul-2012)
Setting reserved blocks count to 20480
Linux Diskless Command line - 56


# fdisk -l /dev/md0

Disk /dev/md0: 2000.4 GB, 2000403038208 bytes
2 heads, 4 sectors/track, 488379648 cylinders, total 3907037184 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table

# mkdir /cow

# mount /dev/md0 /cow

# df
Filesystem                  1K-blocks Used Available Use% Mounted on
/dev/mapper/isw_dhajaggiic_rid0md0p1 1889916616 1479840 1792434588 1% /
udev                       16427288     4 16427284 1% /dev
tmpfs                       6574632 1596 6573036 1% /run
none                          5120    0    5120 0% /run/lock
none                       16436576     0 16436576 0% /run/shm
none                         102400    0   102400 0% /run/user
/dev/md0                      1922864944 200028 1922582996 1% /cow

ตรวจสอบหา UUID ของ HDD ที่ได้ เพราะบางที่ระบบก็ให้ใส่หมายเลข UUID ลงไป
# blkid
/dev/sda: TYPE="isw_raid_member"
/dev/sdb: TYPE="isw_raid_member"
/dev/sdc1: LABEL="Windows" UUID="9644EAB044EA91F3" TYPE="ntfs"
/dev/sdc5: LABEL="GamesZone" UUID="D818619218617104" TYPE="ntfs"
/dev/sdd1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="77d43604-9513-ea77-314d-
b80b9bb291f2" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/sde1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="e28d8c4d-e604-025e-d312-
ace626ede28d" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/mapper/isw_dhajaggiic_rid0md0p1: UUID="683cef23-aff9-4c19-828c-fc5ccfa027ab" TYPE="ext4"
/dev/mapper/isw_dhajaggiic_rid0md0p5: UUID="ac1dad30-ac7b-410f-81bf-3d622ca2d67f" TYPE="swap"
/dev/md0: LABEL="cow_raid0md0" UUID="ac1820a6-b250-468f-b0d7-4f122717f321" TYPE="ext4"
Linux Diskless Command line - 57


# nano /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options>                 <dump> <pass>
/dev/mapper/isw_dhajaggiic_rid0md0p1 /                  ext4 errors=remount-ro 0           1
/dev/mapper/isw_dhajaggiic_rid0md0p5 none                 swap sw         0      0
/dev/md0        /cow           ext4 defaults        0       2

# shutdown -r now

*** หมายเหตุ
เมื่อ reboot เครื่องเสร็จระบบอาจจะสร้าง Device ใหม่
จะทาให้ Raid ทีท่านได้สร้างเอาไว้ ทาการตรวจสอบ
                  ่

# ls -l /dev/md

lrwxrwxrwx 1 root root 8 Mar 6 08:50 sysdisk:0 -> ../md127

แสดงว่า Dev md เปลี่ยนเป็น md127 (ระบบจะเปลี่ยนแค่ครั้งเดียว จากนั้นก็ถาวร)
ทาการตรวจสอบ UUID ใหม่ และ mount ใน fstab ใหม่

# blkid
/dev/sda: TYPE="isw_raid_member"
/dev/sdb: TYPE="isw_raid_member"
/dev/sdc1: LABEL="Windows" UUID="9644EAB044EA91F3" TYPE="ntfs"
/dev/sdc5: LABEL="GamesZone" UUID="D818619218617104" TYPE="ntfs"
/dev/sdd1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="77d43604-9513-ea77-314d-
b80b9bb291f2" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/sde1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="e28d8c4d-e604-025e-d312-
ace626ede28d" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/md127: LABEL="cow_raid0md0" UUID="ac1820a6-b250-468f-b0d7-4f122717f321" TYPE="ext4"
/dev/mapper/isw_dhajaggiic_rid0md0p1: UUID="683cef23-aff9-4c19-828c-fc5ccfa027ab" TYPE="ext4"
/dev/mapper/isw_dhajaggiic_rid0md0p5: UUID="ac1dad30-ac7b-410f-81bf-3d622ca2d67f" TYPE="swap"
Linux Diskless Command line - 58


# nano /etc/fstab
เปลี่ยนค่าเข้าไปใหม่
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options>                 <dump> <pass>
/dev/mapper/isw_dhajaggiic_rid0md0p1 /                  ext4 errors=remount-ro 0      1
/dev/mapper/isw_dhajaggiic_rid0md0p5 none                 swap sw         0      0
/dev/md127        /cow          ext4 defaults         0      2

รีสตาร์ดเครื่องใหม่อีกรอบ

# shutdown -r now

บูตเสร็จก็ทาการตรวจสอบการเมาร์ทใหม่

# df
Filesystem                  1K-blocks Used Available Use% Mounted on
/dev/mapper/isw_dhajaggiic_rid0md0p1 1889916616 1480924 1792433504 1% /
udev                       16427084     4 16427080 1% /dev
tmpfs                       6574632   660 6573972 1% /run
none                          5120    0    5120 0% /run/lock
none                       16436576     0 16436576 0% /run/shm
none                         102400    0   102400 0% /run/user
/dev/md127                   1922864944 200028 1922582996 1% /cow

# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 236 Mar   6 08:56 control
brw-rw---- 1 root disk 252, 1 Mar    6 2013 isw_dhajaggiic_rid0md0
lrwxrwxrwx 1 root root       7 Mar   6 08:56 isw_dhajaggiic_rid0md0p1 -> ../dm-0
lrwxrwxrwx 1 root root       7 Mar   6 08:56 isw_dhajaggiic_rid0md0p2 -> ../dm-2
lrwxrwxrwx 1 root root       7 Mar   6 08:56 isw_dhajaggiic_rid0md0p5 -> ../dm-3



***จบเรื่องการ Mount Disk
Linux Diskless Command line - 59




*หมายเหตุ
อันดับแรกต้องทาให้เครื่อง Server ออกเน็ตได้ก่อน เพื่อทาการ download package
ในการติดตั้งมาลงที่ Server ตัวมันเอง
Linux Diskless Command line - 60


# ifconfig -a
ดู device การ์ดแลนทั้งหมด

เพิ่มเติมเรื่องชื่อ device บางท่านอาจจะได้ชื่อ eth บางท่านก็ได้ p?p1
ท่านได้ชื่อ device ไหนก็ใช้งาน device นั้นนะครับ ไม่ต้องตามตัวอย่าง เพราะตัวอย่างได้ชื่อ p?p1 ครับ
(ตัวอย่างใช้งาน Ubuntu 12.04 Server 64 bit)


ในตัวอย่างจะกาหนดค่าดังนี้
แลนออนบอร์ด ชื่อ device อุปกรณ์คือ p6p1
ทาเป็นพอร์ดแจก dhcp-server ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.200

การ์ดแลนใบที่ 1 ชื่อ device อุปกรณ์คือ p1p2
ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.201

การ์ดแลนใบที่ 2 ชื่อ device อุปกรณ์คือ p2p1
ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.202

การ์ดแลนใบที่ 3 ชื่อ device อุปกรณ์คือ p3p1
ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.203

การ์ดแลนใบที่ 4 ชื่อ device อุปกรณ์คือ p5p1
ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.204
Linux Diskless Command line - 61


# nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto p6p1
iface p6p1 inet static
      address 192.168.254.200
      netmask 255.255.255.0
      network 192.168.254.0
      broadcast 192.168.254.255
      gateway 192.168.254.254
      dns-nameservers 192.168.254.254
      dns-search portspro.diskless

auto p1p1
iface p1p1 inet static
      address 192.168.254.201
      netmask 255.255.255.0

auto p2p1
iface p2p1 inet static
      address 192.168.254.202
      netmask 255.255.255.0

auto p3p1
iface p3p1 inet static
      address 192.168.254.203
      netmask 255.255.255.0

auto p5p1
iface p5p1 inet static
      address 192.168.254.204
      netmask 255.255.255.0

ทาการแก้ไขค่า แล้วบันทึกออก
*เนื่องจากครั้งแรกต้องใช้งานอินเตอร์เน็ตในการติดตั้ง Package
จึงให้ p6p1 รับเน็ตเข้ามาก่อนโดยวิ่งเข้า Gateway เคื่องเน็ตเกมส์ 192.168.254.254
Linux Diskless Command line - 62




จากนั้น restart service network ใหม่

# /etc/init.d/networking restart
Linux Diskless Command line - 63


# ifconfig
Linux Diskless Command line - 64


ทาการอัพเวลาให้ระบบให้ตรงกับปัจจุบัน
# /usr/sbin/ntpdate -u pool.ntp.org




ทาการอัพเดต package
# sudo apt-get update




# sudo apt-get install tftp-hpa tftpd-hpa xinetd
# mkdir /tftpboot
# sudo chown nobody.nogroup /tftpboot
# sudo chmod 777 /tftpboot
# sudo nano /etc/default/tftpd-hpa
จากเดิม
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

แก้เป็น โดยการเพิ่ม 2 บรรทัดลงไป และกาหนดตาแหน่ง path ไฟล์บูตให้เครื่องลูก
# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /tftpboot"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"




# sudo /etc/init.d/tftpd-hpa start
Linux Diskless Command line - 65


# netstat -a |grep tftp
udp      0     0 *:tftp              *:*

สร้างไฟล์ tftp ขึ้นมาทางานร่วมกับ Service
# nano /etc/xinetd.d/tftp
เพิ่มคาสั่งเข้าไปในตัวไฟล์ที่สร้าง พร้อมระบุพาธ tftpboot ให้ถูกต้อง
service tftp {
  protocol = udp
  port = 69
  socket_type = dgram
  wait = yes
  user = nobody
  server = /usr/sbin/in.tftpd
  server_args = /tftpboot
  disable = no
}




# sudo /etc/init.d/xinetd start

สร้างพื้นที่สาหรับ COW
# mkdir /cow




Vblade
# sudo apt-get install vblade
# mkdir /var/run/vblade
# /etc/init.d/vblade start
* Starting vblade deaemons vblade
Linux Diskless Command line - 66




undionly.kpxe
เป็นไฟล์ gpxe สาหรับปล่อยให้เครื่องลูกมารับไปบูตเข้าใช้งานโอเอสจากเครื่องแม่
ทาการ download file undionly.kpxe ลงมา
แล้วทาการ Upload ขึ้นไปเก็บที่ server ในตาแหน่ง /tftpboot
โหลดได้ที่

http://www.mediafire.com/?tj30x1ew8jfb4c6




ก่อนจะไปขั้นตอน DHCP-Server ให้ส่วนที่เพิ่มเข้ามาใช้งานได้ก่อน ด้วยโค้ดภาษา C
Linux Diskless Command line - 67




สร้างโค้ดภาษา C
ในการใช้งาน script ให้ง่ายขึ้น

# mkdir /root/tmp

สามารถโหลดเป็นตัวไฟล์ แล้วทาการ Upload ขึ้นไปที่ Server ในตาแหน่ง /root/tmp/

http://www.upload-thai.com/download.php?id=118c57c1aa52375fe06445b7a20b2da4
สารอง
http://www.mediafire.com/?hzvucfxqanoxyev

# cd /root/tmp/
# nano execdiskless.c

ในตัวโค้ดจะทาการสร้าง Device ตามโครงสร้างของ COW
Linux Diskless Command line - 68



ทาการ compile source code ภาษาซี ด้วย gcc
# sudo apt-get install gcc
# gcc /root/tmp/execdiskless.c -o /root/tmp/execdiskless

ทดสอบโครตภาษา C ว่าทางานถูกต้องหรือไม่
# /root/tmp/execdiskless 20 load

Development




ทาไฟล์ให้ใช้งานในระบบได้โดยไม่ต้องมีพาธ์
# chmod +x /root/tmp/execdiskless
# cp /root/tmp/execdiskless /sbin/

จากนั้นลองพิมพ์คาสั่ง execdiskless แบบไม่ต้องมีพาธ์
# execdiskless 20 load
Linux Diskless Command line - 69




DHCP-Server
# sudo apt-get install dhcp3-server
# nano /etc/default/isc-dhcp-server
เพิ่ม device การ์ดแลนที่จะแชร์ disk ในตัวอย่างคือ p6p1 พร้อมกับเอาเครื่องหมาย # ออก
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPD_CONF=/etc/dhcp/dhcpd.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
DHCPD_PID=/var/run/dhcpd.pid

# Additional options to start dhcpd with.
#     Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#    Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="p6p1"
Linux Diskless Command line - 70



ปลดล็อกชุดเกราะ apparmor
profile dhcpd
ให้สามารถใช้งานคาสั่ง execute ที่อยู่ใน dhcpd.conf ได้ เพื่อให้คาสั่งนี้รันได้ตอนที่ทาการ
แจก DHCP-Server ให้เครื่องลูกบูตแลน
ในตัวโค้ตจะเป็นการ kill mapper และ kill loop รวมถึงลบไฟล์ที่เป็นขยะ อัตโนมัติ
หลักๆก็คือ การทาให้เครื่องลูกคืนค่าทุกครั้งเมื่อมีการเปิดปิดเครื่อง

อันดับแรกดูว่ากลุ่มของ DHCP-Server ใช้ชื่อกลุ่มว่าอะไร

# cat /etc/group




หาแทบไม่ยากเลย เจอทันทีบรรทัดสุดท้าย ใช้ชื่อกลุ่มว่า dhcpd
Linux Diskless Command line - 71


#   /etc/init.d/apparmor status
#   cat /sys/kernel/security/apparmor/profiles
#   sudo ln -s /etc/apparmor.d/usr.sbin.dhcpd /etc/apparmor.d/disable/usr.sbin.dhcpd
#   sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.dhcpd
#   sudo aa-status
#   /etc/init.d/apparmor restart



ยกเลิก passwd ใน sudo
# nano /etc/sudoers
นาคาสั่ง
dhcpd ALL=NOPASSWD: ALL
ไปวางที่ท้ายไฟล์เลยครับ




# /etc/init.d/sudo restart
Linux Diskless Command line - 72



ความหมาย
อาร์กิวเมนท์ execdiskless



ความหมายก็ตายตัวเลยครับ
ตัวอย่าง
ภายในจานวณคอมทั้งหมด 20 เครื่อง ต้องการใช้งานเครื่องที่ 3 ชื่อนาหน้า PC คือ com
ตาแหน่งบูต disk คือ /dev/sdb เป็น user ธรรมดา

exediskless 20 com 3 /dev/sdb eth1 normal

ถ้าต่อไปเป็นเครื่องที่ 4 ,5 ,6 ,7 ,8 ,9 ,10

exediskless 20 com 4 /dev/sdb eth1 normal

exediskless 20 com 5 /dev/sdb eth1 normal

exediskless 20 com 6 /dev/sdb eth1 normal

exediskless 20 com 7 /dev/sdb eth1 normal

exediskless 20 com 8 /dev/sdb eth1 normal

exediskless 20 com 9 /dev/sdb eth1 normal

exediskless 20 com 10 /dev/sdb eth1 normal

ต่อไปเครื่องที่ 11-13 ต้องการบูตการ์ดแลนที่สอง คือ eth2

exediskless 20 com 11 /dev/sdb eth2 normal

exediskless 20 com 12 /dev/sdb eth2 normal

exediskless 20 com 13 /dev/sdb eth2 normal




จากนั้นไปต่อที่ DHCP-Server
Linux Diskless Command line - 73


# echo "" > /etc/dhcp/dhcpd.conf
# nano /etc/dhcp/dhcpd.conf
ในตัวอย่าง host ของเครื่องลูกที่นามาเป็นตัวอย่างแค่ 3 เครื่อง (copy มาทั้งหมดคงยาว)
ส่วนท่านใดมีเครื่อง 4 5 6 7 n n n n .. ก็ทาการเพิ่มเองได้เลยครับ
เพิ่มคาสั่งเข้าไปทั้งหมด

ddns-update-style interim;
#ddns-update-style none;
ddns-rev-domainname "in-addr.arpa.";

option domain-name "portspro.diskless";
option domain-name-servers 8.8.8.8,8.8.4.4;
option ntp-servers us.pool.ntp.org;

# gPXE-specific encapsulated options
option space gpxe;
option gpxe-encap-opts code 175 = encapsulate gpxe;
option gpxe.priority code 1 = signed integer 8;
option gpxe.keep-san code 8 = unsigned integer 8;
option gpxe.no-pxedhcp code 176 = unsigned integer 8;
option gpxe.bus-id code 177 = string;
option gpxe.bios-drive code 189 = unsigned integer 8;
option gpxe.username code 190 = string;
option gpxe.password code 191 = string;
option gpxe.reverse-username code 192 = string;
option gpxe.reverse-password code 193 = string;
option gpxe.version code 235 = string;

ignore client-updates;
update-static-leases on;
use-host-decl-names on;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

subnet 192.168.254.0 netmask 255.255.255.0 {
  default-lease-time 43200;
  max-lease-time 86400;
  allow unknown-clients;
  option routers 192.168.254.254;
  range 192.168.254.100 192.168.254.199;
}
Linux Diskless Command line - 74


host bootdisk1 {
 hardware ethernet 50:e5:49:e9:95:e8;
 fixed-address 192.168.254.1;
 option host-name com1;

    if exists user-class and option user-class = "gPXE" {
      execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal");
      filename "";
      option root-path "aoe:e0.1";
    } else {
      filename "undionly.kpxe";
    }
}

host bootdisk2 {
 hardware ethernet 50:e5:49:e8:ee:46;
 fixed-address 192.168.254.2;
 option host-name com2;

    if exists user-class and option user-class = "gPXE" {
      execute("sudo","execdiskless","20","com","2","/dev/sdc","p5p1","normal");
      filename "";
      option root-path "aoe:e0.2";
    } else {
      filename "undionly.kpxe";
    }
}

host bootdisk3 {
 hardware ethernet 50:e5:49:e9:14:a0;
 fixed-address 192.168.254.3;
 option host-name com3;

    if exists user-class and option user-class = "gPXE" {
      execute("sudo","execdiskless","20","com","3","/dev/sdc","p5p1","normal");
      filename "";
      option root-path "aoe:e0.3";
    } else {
      filename "undionly.kpxe";
    }
}

*หมายเหตุ
การใช้งานในโค้ด dhcpd.conf ต้องมีการใช้สิทธ์ root ก่อน
จึงจะสามารถเข้าถึงไฟล์และสั่งรันได้ .. ด้วย sudo
Linux Diskless Command line - 75




ต่อไปทาการค้นหาที่เครื่อง server ใช้ domain name ชื่ออะไร
# hostname -d
portspro.diskless

ในอย่าง domain คือ portspro.diskless

# nano +5 /etc/dhcp/dhcpd.conf
# sudo /etc/init.d/isc-dhcp-server start
Linux Diskless Command line - 76



ดู Process id อย่างง่ายด้วย HTop
# sudo apt-get install htop
# htop




จบขั้นตอนการติดตั้งทั้งหมด
สั่งเปิดเครื่องลูกเพื่อดูผลงานได้เลยครับ




หน้าจอเครื่องลูกหมายเลข 17 ส่วน AoE Disk = e0.17
Linux Diskless Command line - 77


***เมื่อติดตั้งเสร็จเรียบร้อยทุกอย่างก็ไม่ได้ใช้งาน internet
อย่าลืมไปปิดการเชื่อมต่อเน็ต ดังนี้

# nano /etc/network/interfaces
นาเครื่องหมาย # ไปแทรกด้านหน้าคาสั่งแต่ล่ะบรรทัด เพื่อให้กลายเป็นคอมเมนท์
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto p6p1
iface p6p1 inet static
      address 192.168.254.200
      netmask 255.255.255.0
      #network 192.168.254.0
      #broadcast 192.168.254.255
      #gateway 192.168.254.254
      #dns-nameservers 192.168.254.254
      #dns-search portspro.diskless

auto p1p1
iface p1p1 inet static
      address 192.168.254.201
      netmask 255.255.255.0

auto p2p1
iface p2p1 inet static
      address 192.168.254.202
      netmask 255.255.255.0

auto p3p1
iface p3p1 inet static
      address 192.168.254.203
      netmask 255.255.255.0

auto p5p1
iface p5p1 inet static
      address 192.168.254.204
      netmask 255.255.255.0
Linux Diskless Command line - 78




# /etc/init.d/networking restart

เมื่อไม่ได้ใช้งานอินเตอร์เน็ตก็ปิด Bind9 ไปได้เลย
# /etc/init.d/bind9 stop
# nano /etc/rc.local
เพิ่มคาสั่งเข้าไปเมื่อบูตเข้าระบบทุกครั้งจะปิด bind9 ทันที
#!/bin/sh -e
#
/etc/init.d/bind9 stop

exit 0




# shutdown -r now
Linux Diskless Command line - 79



SUPER USER กับ AoE e0.0
ในตัวโค้ดบังครับให้ทา super user ใน aoe 0 0 เท่านั้น เพื่อป้องกันการหลงลืม
ในขณะที่เลิกเป็น super user แต่ลืมไปแก้ไขคาสั่งให้เป็น user normal
จึงออกแบบโค้ดไม่ให้ระบบไปกระทากับ hdd img โดยตรง .. กรณีลืมจริงๆ ป้องกันได้

ขั้นตอนไม่ยาก ทาการแก้ไขที่ไฟล์ dhcpd.conf
ยกตัวอย่างเช่น โค้ดในไฟล์ dhcpd.conf

ตัวอย่างแรกเครื่องหมายเลข 1 เป็น User normal ใช้งานคืนค่าธรรมดา
host bootdisk1 {
 hardware ethernet 50:e5:49:e9:95:e8;
 fixed-address 192.168.254.1;
 option host-name com1;

    if exists user-class and option user-class = "gPXE" {
      execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal");
      filename "";
      option root-path "aoe:e0.1";
    } else {
      filename "undionly.kpxe";
    }
}

เมื่อต้องเป็น Super User ก็เปลี่ยนแค่ normal เป็น super
และเป็น aoe:e0.1 ไปเป็น aoe:e0.0 แค่นั้น
ตัวอย่าง Super User
host bootdisk1 {
 hardware ethernet 50:e5:49:e9:95:e8;
 fixed-address 192.168.254.1;
 option host-name com1;

    if exists user-class and option user-class = "gPXE" {
      execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","super");
      filename "";
      option root-path "aoe:e0.0";
    } else {
      filename "undionly.kpxe";
    }
}
Linux Diskless Command line - 80




จากนั้นทาการ reload service dhcpd ด้วยสั่ง force-reload เท่านั้น ถ้า restart เฉยๆ
อาจจะทาให้เครื่องอื่นที่กาลังเล่นอยู่กระตุกนาน หรืออาจจะค้างไปเลย
ต้องบอกให้คนเล่น reboot เครื่องนั้นใหม่ เสียชื่อร้านแน่ๆครับ

ตัวอย่างคาสั่ง
# /etc/init.d/isc-dhcp-server force-reload
Linux Diskless Command line - 81


ทาการเปิดเครื่องลูกแล้วบูตแลน เพื่อดูสถานะ super user บน aoe e0.0




ในรูป นับจากบรรทัดล่างขึ้นบน บรรทัดที่ 3 จะเห็นว่าบรรทัดนี้แสดงคาว่า
Booting from root path “aoe:e0.0” หมายถึงสถานะ super




เครื่องลูกบูตเข้า Windows พร้อมใช้งานเรียบร้อยแล้ว เมื่อเป็น Super User แล้ว
ห้ามลืมเด็ดขาด ! ต้องเข้าไปดูใน Manage ว่า AoE Disk ที่ใช้งานอยู่คือ e0.0 หรือไม่
Linux Diskless Command line - 82




AoE Disk Properties
ตรง Location ต้องเท่ากับ AoE e0.0 ดังรูป
Linux Diskless Command line - 83


เมื่อต้องการให้เครื่องหมายเลข 1 เป็น User normal ใช้งานคืนค่าธรรมดาแบบเดิม
ก็ทาการแก้ไขไฟล์ dhcpd.conf ใส่ normal และ aoe:e0.1 กลับเป็นเหมือนเดิม

ตัวอย่างการกลับมาเป็น User normal ธรรมดา
host bootdisk1 {
 hardware ethernet 50:e5:49:e9:95:e8;
 fixed-address 192.168.254.1;
 option host-name com1;

    if exists user-class and option user-class = "gPXE" {
      execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal");
      filename "";
      option root-path "aoe:e0.1";
    } else {
      filename "undionly.kpxe";
    }
}

จากนั้นก็ dhcpd force-reload อีกครั้ง

# /etc/init.d/isc-dhcp-server force-reload




เมื่อกลับมาใช้งานเป็น normal เข้าไปดู Manage อีกครั้ง
AoE Disk ก็จะเป็น AoE e0.17
Linux Diskless Command line - 84



Block Device สาหรับทา Image
โดยการให้เครื่องลูก Upload OS ขึ้นมา Server ด้วยโปรแกรม Ghost 32




*แนะนา
ขั้นตอนนี้ต้องทาความเข้าใจพอสมควร ไฟล์อาจเกิดการ NULL หรือ ว่างเปล่า ได้
ทั้งๆที่ข้อมูลก็มีอยู่แล้ว ..
ส่วนนี้แนะนานักพัฒนาระบบ เขียนโปรแกรมจัดการป้องกันเพิ่มขึ้นเองเลยครับ

# mkdir /root/tmp

Download แบบไฟล์โค้ด
แล้ว upload ไปไว้ที่ /root/tmp/

http://www.mediafire.com/?p3m2cskl9jdt2mb
สารอง
http://www.upload-thai.com/download.php?id=29894712204db04f607c0fc2b3b1798a

จากนั้น compile code และให้สิทธ์ execute
# gcc /root/tmp/makeimg.c -o /root/tmp/makeimg
# chmod +x /root/tmp/makeimg
# cp /root/tmp/makeimg /sbin/

ทดสอบ
ต้องการจองพื้นที่ขนาด 12 GB สาหรับทา Image ไฟล์จากเครื่องลูก เก็บไฟล์ไว้ที่ /mnt/
มีชื่อไฟล์ว่า imgxp และใช้งานหมายเลข AoE Disk ที่ 231 แชร์ disk ด้วย eth1

# makeimg 12 imgxp /mnt/ 231 eth1
Linux Diskless Command line - 85




*หมายเหตุ
ในการใส่ตาแหน่ง path ที่เก็บไฟล์อิมเมจ ต้องมีเคื่องหมาย / ปิดพาธ์นั้นทุกครั้ง
เช่น ตัวอย่างพาธ์ /mnt/img/img_xp
ต้องระบุพาธ์ /mnt/img/

เมื่อเครื่องแม่ปล่อย Image ไปทาง AoE หมายเลข 231 เรียบร้อยแล้ว
ทางฝั่งเครื่องลูกต้องไปรับ Disk ทาง AoE หมายเลข 231 เช่นกัน
Linux Diskless Command line - 86


ในขั้นตอนนี้เครื่องลูกต้องอยู่ในวงแลนของเครื่องแม่ที่แจก dhcp-server


ตัวอย่าง และเทคนิดโดยไม่ต้องไปแก้ไขไฟล์ dhcpd.conf
ผมใช้งานเครื่องลูกที่เป็นระบบ Diskless อยู่ โดยใช้งาน aoe หมายเลข e0.17 จะไปทาการ
mount disk จากเครื่องแม่ที่ปล่อยหลายเลข Image ทาง aoe หมายเลข 222




ภาพจากเครื่องลูกก่อนที่จะทาการ mount disk อีก aoe disk เข้ามาอีก 1 disk




สร้าง disk ขนาด 99gb ชื่อไฟล์ imgxp เก็บไว้ที่พาธ์ /mnt/img/ ปล่อยออกหมายเลข aoe ที่ 222 และแชร์ disk ออกทางแลนการ์ด p3p1




ดูไฟล์ Image ที่สร้างชื่อ imgxp
Linux Diskless Command line - 87


กลับมาต่อที่เครื่องลูกเพื่อ aoe scan




ในรูปตัวอย่างจะเห็นว่าใช้คาสั่ง aoe scan แล้วไม่มี Disk หมายเลข 222 ออกมาแสดงโชว์เลย
ไม่ต้องกังวลเมื่อท่านมั่นใจแล้วว่าได้ส่ง Image หมายเลข 222 มาที่เครื่องลูกแล้ว และเครื่องลูกก็ใช้งาน dhcp-server จากเครื่องแม่แล้ว
ทาการ mount disk หมายเลข 222 โดยตรงเลยครับ




ในรูปเป็นการ mount aoe disk โดยตรง




ที่ Computer Management ในช่องด้านขวามือ –Disk drives ก็จะมี AoE Disk ขึ้นมาโชว์อีกตัว คือหมายเลข AoE e0.222
Linux Diskless Command line - 88




ที่ Computer Management ด้านซ้ายมือเลือก Disk Management ก็จะมี Disk ตัวใหม่เกิดขึ้นมาให้สร้าง ดังรูป




ทาการสร้าง Partition
Linux Diskless Command line - 89




ของใหม่ก็จะมาดังรูป

เมื่อทาเสร็จทุกครั้งอย่าลืมเปลี่ยนชื่อ Image เป็นชื่ออื่นน่ะครับ เพื่อความปลอดภาพของข้อมูลที่เสียเวลา Upload ด้วย Ghost32
และทาการฆ่า PID ของ Image ที่สร้างด้วย




จากนั้นมาที่เครื่องแม่เพื่อใช้งาน execdiskless สาหรับ Image ของใหม่ที่ทามาสดๆร้อนๆ
โดยการแก้ไขไฟล์ dhcpd.conf เพื่อบูต Disk แบบ Image




หมายเลข aoe ก็ใช้งานตามลาดับหมายเลขเครื่องคอมเลยนะครับ โปรแกรม execdiskless จะจัดการให้เองอัตโนมัต


จากนั้น reload
# /etc/init.d/isc-dhcp-server force-reload
Linux Diskless Command line - 90


ทุกครั้งที่ทาการ Upload Image เสร็จ อย่าลืม kill pid ทุกครั้ง
เพื่อลดภาวะโปรเซสทางานโดยเปล่าประโยชน์ kill ตามด้วยชื่อ และพาธ์

# makeimg kill imgxp /mnt/




*บังคับ
เมื่อทาไฟล์ Image และเครื่องลูก Upload OS มาเรียบร้อยแล้ว
ทาการเปลี่ยนชื่อ Img ที่พาธ์นั้นใหม่ เพื่อป้องกันการสร้างไฟล์ซ้า รวมถึงหมายเลข
AoE ซ้ากัน ซึ่งจะทาให้ข้อมูลที่ทามาเกิด NULL ขึ้นมาได้


# mv /mnt/imgxp /mnt/imgxp12gb

*กรณีที่ไม่ต้องการใช้งานไฟล์ Image แบบถาวร หรืออาจจะต้องการทา Image ใหม่
ต้องการลบตัวเก่าทิ้ง ก็ใช้คาสั่ง rm -rf <ตามด้วยพาธ์และชื่อไฟล์> แบบธรรมดาทั่วไป

# rm -rf /mnt/imgxp12gb

*ต้องการดู PID ของ Vblade ที่ยังตกค้างอยู่ใน /mnt/

# lsof /mnt/*




# ps aux|grep vblade




***ส่วนขั้นตอนการ upload image จากเครื่องลูกขึ้นเครื่องแม่นั้นจะอยู่ในขั้นตอน
การทดลองอย่างง่ายในหน้าช่วงแรกๆอยู่แล้ว
Linux Diskless Command line - 91


ลดภาระการทางาน CPU และ RAM
ขั้นตอนนี้จะเพิ่มพื้นที่ให้หน่วยความจามีพื้นที่ทางานได้มากขึ้น ในขณะที่PID ของ vblade ทางานโดยเปล่าประโยชน์
ทั้งๆที่เครื่องลูกเครื่องนั้นปิดไปแล้ว

ตัวอย่างการดู pid อย่างละเอียดด้วย htop


# htop
แล้วกดแป้น F3 แล้วพิมพ์ชื่อ pid ที่จะค้นหา คือ vblade แล้ว F3 ไปเรื่อยๆจนกว่าจะจบลูป




จะทาการสร้าง shell script linux เพื่อทาการอ่านค่า IP address จาก text file ชื่อ pingip.txt โดยพาธ์อยู่ที่ /root/tmp/


# touch /root/tmp/pingip.txt
จากนั้นทาการใส่หมายเลขไอพีของเครื่องลูกลงไปตามลาดับ

ตัวอย่าง
มีคอมสูงสุด 20 เครื่อง โดยที่ไอพีวงแลนของเครื่องลูก ที่เครื่องแม่แจกแบบ fix ip ให้
ระหว่าง 192.168.254.1 – 192.168.254.20 จุดสุดท้ายใช้งานตามหมายเลขเครื่องลูก
Linux Diskless Command line - 92



# nano /root/tmp/pingip.txt
ใส่หมายเลขไอพีเครื่องตามลาดับเครื่องลงไป
ห้ามนับผิดเด็ดขาด ต้องตามลาดับ 1 ,2 ,3 ,4 ,5 ,n n n ไม่งั้น script จะไป kill pid ผิดครับ
192.168.254.1
192.168.254.2
192.168.254.3
192.168.254.4
192.168.254.5
192.168.254.6
192.168.254.7
192.168.254.8
192.168.254.9
192.168.254.10
192.168.254.11
192.168.254.12
192.168.254.13
192.168.254.14
192.168.254.15
192.168.254.16
192.168.254.17
192.168.254.18
192.168.254.19
192.168.254.20
Linux Diskless Command line - 93



สร้าง shell script บน linux
เพื่อไปอ่านค่าไอพีเข้ามา แล้วตรวจสอบว่าเครื่องลูกเครื่องไหนปิดใช้งานไปแล้ว
เครื่องไหนปิดก็ทาการ kill pid vblade และ loop ทิ้งไปเลย


# nano /root/tmp/pingipdown.sh
Copy คาสั่ง script ลงไปหมดเลยครับ

#!/bin/bash

NAME="com"
NUMREC=0
SOURCE=0
DEST=0

# no ping request
COUNT=10

# add ip / hostname separated by white space
for myHost in cat `cat /root/tmp/pingip.txt`
do
  count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
  if [ "$count" = 0 ]; then
     #100% failed
     kill -9 `lsof /dev/mapper/$NAME$NUMREC`
     dmsetup remove --force /dev/mapper/$NAME$NUMREC
     losetup --detach /dev/loop$SOURCE
     losetup --detach /dev/loop$DEST
     rm -rf /dev/loop$SOURCE
     rm -rf /dev/loop$DEST
     rm -rf /cow/$NAME$NUMREC
     echo "ping ip $myHost <OFF> [$NAME$NUMREC] !"
     echo "DEL Loop $SOURCE <-> $DEST"
  else echo "ping ip $myHost <ON> [$NAME$NUMREC]"
  fi
  let NUMREC=NUMREC+1

  let DEST=NUMREC-1
  let SOURCE=NUMREC+DEST
  let DEST=SOURCE+1
done
# show device dmsetup and losetup
dmsetup table
losetup -a
Linux Diskless Command line - 94


ทาการแก้ไขบรรทัดที่ 3 เพื่อเปลี่ยนชื่อเครื่องคอมที่ท่านใช้งานตาม device mapper




ในตัวอย่างใช้ชื่อ com

# nano +3 /root/tmp/pingipdown.sh
แก้ให้เป็นชื่อคอมที่ใช้งาน
NAME="com"


# nano +9 /root/tmp/pingipdown.sh
บรรทัดนี้ระยะเวลาในการ ping แต่ละ ip หรือจานวณ count request ในการตรวจสอบ ถ้าใช้งานค่า 1 ระบบก็จะ ping เร็วต่อครั้ง
COUNT=10




ทดสอบรัน
# chmod +x /root/tmp/pingipdown.sh
# bash /root/tmp/pingipdown.sh
Linux Diskless Command line - 95


ตั้งเวลารัน script เพื่อตรวจสอบไอพีที่ปิดเครื่องไปทุกๆ 5 นาที บน crontab ใช้งานในสิทธ์ root


# nano /etc/crontab
เพิ่มคาสั่งเข้าไปที่ท้ายไฟล์
*/5 * * * * root /root/tmp/pingipdown.sh
Linux Diskless Command line - 96




RC.local
ขั้นตอนนี้ไม่ได้สาคัญอะไรมาก กรณีที่ท่านเกิดเหตุการ Server ดับ ในขณะที่กาลังแชร์ Disk
ให้เครื่องลูกใช้งานอยู่ .. เมื่อท่านเปิดเครื่อง Server ขึ้นมาใหม่ แต่เครื่องลูกค้างไปแล้ว
ในขั้นตอนนี้ ถ้าต้องการให้เครื่องลูกที่ค้าง ใช้งานได้ต่อเมื่อเครื่องแม่บูตเข้าระบบเรียบร้อยแล้ว
โดยที่เครื่องลูกไม่ต้อง restart เครื่องใหม่ (ส่วนใหญ่จะเกิดกับร้านเล็กๆ)

ให้เพิ่มคาสั่งรันระบบแชร์ disk อัตโนมัตใน /etc/rc.local

# nano /etc/rc.local
เพิ่มคาสั่งลงไปกับจานวณเครื่อง
exediskless 5 com 1 /dev/sdb eth1 normal
exediskless 5 com 2 /dev/sdb eth1 normal
exediskless 5 com 3 /dev/sdb eth2 normal
exediskless 5 com 4 /dev/sdb eth1 normal
exediskless 5 com 5 /dev/sdb eth3 normal

/etc/init.d/bind9 stop

exit 0

*แนะนา
ต้องให้คาสั่งในไฟล์ตรงกันกับไฟล์ dhcpd.conf ว่าการ์ดแลนหมายเลขอะไร
ที่ใช้แชร์ Disk ออกไปให้แต่ล่ะเครื่อง

*หมายเหตุ
ห้ามนาคาสั่ง /usr/sbin/ntpdate -u pool.ntp.org มาไว้ใน /etc/rc.local เป็นคาสั่งแรกเด็ดขาด
เพราะในตัวอย่างคู่มือ ไม่ได้ทาให้เครื่อง Server ออกเน็ตได้ .. ถ้ามีคาสั่งนี้เข้ามาก่อนคาสั่งอื่นในไฟล์
rc.local พอระบบเจอคาสั่งนี้แต่ออกเน็ตไม่ได้ ระบบจะแจ้งว่าคาสั่งล้มเหล้ว ระบบจะหยุดการรัน script
ในไฟล์ /etc/rc.local ทั้งหมดทันที จะทาให้คาสั่งถัดไปไม่ได้ถูกรันและใช้งานทันที

แบบแรก
usr/sbin/ntpdate -u pool.ntp.org <------------------------------- ห้ามเด็ดขาด
exediskless 5 com 1 /dev/sdb eth1 normal
exediskless 5 com 2 /dev/sdb eth1 normal
exediskless 5 com 3 /dev/sdb eth2 normal
exediskless 5 com 4 /dev/sdb eth1 normal
exediskless 5 com 5 /dev/sdb eth3 normal

/etc/init.d/bind9 stop

exit 0
Linux Diskless Command line - 97


แบบที่สอง

exediskless 5 com 1 /dev/sdb eth1 normal
exediskless 5 com 2 /dev/sdb eth1 normal
exediskless 5 com 3 /dev/sdb eth2 normal
exediskless 5 com 4 /dev/sdb eth1 normal
exediskless 5 com 5 /dev/sdb eth3 normal

/etc/init.d/bind9 stop

usr/sbin/ntpdate -u pool.ntp.org <------------------------------- แนะนาครับ

exit 0

แบบที่สองถูกต้องครับ ถ้าคาสั่งไหนไม่แน่ใจว่าจะใช้งานได้ 100% ก็เอามาใส่เหมือนใน
แบบที่สองได้เลย เพราะแบบที่สองเป็นการรันลาดับสุดท้ายในไฟล์ /etc/rc.local
ถึงคาสั่งจะล้มเหล้วก็ไม่เป็นไร เพราะไม่มีคาสั่งรันต่อท้ายแล้ว
Linux Diskless Command line - 98


ไฟล์ .BAT สาหรับ Startup Windows เพื่อ Rename ชื่อเครื่องตอนเข้า Windows
ชื่อไฟล์ rename.bat

@echo on
@echo Windows XP
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IP Address"') do set IP=%%b
for /f "tokens=1-4 delims=." %%a in ("%IP%") do set IP=%%d
echo %IP%
@echo off
set computername=COM-%IP%
reg   delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /f
reg   delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /f
reg   add "hklmSYSTEMCurrentControlSetControlComputerNameComputerName" /v "ComputerName" /d "%computername%" /f
reg   add "hklmSYSTEMCurrentControlSetControlComputerNameActiveComputerName" /v "ComputerName" /d "%computername%" /f
reg   add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /d "%computername%" /f
reg   add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /d "%computername%" /f




แบบที่สอง

@echo on
@echo Windows 7
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4 Address"') do set IP=%%b
for /f "tokens=1-4 delims=." %%a in ("%IP%") do set IP=%%d
echo %IP%
@echo off
set computername=COM-%IP%
reg delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /f
reg delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /f
reg add "hklmSYSTEMCurrentControlSetControlComputerNameComputerName" /v "ComputerName" /d "%computername%" /f
reg add "hklmSYSTEMCurrentControlSetControlComputerNameActiveComputerName" /v "ComputerName" /d "%computername%" /f
reg add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /d "%computername%" /f
reg add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /d "%computername%" /f
Linux Diskless Command line - 99


*เพิ่มเติมครับ
บางท่านอาจจะใช้ IP ไม่เหมือนในคู่มือตัวอย่าง
ส่วนใหญ่ที่เห็นใช้งานกันก็จะเป็น IP 192.168.1.254 สาหรับออกเน็ต
และ IP ที่ Fix ให้เครื่องลูกก็จะเป็น
192.168.1.1
,192.168.1.2
,192.168.1.3
,192.168.1.4
,192.168.1.x ตามจาเครื่องในร้านที่มี

ถ้าต้องการใช้งานตามค่า ip ในแบบของท่านก็ไปแก้ไข
# nano /etc/network/interfaces
ในส่วนนี้จะเป็นการกาหนดหมายเลข ip ให้การ์ดแลนตาม ip ของร้านท่านใช้งาน
แล้วระบุเป็น ip ของร้านท่าน

auto p1p1
iface p1p1 inet static
      address 192.168.1.201
      netmask 255.255.255.0




วิธีทาจะเหมือนในตัวอย่างการทดลองอย่างง่ายในช่วงแรกๆ ของคู่มือ
Linux Diskless Command line - 100


จากนั้นก็ไฟล์ dhcpd.conf แก้ไข ip เครื่องลูกให้ใช้งานตาม ip ร้าน
# nano /etc/dhcp/dhcpd.conf
ตัวอย่างการกาหนด Gateway ไปที่ ip ออกเน็ต และ ip ที่ใช้งานในร้าน
ไปที่บรรทัด subnet

subnet 192.168.1.0 netmask 255.255.255.0 {
  default-lease-time 43200;
  max-lease-time 86400;
  allow unknown-clients;
  option routers 192.168.1.254; ------------ IP Gateway ใช้ออกเน็ต
  range 192.168.1.100 192.168.1.199; ---------- แจกแบบ auto สาหรับใช้งานอย่างอื่น (Authentication)
}

host bootdisk1 {
 hardware ethernet 50:e5:49:e9:95:e8;
 fixed-address 192.168.1.1;   ----------- IP ที่ fix ให้เครื่องลูก ตาม ip ร้าน
 option host-name com1;

    if exists user-class and option user-class = "gPXE" {
      execute("sudo","execdiskless","17","com","1","/dev/sdc","p5p1","normal");
      filename "";
      option root-path "aoe:e0.1";
    } else {
      filename "undionly.kpxe";
    }
}
Linux Diskless Command line - 101


จากนั้นก็ต่อด้วย text file สาหรับการตรวจสอบ ip เครื่องลูกที่ไม่ได้ใช้งานแล้ว
# nano /root/tmp/pingip.txt
แก้เป็น ip ตามร้านใช้งาน
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
Linux Diskless Command line - 102




จบแล้วค่ะ

More Related Content

What's hot

Ceph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing GuideCeph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing GuideKaran Singh
 
Storage Area Network (SAN session Day-2)
Storage Area Network (SAN session Day-2)Storage Area Network (SAN session Day-2)
Storage Area Network (SAN session Day-2)Saroj Sahu
 
Build a High Available NFS Cluster Based on CephFS - Shangzhong Zhu
Build a High Available NFS Cluster Based on CephFS - Shangzhong ZhuBuild a High Available NFS Cluster Based on CephFS - Shangzhong Zhu
Build a High Available NFS Cluster Based on CephFS - Shangzhong ZhuCeph Community
 
Getting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiGetting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiLeon Anavi
 
Yocto project and open embedded training
Yocto project and open embedded trainingYocto project and open embedded training
Yocto project and open embedded trainingH Ming
 
50 Shades of Fuzzing by Peter Hlavaty & Marco Grassi
50 Shades of Fuzzing by Peter Hlavaty & Marco Grassi50 Shades of Fuzzing by Peter Hlavaty & Marco Grassi
50 Shades of Fuzzing by Peter Hlavaty & Marco GrassiShakacon
 
Embedded Linux Basics
Embedded Linux BasicsEmbedded Linux Basics
Embedded Linux BasicsMarc Leeman
 
Read-only rootfs: theory and practice
Read-only rootfs: theory and practiceRead-only rootfs: theory and practice
Read-only rootfs: theory and practiceChris Simmonds
 
Upgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actionsUpgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actionsMarna Walle
 
Tips Tricks and Little known features in SAP ASE
Tips Tricks and Little known features in SAP ASETips Tricks and Little known features in SAP ASE
Tips Tricks and Little known features in SAP ASESAP Technology
 
Kubernetes networking
Kubernetes networkingKubernetes networking
Kubernetes networkingSim Janghoon
 
RedHat Virtualization Manager
RedHat Virtualization ManagerRedHat Virtualization Manager
RedHat Virtualization ManagerRaz Tamir
 
OpenStack Neutron IPv6 Lessons
OpenStack Neutron IPv6 LessonsOpenStack Neutron IPv6 Lessons
OpenStack Neutron IPv6 LessonsAkihiro Motoki
 
Building Instruqt, a scalable learning platform
Building Instruqt, a scalable learning platformBuilding Instruqt, a scalable learning platform
Building Instruqt, a scalable learning platformInstruqt
 
NetApp enterprise All Flash Storage
NetApp enterprise All Flash StorageNetApp enterprise All Flash Storage
NetApp enterprise All Flash StorageDavid Mallenco
 
Running Android on the Raspberry Pi: Android Pie meets Raspberry Pi
Running Android on the Raspberry Pi: Android Pie meets Raspberry PiRunning Android on the Raspberry Pi: Android Pie meets Raspberry Pi
Running Android on the Raspberry Pi: Android Pie meets Raspberry PiChris Simmonds
 
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBLinux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBshimosawa
 
Designing your XenApp 7.5 Environment
Designing your XenApp 7.5 EnvironmentDesigning your XenApp 7.5 Environment
Designing your XenApp 7.5 EnvironmentDavid McGeough
 

What's hot (20)

Ceph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing GuideCeph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing Guide
 
Storage Area Network (SAN session Day-2)
Storage Area Network (SAN session Day-2)Storage Area Network (SAN session Day-2)
Storage Area Network (SAN session Day-2)
 
Build a High Available NFS Cluster Based on CephFS - Shangzhong Zhu
Build a High Available NFS Cluster Based on CephFS - Shangzhong ZhuBuild a High Available NFS Cluster Based on CephFS - Shangzhong Zhu
Build a High Available NFS Cluster Based on CephFS - Shangzhong Zhu
 
Getting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiGetting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry Pi
 
Yocto project and open embedded training
Yocto project and open embedded trainingYocto project and open embedded training
Yocto project and open embedded training
 
50 Shades of Fuzzing by Peter Hlavaty & Marco Grassi
50 Shades of Fuzzing by Peter Hlavaty & Marco Grassi50 Shades of Fuzzing by Peter Hlavaty & Marco Grassi
50 Shades of Fuzzing by Peter Hlavaty & Marco Grassi
 
Embedded Linux Basics
Embedded Linux BasicsEmbedded Linux Basics
Embedded Linux Basics
 
DAS RAID NAS SAN
DAS RAID NAS SANDAS RAID NAS SAN
DAS RAID NAS SAN
 
Read-only rootfs: theory and practice
Read-only rootfs: theory and practiceRead-only rootfs: theory and practice
Read-only rootfs: theory and practice
 
RAID and LVM
RAID and LVMRAID and LVM
RAID and LVM
 
Upgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actionsUpgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actions
 
Tips Tricks and Little known features in SAP ASE
Tips Tricks and Little known features in SAP ASETips Tricks and Little known features in SAP ASE
Tips Tricks and Little known features in SAP ASE
 
Kubernetes networking
Kubernetes networkingKubernetes networking
Kubernetes networking
 
RedHat Virtualization Manager
RedHat Virtualization ManagerRedHat Virtualization Manager
RedHat Virtualization Manager
 
OpenStack Neutron IPv6 Lessons
OpenStack Neutron IPv6 LessonsOpenStack Neutron IPv6 Lessons
OpenStack Neutron IPv6 Lessons
 
Building Instruqt, a scalable learning platform
Building Instruqt, a scalable learning platformBuilding Instruqt, a scalable learning platform
Building Instruqt, a scalable learning platform
 
NetApp enterprise All Flash Storage
NetApp enterprise All Flash StorageNetApp enterprise All Flash Storage
NetApp enterprise All Flash Storage
 
Running Android on the Raspberry Pi: Android Pie meets Raspberry Pi
Running Android on the Raspberry Pi: Android Pie meets Raspberry PiRunning Android on the Raspberry Pi: Android Pie meets Raspberry Pi
Running Android on the Raspberry Pi: Android Pie meets Raspberry Pi
 
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBLinux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKB
 
Designing your XenApp 7.5 Environment
Designing your XenApp 7.5 EnvironmentDesigning your XenApp 7.5 Environment
Designing your XenApp 7.5 Environment
 

Similar to Linux diskless

Basic linux
Basic linuxBasic linux
Basic linuxtaggi
 
Basic Linux
Basic LinuxBasic Linux
Basic Linuxminafaw2
 
Cent OS-book
Cent OS-bookCent OS-book
Cent OS-booknin9nin9
 
คู่มือการติดตั้ง Cent os
คู่มือการติดตั้ง  Cent osคู่มือการติดตั้ง  Cent os
คู่มือการติดตั้ง Cent osPacharin Ngowpradit
 
Server2Go เว็บพกพาตัวจริง
Server2Go เว็บพกพาตัวจริงServer2Go เว็บพกพาตัวจริง
Server2Go เว็บพกพาตัวจริงBoonlert Aroonpiboon
 
คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์
คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์
คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์Radompon.com
 
รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้
รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้
รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้วิโรจน์ พรรณหาญ
 
ว่าด้วยเรื่อง Linux Container
ว่าด้วยเรื่อง Linux Containerว่าด้วยเรื่อง Linux Container
ว่าด้วยเรื่อง Linux ContainerUdomsak Chundang
 

Similar to Linux diskless (20)

Ch02 administrators-tasks
Ch02 administrators-tasksCh02 administrators-tasks
Ch02 administrators-tasks
 
Docker 101 for developer
Docker 101 for developerDocker 101 for developer
Docker 101 for developer
 
Basic linux
Basic linuxBasic linux
Basic linux
 
Basic Linux
Basic LinuxBasic Linux
Basic Linux
 
Hotspotubuntu8
Hotspotubuntu8Hotspotubuntu8
Hotspotubuntu8
 
Cent OS-book
Cent OS-bookCent OS-book
Cent OS-book
 
Ch15 elastic hosts-svradmin
Ch15 elastic hosts-svradminCh15 elastic hosts-svradmin
Ch15 elastic hosts-svradmin
 
Bug#691613: apt: [intl:th] update thai program translation
Bug#691613: apt: [intl:th] update thai program translationBug#691613: apt: [intl:th] update thai program translation
Bug#691613: apt: [intl:th] update thai program translation
 
Ch07 bind9-part2
Ch07 bind9-part2Ch07 bind9-part2
Ch07 bind9-part2
 
Coovaubuntu904
Coovaubuntu904Coovaubuntu904
Coovaubuntu904
 
Ch06 bind9
Ch06 bind9Ch06 bind9
Ch06 bind9
 
Ch05 name-services
Ch05 name-servicesCh05 name-services
Ch05 name-services
 
Cent os
Cent osCent os
Cent os
 
คู่มือการติดตั้ง Cent os
คู่มือการติดตั้ง  Cent osคู่มือการติดตั้ง  Cent os
คู่มือการติดตั้ง Cent os
 
NETWORK SERVICEOPENSSH + NTP + SQUID
NETWORK SERVICEOPENSSH + NTP + SQUIDNETWORK SERVICEOPENSSH + NTP + SQUID
NETWORK SERVICEOPENSSH + NTP + SQUID
 
Server2Go เว็บพกพาตัวจริง
Server2Go เว็บพกพาตัวจริงServer2Go เว็บพกพาตัวจริง
Server2Go เว็บพกพาตัวจริง
 
คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์
คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์
คู่มือการดูแลรักษาเครื่องคอมพิวเตอร์
 
รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้
รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้
รวมสารพัดชื่อไวรัสคอม + อาการ + วิธีแก้
 
Book v9.1
Book v9.1Book v9.1
Book v9.1
 
ว่าด้วยเรื่อง Linux Container
ว่าด้วยเรื่อง Linux Containerว่าด้วยเรื่อง Linux Container
ว่าด้วยเรื่อง Linux Container
 

Linux diskless

  • 1. Linux Diskless Command line - 1 Linux Ubuntu Diskless x86x64 ในตระกูล linux ไม่ได้ขึ้นกับระบบ Ubuntu อย่างเดียวในการทาระบบ Diskless สามารถทาได้หมด ไม่ว่าจะเป็น Linux ClearOS ,Linux CentOS ,Linux Clark connect ,Unix FreeBSD ขอแค่เข้าใจ package และตั้งค่าการทางานของระบบให้ถูกต้อง กระบวนการและโครงสร้างแถบไม่แตกต่างกัน ในรูปตัวอย่างใช้งาน hdd เครื่องละ 1 ลูก .. จะทาการ upload img เข้าไปใน hdd บนเครื่องแม่ โดยไม่ต้องถอด hdd ที่เครื่องลูกมาเป็น master
  • 2. Linux Diskless Command line - 2 ความหมายเนื้อเรื่องต่างๆ ศึกษาเพิ่มเติมได้ทั่วไป *ศึกษาเพิ่มได้ที่ http://wiki.nakhon.net/wiki/Diskless_Server http://www.linuxthai.org/ http://ict.in.th/
  • 3. Linux Diskless Command line - 3 ลักษณะการต่อสายแลนบนเครื่องแม่ (เฉพาะในคู่มือ) อันดับแรกก็ลง OS แล้วเข้าใช้งานตามปกติ ล็อกอินยูสเซอร์ที่แอด จากนั้นกาหนดรห้สผ่านให้ root ต่อด้วยการเปลี่ยนสถานะยูสเซอร์เข้าไปเป็น root
  • 4. Linux Diskless Command line - 4 # sudo passwd [sudo] password for portspro: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully # su Password: Added user root. # cd *หมายเหตุ อันดับแรกต้องทาให้เครื่อง Server ออกเน็ตได้ก่อน เพื่อทาการ download package ในการติดตั้งมาลงที่ Server ตัวมันเอง # ifconfig -a ดู device การ์ดแลนทั้งหมด
  • 5. Linux Diskless Command line - 5 ในตัวอย่างจะกาหนดค่าดังนี้ การ์ดแลนใบที่ 1 ชื่อ device อุปกรณ์คือ eth0 จะทาเป็นการ์ดที่รับเน็ตเข้ามาแบบ dhcp การ์ดแลนใบที่ 2 ชื่อ device อุปกรณ์คือ eth1 ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static # nano /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 10.0.0.254 netmask 255.255.255.0 ทาการแก้ไขค่า แล้วบันทึกออก จากนั้น restart service network ใหม่ # /etc/init.d/networking restart
  • 6. Linux Diskless Command line - 6 # ifconfig ทาการอัพเวลาให้ระบบให้ตรงกับปัจจุบัน # /usr/sbin/ntpdate -u pool.ntp.org ทาการอัพเดต package # sudo apt-get update
  • 7. Linux Diskless Command line - 7 # sudo apt-get install tftp-hpa tftpd-hpa xinetd # mkdir /tftpboot # sudo chown nobody.nogroup /tftpboot # sudo chmod 777 /tftpboot # sudo nano /etc/default/tftpd-hpa จากเดิม # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure" แก้เป็น โดยการเพิ่ม 2 บรรทัดลงไป และกาหนดตาแหน่ง path ไฟล์บูตให้เครื่องลูก # /etc/default/tftpd-hpa RUN_DAEMON="yes" OPTIONS="-l -s /tftpboot" TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure" # sudo /etc/init.d/tftpd-hpa start # netstat -a |grep tftp udp 0 0 *:tftp *:*
  • 8. Linux Diskless Command line - 8 สร้างไฟล์ tftp ขึ้นมาทางานร่วมกับ Service # nano /etc/xinetd.d/tftp เพิ่มคาสั่งเข้าไปในตัวไฟล์ที่สร้าง พร้อมระบุพาธ tftpboot ให้ถูกต้อง service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no } # sudo /etc/init.d/xinetd start
  • 9. Linux Diskless Command line - 9 undionly.kpxe เป็นไฟล์ gpxe สาหรับปล่อยให้เครื่องลูกมารับไปบูตเข้าใช้งานโอเอสจากเครื่องแม่ ทาการ download file undionly.kpxe ลงมา แล้วทาการ Upload ขึ้นไปเก็บที่ server ในตาแหน่ง /tftpboot โหลดได้ที่ http://www.mediafire.com/?tj30x1ew8jfb4c6
  • 10. Linux Diskless Command line - 10 DHCP-Server # sudo apt-get install dhcp3-server # nano /etc/default/isc-dhcp-server เพิ่ม device การ์ดแลนที่จะแชร์ disk ในตัวอย่างคือ eth1 # Defaults for dhcp initscript # sourced by /etc/init.d/dhcp # installed at /etc/default/isc-dhcp-server by the maintainer scripts # # This is a POSIX shell fragment # # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="eth1"
  • 11. Linux Diskless Command line - 11 # echo "" > /etc/dhcp/dhcpd.conf # nano /etc/dhcp/dhcpd.conf เพิ่มคาสั่งเข้าไปทั้งหมด ddns-update-style interim; ddns-rev-domainname "in-addr.arpa."; option domain-name "sysdiskless"; option domain-name-servers 8.8.8.8,8.8.4.4; option ntp-servers us.pool.ntp.org; ignore client-updates; update-static-leases on; use-host-decl-names on; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 10.0.0.0 netmask 255.255.255.0 { default-lease-time 43200; max-lease-time 86400; allow unknown-clients; option routers 10.0.0.254; range 10.0.0.100 10.0.0.199; } host bootdisk1 { hardware ethernet 50:e5:49:e9:95:e8; fixed-address 10.0.0.1; option host-name com1; if exists user-class and option user-class = "gPXE" { filename ""; option root-path "aoe:e0.0"; } else { filename "undionly.kpxe"; } } *หมายเหตุ คาสั่งที่ใช้ใน dhcpd.conf เป็นเพียงคาสั่งเพื่อทดสอบระบบเท่านั้น คาสั่งจึงไม่มาก
  • 12. Linux Diskless Command line - 12 ต่อไปทาการค้นหาที่เครื่อง server ใช้ domain name ชื่ออะไร # hostname -d sysdiskless ในอย่าง domain คือ sysdiskless # nano +4 /etc/dhcp/dhcpd.conf # sudo /etc/init.d/isc-dhcp-server start
  • 13. Linux Diskless Command line - 13 Vblade # sudo apt-get install vblade # mkdir /var/run/vblade # /etc/init.d/vblade start * Starting vblade deaemons vblade ทดสอบ ทาการทดสอบแบบง่ายๆ เพื่อให้รู้ว่าเครื่องแม่พร้อมจะแชร์ disk แล้ว .. ด้วย script การปล่อย disk จากเครื่อง server เอง ด้วยโปรแกรม vblade # cd /root # nano test.sh Copy ใส่คาสั่งลงทั้งหมดเลยครับ ไม่ต้องแก้ไขอะไรมาก แก้อยู่บรรทัดเดียว ตรงบรรทัดสุดท้าย เพื่อระบุการ์ดแลนที่จะแชร์ disk ตัวอย่างเป็น eth1 vblade 0 0 eth1 /dev/mapper/test1 & แก้ตามการ์ดแลนใบที่แชร์ disk ขั้นตอนนี้เป็นการทดสอบจาก hdd sda ของเครื่องแม่เท่านั้น ! #!/bin/bash losetup -r /dev/loop0 /dev/sda dd if=/dev/zero of=/dev/test1 bs=512 count=0 seek=$(blockdev --getsize /dev/loop0) losetup /dev/loop1 /dev/test1 echo "0 $(blockdev --getsize /dev/loop0) snapshot /dev/loop0 /dev/loop1 p 64" | dmsetup create test1 vblade 0 0 eth1 /dev/mapper/test1 & # chmod +x /root/test.sh
  • 14. Linux Diskless Command line - 14 ก่อนทดสอบให้ดูค่าเก่าที่ device mapper ก่อน .. มีแค่ device sda ของเครื่องแม่เท่านั้น ทดสอบเพื่อเห็นผลต่าง # fdisk -l จะเห็นว่าตอนนี้มีแค่ /dev/sda ต่อไปสั่งรัน script # bash /root/test.sh 0+0 records in 0+0 records out 0 bytes (0 B) copied, 1.8998e-05 s, 0.0 kB/s pid 1662: e0.0, 40130390 sectors O_RDWR
  • 15. Linux Diskless Command line - 15 จากนั้นดูว่า disk ถูกโหลดลงใน device mapper หรือยัง # fdisk -l จะเห็นว่ามีเพิ่มขึ้นจากครั้งก่อน คือ /dev/mapper/test1 แสดงว่าเครื่อง server พร้อมแชร์ disk แล้วครับ
  • 16. Linux Diskless Command line - 16 ทดสอบเครื่องลูก ทาการเปิดเครื่องลูกแล้วตั้งค่าให้ boot lan ผลลัพธ์ที่เครื่องลูกต้องได้รับ ตามรูปครับ เครื่องลูกบูตถึงหน้า boot grup ของ linux เหมือนเครื่องแม่ ก็แสดงว่าท่านทาผ่านและถูกต้องแล้วครับ ปิดเครื่องลูกได้เลยครับ ไปขั้นตอนต่อไปในการ upload img ขึ้น Server
  • 17. Linux Diskless Command line - 17 Upload Image ในขั้นตอนนี้จะ upload image โดยใช้โปรแกรม Ghost 32 ขึ้นไปที่ Server Diskeless ในตัวอย่างนี้จะ ghost hdd ทั้งลูกที่อยู่บนเครื่องลูก อัพขึ้นไปที่ img เครื่องแม่เท่านั้น *กลับมาที่หน้าจอเครื่องแม่ # cd /root ทาการสร้าง script ในการจองพื้นที่ img ให้เครื่องลูก # nano blockimg.sh ใส่เข้าไปทั้งหมด #!/bin/bash # dd if=/dev/zero of=/mnt/imgos bs=512 count=0 seek=12345678 vblade 0 0 eth1 /mnt/imgos & # echo "Create block image os ... [ OK ]"; *ความหมายคาสั่งในตัว script จากนั้นทาการสร้าง block device สาหรับเก็บ img ที่พาธ /mnt ส่วน img ชื่อ imgos โดยที่ความจุ 12345678 เท่ากับ 6 GB กว่าๆ และใช้ aoe ที่ e0.0 *ตัวอย่างคาสั่งตรงบรรทัด vblade 0 0 eth1 /mnt/imgos & ทาการเปลี่ยนตามการ์ดแลนที่ทาการแชร์ disk ให้เครื่องลูก ต่อไปก็กาหนดสิทธิ์ +x ให้ไฟล์ และสั่งรัน
  • 18. Linux Diskless Command line - 18 # chmod +x /root/blockimg.sh # bash /root/blockimg.sh 0+0 records in 0+0 records out 0 bytes (0 B) copied, 2.6288e-05 s, 0.0 kB/s Create block image os ... [ OK ] pid 1616: e0.0, 12345678 sectors O_RDWR ถ้าผลลัพธ์ที่ได้ออกมาเหมือนในตัวอย่างก็ผ่านครับ จากนั้นไปทาขั้นตอนต่อไปที่หน้าจอเครื่องลูกได้เลยครับ
  • 19. Linux Diskless Command line - 19 AoE tool ทาการติดตั้ง driver สาหรับบูต aoe ลงที่เครื่องลูก Download ไฟล์ลงมาติดตั้งได้เลยครับ http://www.mediafire.com/?jwjgylj57j7iww6 อันดับแรกให้ทาการปิด Firewall บน Windows ก่อน .. จาก On ให้เปลี่ยนเป็น Off ซะ
  • 20. Linux Diskless Command line - 20 เมื่อโหลดไฟล์ aoe tool เรียบร้อยแล้ว ทาการติดตั้งลงไป โดยการไปที่ Start -> Setting -> Control Panel -> เลือก Add Hardware ตามรูปภาพเลยครับ
  • 21. Linux Diskless Command line - 21 ทาการ Browse .. เพื่อนาไฟล์ aoe.inf
  • 23. Linux Diskless Command line - 23 ตรวจสอบว่า driver aoe โหลดเข้าไปหหรือยัง ผลลัพธ์ตามภาพ จากนั้น Restart เครื่องลูก 1 ครั้ง
  • 24. Linux Diskless Command line - 24 การ Mount Disk ด้วย AoE tool ตรวจดูว่า IP Address ที่ได้รับถูกต้องหรือไม่ เปิดใช้งานคาสั่งดอส
  • 25. Linux Diskless Command line - 25 พิมพ์ aoe แล้ว enter เพื่อแสดงรายการอาณ์กิวเมนท์พร้อรายละเอียดการทางาน พิมพ์ aoe scan เพื่อแสดงรายการ disk ที่ถูกแชร์ออกมาจากเครื่องแม่
  • 26. Linux Diskless Command line - 26 คลิกขาวเมาท์เพื่อทาการ Mark ตาแหน่งที่จะ copy รายการ disk แสดงออกมา พร้อม aoe e0.0 ที่เครื่องแม่แจกมาให้ใน dhcpd.conf จากนั้นก็อปปี้ mac address ของเครื่องลูกเอาไว้
  • 27. Linux Diskless Command line - 27 ทาการ mount disk ด้วยคาสั่ง aoe mount <ตามด้วย mac addr> <ตามด้วย aoe e0.0> พิมพ์คาสั่งแสดงรายการโชว์ที่กระทาไปแล้ว ด้วย aoe show
  • 28. Linux Diskless Command line - 28 กลับไปดูที่ Device Manager -> Disk drivers จะเห็นว่ามี disk เกิดขึ้นมาใหม่ชื่อ device คือ AoE Disk
  • 29. Linux Diskless Command line - 29 จากนั้นไปที่ Disk Management เพื่อ Initiallize Disk ให้ OS มองเห็น จากนั้นทาตามรูปเลยครับ คลิกเครื่องหมายถูกที่หน้า Disk 1
  • 30. Linux Diskless Command line - 30 ไม่ต้องมีเครื่องหมายถูก Next ต่อไป ต่อไปทาการ Format Disk ที่สร้างขึ้นมาใหม่
  • 31. Linux Diskless Command line - 31 ตามรูปเลยครับ
  • 32. Linux Diskless Command line - 32 ทาเป็น Primary Partition
  • 33. Linux Diskless Command line - 33 ขั้นตอนการเลือก Drive letter ส่วนตัวผมชอบสร้างที่ drive Z เพราะมันแตกต่างดี File system จะเป็นอะไรก็ได้ แต่แนะนา NTFS ส่วนตัวอย่างเครื่องทดลองไม่แรง จึงใช้ FAT32
  • 34. Linux Diskless Command line - 34 Success !
  • 35. Linux Diskless Command line - 35 เมื่อเสร็จขั้นตอนตามรูปแล้ว ต่อไปก็ปรับแต่ง Registry ให้ Start ที่ 0 (ในตัวอย่างใช้ winxp จึงต้องตั้งค่าเหล่านี้ ส่วน MS ตัวอื่นก็ศึกษาเพิ่มเติมจาก google) ไปที่ Device Manager ต่อด้วยการ์ดแลนที่จะทาการ boot disk แล้ว Properties เพื่อดู Service ที่การ์ดแลนใช้งาน คลิกเลือกที่แถบ Details ตรงช่อง combo box เลือกรายการคาว่า Service ดังรูป ตัวอย่าง Service แลนการ์ดชื่อ E100B
  • 36. Linux Diskless Command line - 36 Start -> Run พิมพ์ regedit HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Services
  • 37. Linux Diskless Command line - 37 ในตัวอย่าง Service แลนการ์ดชื่อ E100B เลือก Start แล้วไปตั้งค่าจาก 0x00000003(3) เปลี่ยนไปเป็น 0
  • 38. Linux Diskless Command line - 38 ใส่เลข 0 เข้าไป ตามรูป เสร็จ ! .. จากนั้น restart เครื่องลูก 1 ครั้ง เพื่อเริ่มค่าการปรับแต่ง registry อีกครั้ง
  • 39. Linux Diskless Command line - 39 Ghost 32 -to- Image ในขั้นตอนตัวอย่างนี้จะเป็นการ ghost แบบ Disk -to- Disk ลงใน Image ที่เตรียมไว้ *หมายเหตุ ในขั้นตอนการ Ghost นี้ เปิดใช้งานเฉพาะโปรแกรม Ghost32.exe เท่านั้น โหลดได้ที่ http://www.mediafire.com/?xwimf6g4xd37jk8
  • 40. Linux Diskless Command line - 40 Local -> Disk -> To Disk เลือก Disk ต้นฉบับ หรือ ต้นทาง เลือก Disk ปลายทาง
  • 41. Linux Diskless Command line - 41 ในตัวอย่างไม่เลือกอะไรมาก เพราะ Disk ทดลองพื้นที่ไม่มาก ตอบ YES
  • 42. Linux Diskless Command line - 42 เลือก Volume Snapshot เพื่อให้โปรแกรม Ghost ข้ามโปรแกรม Ghost32.exe ไป .. ในขณะที่กาลังทาการ Ghost *เพิ่มเติม ในขณะที่กาลัง Ghost อยู่ มีข้อความมาแสดงโชว์ ให้ตอบ Yes ผ่านไป
  • 43. Linux Diskless Command line - 43 เสร็จสินการ Ghost คลิกเลือก Continue แล้วออกจากโปรแกรม Ghost32 เพื่อไปดู Disk ที่เปลี่ยนแปลงไป Disk -to- Disk ปิดเครื่องลูกแล้วตั้งค่า BIOS บูตแลน
  • 44. Linux Diskless Command line - 44 ก่อนจะทาการทดสอบ ให้กลับมาแก้ไขค่าเก่าที่อยู่ใน device mapper ออกเสียก่อน เพราะค่าเดิมบน shell script ให้แชร์ disk /dev/sda ของเครื่องแม่อยู่ ที่ Terminal บนเครื่องแม่ ให้พิมพ์คาสั่งดู device ที่ทางานอยู่บน mapper ก่อน # dmsetup table test1: 0 12345678 snapshot 7:0 7:1 P 64 ค้นหา Process ID ของ /dev/mapper/test1 # lsof /dev/mapper/test1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME vblade 1985 root 3u BLK 252,0 0t0 13672 /dev/mapper/../dm-0 pid คือ 1985 ต่อไปทาการฆ่า pid 1985 แล้วลบ test1 ที่ถูกโหลดลงใน device mapper จากนั้นแสดงตาราง device mapper # kill -9 1985 # dmsetup remove --force /dev/mapper/test1 # dmsetup table No devices found
  • 45. Linux Diskless Command line - 45 ขั้นตอนต่อไปทาการล้าง loop device ของ test1 # losetup -a /dev/loop0: [0005]:5960 (/dev/sda) /dev/loop1: [0005]:13661 (/dev/test1) ในตัวอย่างจะทาการล้าง loop0 และ loop1 ที่เป็นค่าเก่าออก ก่อนที่จะรัน shell script ใหม่อีกครั้ง เพื่อไม่ให้เกิดการ Busy เมื่อมีข้อมูลซ้ากัน # losetup --detach /dev/loop0 # losetup --detach /dev/loop1 # rm -rf /dev/loop0 # rm -rf /dev/loop1 # losetup -a จะเห็นว่าใน loop device ไม่มีการใช้งานแล้ว *หมายเหตุ คาสั่งการ kill และ remove บน mapper และ loop จะง่ายขึ้นในขั้นตอนการติดตั้งระบบ Diskless แบบใช้งานจริง หลังจากเสร็จในเรื่องของการทดลองอย่างง่าย จะใช้โค้ดภาษา C เข้ามาช่วยใช้งาน shell script ให้ง่าย รวดเร็ว คุณภาพ ดีขึ้นกว่าเดิม
  • 46. Linux Diskless Command line - 46 ต่อไปทาการแก้ไขไฟล์ script ให้แชร์ Disk Image ที่ทาเสร็จเรียบร้อยแล้ว # nano /root/test.sh ที่บรรทัดที่สองแก้เป็นตาแหน่งของ img #!/bin/bash losetup -r /dev/loop0 /mnt/imgos dd if=/dev/zero of=/dev/test1 bs=512 count=0 seek=$(blockdev --getsize /dev/loop0) losetup /dev/loop1 /dev/test1 echo "0 $(blockdev --getsize /dev/loop0) snapshot /dev/loop0 /dev/loop1 p 64" | dmsetup create test1 vblade 0 0 eth1 /dev/mapper/test1 & สั่งรัน shell script block device สาหรับแชร์ disk อีกครั้ง # bash /root/test.sh 0+0 records in 0+0 records out 0 bytes (0 B) copied, 1.8134e-05 s, 0.0 kB/s root@portspro:~# pid 2138: e0.0, 12345678 sectors O_RDWR ต่อไปทาการเปิดเครื่องลูกทดสอบบูตแลนได้เลย
  • 47. Linux Diskless Command line - 47 บูตแลนเสร็จเข้าวินโดว์ ผ่าน ! ….. จบเร็วครับกับการทดลองอย่างง่าย *** ต่อไปจะเป็นการติดตั้งละใช้งานจริง
  • 48. Linux Diskless Command line - 48 การติดตั้งและใช้งานจริง ท่านใดเข้าใจหลักการทางานของระบบ Diskless ก็สามารถข้ามมาทาในขั้นตอนนี้ได้เลย เพราะเรื่องแรกเป็นการหัดทาระบบอย่างง่าย (เหมาะกับมือใหม่)
  • 49. Linux Diskless Command line - 49 โครงการวางระบบในร้านเกมส์แห่งหนึ่ง มีเครื่องลูกจานวณ 20 เครื่อง - เครื่องแยกเน็ต - แยกเกมส์ โดยที่เครื่องแยกเน็ต-แยกเกมส์ มีการ์ดแลน 3 ใบ ,แลนออนบอร์ด 1 พอร์ต 1 พอร์ตบนออนบอร์ดมีหน้าที่แจกเน็ตให้เครื่องลูก ไอพี 192.168.254.254 *ส่วนการ์ดแลน 3 ใบ ใบที่ 1 จัดทา PPPoE เส้นที่ 1 สาหรับพอร์ดเน็ต 1 - 1023 ใบที่ 2 จัดทา PPPoE เส้นที่ 2 สาหรับพอร์ตเกมส์ 1024 - 65535 ใบที่ 3 จัดทา Chillispot Wifi Hotspot (รายได้เสริมแบบคูปอง) - เครื่องระบบ Linux Diskless x86x64 (64bit) โดยที่เครื่องระบบ Linux Diskless มีการ์ดแลน 4 ใบ ,แลนออนบอร์ด 1 พอร์ต 1 พอร์ตบนออนบอร์ดมีหน้าที่แจก dhcp-server ให้เครื่องลูกตอนบูตแลน แลนออนบอร์ด ไอพี 192.168.254.200 ยิ่ง Gateway ไปที่เครื่องแยกเน็ต-แยกเกมส์ ไอพี 192.168.254.254 *ส่วนการ์ดแลน 4 ใบ ใบที่ 1 ไอพี 192.168.254.201 --> เฉลี่ยเครื่องลูก 5 เครื่อง ใบที่ 2 ไอพี 192.168.254.202 --> เฉลี่ยเครื่องลูก 5 เครื่อง ใบที่ 3 ไอพี 192.168.254.203 --> เฉลี่ยเครื่องลูก 5 เครื่อง ใบที่ 4 ไอพี 192.168.254.204 --> เฉลี่ยเครื่องลูก 5 เครื่อง *ส่วน Harddisk ของเครื่อง Diskless นี้ใช้ 5 ตัว (ตามงบ) ตัวล่ะ 1 TB โดยที่ HDD(sda) 1 กับ HDD(sdb) 2 นามาทาเป็น Raid0 บน HW BIOS RAID 0 คือ ระบบ Linux Ubuntu Server 64 bit ส่วน HDD(sdc) 3 ทาเป็น Master แชร์ Disk ให้เครื่องลูก ถอดจากเครื่องลูกมาใส่โดยตรง และ HDD(sdd) 4 กับ HDD(sde) 5 นามาทาเป็น Raid0 บน Software Linux RAID 0 คือ COW สาหรับ Copy on Write บนระบบ Diskless *** แนะนา ในตัวอย่างเครื่องระบบ Linux Diskless ใช้การ์ดแลน 4 ใบ ตามจริงใบเดียวก็รองรับ 20 เครื่อง ได้อยู่แล้ว เนื่องจากการ์ดแลนเสริม 1000Mbits ราคาก็ไม่แพง Slot PCI ก็เหลือว่างเยอะ ผมจึงเพิ่มความเร็วให้ระบบทางานได้ดีขึ้นกว่าเดิม โดยการเสริมเส้นทางจราจรให้ระบบ Diskless เฉลี่ยเครื่องลูกต่อใบดีกว่าเยอะครับ
  • 50. Linux Diskless Command line - 50 แผนผังตัวอย่าง
  • 51. Linux Diskless Command line - 51 ท่านใดที่มาถึงขั้นตอนนี้ก็คงเข้าใจระบบ Linux Diskless พอสมควร ในส่วนนี้จะไปแบบเร็วนิดหนึ่งครับ อันดับแรกก็ลง OS แล้วเข้าใช้งานตามปกติ ล็อกอินยูสเซอร์ที่แอด จากนั้นกาหนดรห้สผ่านให้ root ต่อด้วยการเปลี่ยนสถานะยูสเซอร์เข้าไปเป็น root login as: portspro portspro@192.168.254.200's password: Added user portspro. The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic x86_64) * Documentation: https://help.ubuntu.com/ # sudo passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully # su Password: Added user root. # cd
  • 52. Linux Diskless Command line - 52 สร้าง Raid Software Linux ทาการสร้าง raid software ระหว่าง sdd กับ sde สาหรับ /cow *ขั้นตอนนี้ถ้าไม่ได้ทา Raid ก็ข้ามไปขั้นตอนการติดตั้ง Package ได้เลยครับ # mkdir /cow # fdisk /dev/sdd Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xfbcf5ebb. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): Using default value 1 First sector (2048-1953525167, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-1953525167, default 1953525167): Using default value 1953525167 Command (m for help): p Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes 81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3539557b Device Boot Start End Blocks Id System /dev/sdd1 2048 1953525167 976761560 83 Linux Command (m for help): t Selected partition 1 Hex code (type L to list codes): da Changed system type of partition 1 to da (Non-FS data)
  • 53. Linux Diskless Command line - 53 Command (m for help): p Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes 81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3539557b Device Boot Start End Blocks Id System /dev/sdd1 2048 1953525167 976761560 da Non-FS data Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. # fdisk /dev/sde จากนั้นก็ทาเหมือนกัน สาหรับการสร้าง RAID 0 จากพาร์ทิชั่นบนฮาร์ดดิสก์ 2 ลูก เช่น จาก /dev/sdd1 และ /dev/sde1 สามารถใช้คาสั่งได้ดังนี้ # mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1 The program 'mdadm' is currently not installed. You can install it by typing: apt-get install mdadm # apt-get install mdadm # mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1 mdadm: /dev/sdd1 appears to contain an ext2fs file system size=976761560K mtime=Thu Jan 1 07:00:00 1970 mdadm: /dev/sde1 appears to be part of a raid array: level=raid0 devices=2 ctime=Mon Jan 7 05:33:05 2013 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. บันทึกค่าของ RAID ขั้นตอนต่อไป ให้บันทึกค่าของ RAID ลงไฟล์กาหนดค่า # mdadm --detail --scan >> /etc/mdadm.conf
  • 54. Linux Diskless Command line - 54 ตรวจสอบสถานะ RAID เมื่อสร้าง RAID แล้ว การตรวจสอบสถานะของ RAID สามารถทาได้หลายวิธี ตรวจสอบโดยใช้คาสั่ง mdadm ได้ดังนี้ # mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Mar 6 08:28:27 2013 Raid Level : raid0 Array Size : 1953518592 (1863.02 GiB 2000.40 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Mar 6 08:28:27 2013 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Name : sysdisk:0 (local to host sysdisk) UUID : 3773f98a:a6a69ef0:a0284fb0:f67b2873 Events : 0 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 65 1 active sync /dev/sde1 # cat /proc/mdstat
  • 55. Linux Diskless Command line - 55 ฟอร์แมต Disk ที่เป็น Raid Device # mke2fs -t ext4 -L cow_raid0md0 /dev/md0 mke2fs 1.42.5 (29-Jul-2012) Filesystem label=cow_raid0md0 OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 122101760 inodes, 488379648 blocks 24418982 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 14905 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done โดยที่ -t ext4 คือให้ใช้ filesystem แบบ ext4 -L image_partition คือให้ตั้งชื่อ filesystem ว่า image_partition /dev/md0 คือชื่อ device ของ RAID เพื่อลดขนาดของเนื้อที่สงวนจากเดิม 5% เป็น 10 MB # tune2fs -r 20480 /dev/md0 tune2fs 1.42.5 (29-Jul-2012) Setting reserved blocks count to 20480
  • 56. Linux Diskless Command line - 56 # fdisk -l /dev/md0 Disk /dev/md0: 2000.4 GB, 2000403038208 bytes 2 heads, 4 sectors/track, 488379648 cylinders, total 3907037184 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 524288 bytes / 1048576 bytes Disk identifier: 0x00000000 Disk /dev/md0 doesn't contain a valid partition table # mkdir /cow # mount /dev/md0 /cow # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/isw_dhajaggiic_rid0md0p1 1889916616 1479840 1792434588 1% / udev 16427288 4 16427284 1% /dev tmpfs 6574632 1596 6573036 1% /run none 5120 0 5120 0% /run/lock none 16436576 0 16436576 0% /run/shm none 102400 0 102400 0% /run/user /dev/md0 1922864944 200028 1922582996 1% /cow ตรวจสอบหา UUID ของ HDD ที่ได้ เพราะบางที่ระบบก็ให้ใส่หมายเลข UUID ลงไป # blkid /dev/sda: TYPE="isw_raid_member" /dev/sdb: TYPE="isw_raid_member" /dev/sdc1: LABEL="Windows" UUID="9644EAB044EA91F3" TYPE="ntfs" /dev/sdc5: LABEL="GamesZone" UUID="D818619218617104" TYPE="ntfs" /dev/sdd1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="77d43604-9513-ea77-314d- b80b9bb291f2" LABEL="sysdisk:0" TYPE="linux_raid_member" /dev/sde1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="e28d8c4d-e604-025e-d312- ace626ede28d" LABEL="sysdisk:0" TYPE="linux_raid_member" /dev/mapper/isw_dhajaggiic_rid0md0p1: UUID="683cef23-aff9-4c19-828c-fc5ccfa027ab" TYPE="ext4" /dev/mapper/isw_dhajaggiic_rid0md0p5: UUID="ac1dad30-ac7b-410f-81bf-3d622ca2d67f" TYPE="swap" /dev/md0: LABEL="cow_raid0md0" UUID="ac1820a6-b250-468f-b0d7-4f122717f321" TYPE="ext4"
  • 57. Linux Diskless Command line - 57 # nano /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/isw_dhajaggiic_rid0md0p1 / ext4 errors=remount-ro 0 1 /dev/mapper/isw_dhajaggiic_rid0md0p5 none swap sw 0 0 /dev/md0 /cow ext4 defaults 0 2 # shutdown -r now *** หมายเหตุ เมื่อ reboot เครื่องเสร็จระบบอาจจะสร้าง Device ใหม่ จะทาให้ Raid ทีท่านได้สร้างเอาไว้ ทาการตรวจสอบ ่ # ls -l /dev/md lrwxrwxrwx 1 root root 8 Mar 6 08:50 sysdisk:0 -> ../md127 แสดงว่า Dev md เปลี่ยนเป็น md127 (ระบบจะเปลี่ยนแค่ครั้งเดียว จากนั้นก็ถาวร) ทาการตรวจสอบ UUID ใหม่ และ mount ใน fstab ใหม่ # blkid /dev/sda: TYPE="isw_raid_member" /dev/sdb: TYPE="isw_raid_member" /dev/sdc1: LABEL="Windows" UUID="9644EAB044EA91F3" TYPE="ntfs" /dev/sdc5: LABEL="GamesZone" UUID="D818619218617104" TYPE="ntfs" /dev/sdd1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="77d43604-9513-ea77-314d- b80b9bb291f2" LABEL="sysdisk:0" TYPE="linux_raid_member" /dev/sde1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="e28d8c4d-e604-025e-d312- ace626ede28d" LABEL="sysdisk:0" TYPE="linux_raid_member" /dev/md127: LABEL="cow_raid0md0" UUID="ac1820a6-b250-468f-b0d7-4f122717f321" TYPE="ext4" /dev/mapper/isw_dhajaggiic_rid0md0p1: UUID="683cef23-aff9-4c19-828c-fc5ccfa027ab" TYPE="ext4" /dev/mapper/isw_dhajaggiic_rid0md0p5: UUID="ac1dad30-ac7b-410f-81bf-3d622ca2d67f" TYPE="swap"
  • 58. Linux Diskless Command line - 58 # nano /etc/fstab เปลี่ยนค่าเข้าไปใหม่ # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/isw_dhajaggiic_rid0md0p1 / ext4 errors=remount-ro 0 1 /dev/mapper/isw_dhajaggiic_rid0md0p5 none swap sw 0 0 /dev/md127 /cow ext4 defaults 0 2 รีสตาร์ดเครื่องใหม่อีกรอบ # shutdown -r now บูตเสร็จก็ทาการตรวจสอบการเมาร์ทใหม่ # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/isw_dhajaggiic_rid0md0p1 1889916616 1480924 1792433504 1% / udev 16427084 4 16427080 1% /dev tmpfs 6574632 660 6573972 1% /run none 5120 0 5120 0% /run/lock none 16436576 0 16436576 0% /run/shm none 102400 0 102400 0% /run/user /dev/md127 1922864944 200028 1922582996 1% /cow # ls -l /dev/mapper/ total 0 crw------- 1 root root 10, 236 Mar 6 08:56 control brw-rw---- 1 root disk 252, 1 Mar 6 2013 isw_dhajaggiic_rid0md0 lrwxrwxrwx 1 root root 7 Mar 6 08:56 isw_dhajaggiic_rid0md0p1 -> ../dm-0 lrwxrwxrwx 1 root root 7 Mar 6 08:56 isw_dhajaggiic_rid0md0p2 -> ../dm-2 lrwxrwxrwx 1 root root 7 Mar 6 08:56 isw_dhajaggiic_rid0md0p5 -> ../dm-3 ***จบเรื่องการ Mount Disk
  • 59. Linux Diskless Command line - 59 *หมายเหตุ อันดับแรกต้องทาให้เครื่อง Server ออกเน็ตได้ก่อน เพื่อทาการ download package ในการติดตั้งมาลงที่ Server ตัวมันเอง
  • 60. Linux Diskless Command line - 60 # ifconfig -a ดู device การ์ดแลนทั้งหมด เพิ่มเติมเรื่องชื่อ device บางท่านอาจจะได้ชื่อ eth บางท่านก็ได้ p?p1 ท่านได้ชื่อ device ไหนก็ใช้งาน device นั้นนะครับ ไม่ต้องตามตัวอย่าง เพราะตัวอย่างได้ชื่อ p?p1 ครับ (ตัวอย่างใช้งาน Ubuntu 12.04 Server 64 bit) ในตัวอย่างจะกาหนดค่าดังนี้ แลนออนบอร์ด ชื่อ device อุปกรณ์คือ p6p1 ทาเป็นพอร์ดแจก dhcp-server ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.200 การ์ดแลนใบที่ 1 ชื่อ device อุปกรณ์คือ p1p2 ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.201 การ์ดแลนใบที่ 2 ชื่อ device อุปกรณ์คือ p2p1 ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.202 การ์ดแลนใบที่ 3 ชื่อ device อุปกรณ์คือ p3p1 ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.203 การ์ดแลนใบที่ 4 ชื่อ device อุปกรณ์คือ p5p1 ทาเป็นการ์ดแชร์ disk ให้เครื่องลูก กาหนดเป็น static ไอพี 192.168.254.204
  • 61. Linux Diskless Command line - 61 # nano /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto p6p1 iface p6p1 inet static address 192.168.254.200 netmask 255.255.255.0 network 192.168.254.0 broadcast 192.168.254.255 gateway 192.168.254.254 dns-nameservers 192.168.254.254 dns-search portspro.diskless auto p1p1 iface p1p1 inet static address 192.168.254.201 netmask 255.255.255.0 auto p2p1 iface p2p1 inet static address 192.168.254.202 netmask 255.255.255.0 auto p3p1 iface p3p1 inet static address 192.168.254.203 netmask 255.255.255.0 auto p5p1 iface p5p1 inet static address 192.168.254.204 netmask 255.255.255.0 ทาการแก้ไขค่า แล้วบันทึกออก *เนื่องจากครั้งแรกต้องใช้งานอินเตอร์เน็ตในการติดตั้ง Package จึงให้ p6p1 รับเน็ตเข้ามาก่อนโดยวิ่งเข้า Gateway เคื่องเน็ตเกมส์ 192.168.254.254
  • 62. Linux Diskless Command line - 62 จากนั้น restart service network ใหม่ # /etc/init.d/networking restart
  • 63. Linux Diskless Command line - 63 # ifconfig
  • 64. Linux Diskless Command line - 64 ทาการอัพเวลาให้ระบบให้ตรงกับปัจจุบัน # /usr/sbin/ntpdate -u pool.ntp.org ทาการอัพเดต package # sudo apt-get update # sudo apt-get install tftp-hpa tftpd-hpa xinetd # mkdir /tftpboot # sudo chown nobody.nogroup /tftpboot # sudo chmod 777 /tftpboot # sudo nano /etc/default/tftpd-hpa จากเดิม # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure" แก้เป็น โดยการเพิ่ม 2 บรรทัดลงไป และกาหนดตาแหน่ง path ไฟล์บูตให้เครื่องลูก # /etc/default/tftpd-hpa RUN_DAEMON="yes" OPTIONS="-l -s /tftpboot" TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure" # sudo /etc/init.d/tftpd-hpa start
  • 65. Linux Diskless Command line - 65 # netstat -a |grep tftp udp 0 0 *:tftp *:* สร้างไฟล์ tftp ขึ้นมาทางานร่วมกับ Service # nano /etc/xinetd.d/tftp เพิ่มคาสั่งเข้าไปในตัวไฟล์ที่สร้าง พร้อมระบุพาธ tftpboot ให้ถูกต้อง service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no } # sudo /etc/init.d/xinetd start สร้างพื้นที่สาหรับ COW # mkdir /cow Vblade # sudo apt-get install vblade # mkdir /var/run/vblade # /etc/init.d/vblade start * Starting vblade deaemons vblade
  • 66. Linux Diskless Command line - 66 undionly.kpxe เป็นไฟล์ gpxe สาหรับปล่อยให้เครื่องลูกมารับไปบูตเข้าใช้งานโอเอสจากเครื่องแม่ ทาการ download file undionly.kpxe ลงมา แล้วทาการ Upload ขึ้นไปเก็บที่ server ในตาแหน่ง /tftpboot โหลดได้ที่ http://www.mediafire.com/?tj30x1ew8jfb4c6 ก่อนจะไปขั้นตอน DHCP-Server ให้ส่วนที่เพิ่มเข้ามาใช้งานได้ก่อน ด้วยโค้ดภาษา C
  • 67. Linux Diskless Command line - 67 สร้างโค้ดภาษา C ในการใช้งาน script ให้ง่ายขึ้น # mkdir /root/tmp สามารถโหลดเป็นตัวไฟล์ แล้วทาการ Upload ขึ้นไปที่ Server ในตาแหน่ง /root/tmp/ http://www.upload-thai.com/download.php?id=118c57c1aa52375fe06445b7a20b2da4 สารอง http://www.mediafire.com/?hzvucfxqanoxyev # cd /root/tmp/ # nano execdiskless.c ในตัวโค้ดจะทาการสร้าง Device ตามโครงสร้างของ COW
  • 68. Linux Diskless Command line - 68 ทาการ compile source code ภาษาซี ด้วย gcc # sudo apt-get install gcc # gcc /root/tmp/execdiskless.c -o /root/tmp/execdiskless ทดสอบโครตภาษา C ว่าทางานถูกต้องหรือไม่ # /root/tmp/execdiskless 20 load Development ทาไฟล์ให้ใช้งานในระบบได้โดยไม่ต้องมีพาธ์ # chmod +x /root/tmp/execdiskless # cp /root/tmp/execdiskless /sbin/ จากนั้นลองพิมพ์คาสั่ง execdiskless แบบไม่ต้องมีพาธ์ # execdiskless 20 load
  • 69. Linux Diskless Command line - 69 DHCP-Server # sudo apt-get install dhcp3-server # nano /etc/default/isc-dhcp-server เพิ่ม device การ์ดแลนที่จะแชร์ disk ในตัวอย่างคือ p6p1 พร้อมกับเอาเครื่องหมาย # ออก # Defaults for isc-dhcp-server initscript # sourced by /etc/init.d/isc-dhcp-server # installed at /etc/default/isc-dhcp-server by the maintainer scripts # # This is a POSIX shell fragment # # Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). DHCPD_CONF=/etc/dhcp/dhcpd.conf # Path to dhcpd's PID file (default: /var/run/dhcpd.pid). DHCPD_PID=/var/run/dhcpd.pid # Additional options to start dhcpd with. # Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead #OPTIONS="" # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="p6p1"
  • 70. Linux Diskless Command line - 70 ปลดล็อกชุดเกราะ apparmor profile dhcpd ให้สามารถใช้งานคาสั่ง execute ที่อยู่ใน dhcpd.conf ได้ เพื่อให้คาสั่งนี้รันได้ตอนที่ทาการ แจก DHCP-Server ให้เครื่องลูกบูตแลน ในตัวโค้ตจะเป็นการ kill mapper และ kill loop รวมถึงลบไฟล์ที่เป็นขยะ อัตโนมัติ หลักๆก็คือ การทาให้เครื่องลูกคืนค่าทุกครั้งเมื่อมีการเปิดปิดเครื่อง อันดับแรกดูว่ากลุ่มของ DHCP-Server ใช้ชื่อกลุ่มว่าอะไร # cat /etc/group หาแทบไม่ยากเลย เจอทันทีบรรทัดสุดท้าย ใช้ชื่อกลุ่มว่า dhcpd
  • 71. Linux Diskless Command line - 71 # /etc/init.d/apparmor status # cat /sys/kernel/security/apparmor/profiles # sudo ln -s /etc/apparmor.d/usr.sbin.dhcpd /etc/apparmor.d/disable/usr.sbin.dhcpd # sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.dhcpd # sudo aa-status # /etc/init.d/apparmor restart ยกเลิก passwd ใน sudo # nano /etc/sudoers นาคาสั่ง dhcpd ALL=NOPASSWD: ALL ไปวางที่ท้ายไฟล์เลยครับ # /etc/init.d/sudo restart
  • 72. Linux Diskless Command line - 72 ความหมาย อาร์กิวเมนท์ execdiskless ความหมายก็ตายตัวเลยครับ ตัวอย่าง ภายในจานวณคอมทั้งหมด 20 เครื่อง ต้องการใช้งานเครื่องที่ 3 ชื่อนาหน้า PC คือ com ตาแหน่งบูต disk คือ /dev/sdb เป็น user ธรรมดา exediskless 20 com 3 /dev/sdb eth1 normal ถ้าต่อไปเป็นเครื่องที่ 4 ,5 ,6 ,7 ,8 ,9 ,10 exediskless 20 com 4 /dev/sdb eth1 normal exediskless 20 com 5 /dev/sdb eth1 normal exediskless 20 com 6 /dev/sdb eth1 normal exediskless 20 com 7 /dev/sdb eth1 normal exediskless 20 com 8 /dev/sdb eth1 normal exediskless 20 com 9 /dev/sdb eth1 normal exediskless 20 com 10 /dev/sdb eth1 normal ต่อไปเครื่องที่ 11-13 ต้องการบูตการ์ดแลนที่สอง คือ eth2 exediskless 20 com 11 /dev/sdb eth2 normal exediskless 20 com 12 /dev/sdb eth2 normal exediskless 20 com 13 /dev/sdb eth2 normal จากนั้นไปต่อที่ DHCP-Server
  • 73. Linux Diskless Command line - 73 # echo "" > /etc/dhcp/dhcpd.conf # nano /etc/dhcp/dhcpd.conf ในตัวอย่าง host ของเครื่องลูกที่นามาเป็นตัวอย่างแค่ 3 เครื่อง (copy มาทั้งหมดคงยาว) ส่วนท่านใดมีเครื่อง 4 5 6 7 n n n n .. ก็ทาการเพิ่มเองได้เลยครับ เพิ่มคาสั่งเข้าไปทั้งหมด ddns-update-style interim; #ddns-update-style none; ddns-rev-domainname "in-addr.arpa."; option domain-name "portspro.diskless"; option domain-name-servers 8.8.8.8,8.8.4.4; option ntp-servers us.pool.ntp.org; # gPXE-specific encapsulated options option space gpxe; option gpxe-encap-opts code 175 = encapsulate gpxe; option gpxe.priority code 1 = signed integer 8; option gpxe.keep-san code 8 = unsigned integer 8; option gpxe.no-pxedhcp code 176 = unsigned integer 8; option gpxe.bus-id code 177 = string; option gpxe.bios-drive code 189 = unsigned integer 8; option gpxe.username code 190 = string; option gpxe.password code 191 = string; option gpxe.reverse-username code 192 = string; option gpxe.reverse-password code 193 = string; option gpxe.version code 235 = string; ignore client-updates; update-static-leases on; use-host-decl-names on; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 192.168.254.0 netmask 255.255.255.0 { default-lease-time 43200; max-lease-time 86400; allow unknown-clients; option routers 192.168.254.254; range 192.168.254.100 192.168.254.199; }
  • 74. Linux Diskless Command line - 74 host bootdisk1 { hardware ethernet 50:e5:49:e9:95:e8; fixed-address 192.168.254.1; option host-name com1; if exists user-class and option user-class = "gPXE" { execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal"); filename ""; option root-path "aoe:e0.1"; } else { filename "undionly.kpxe"; } } host bootdisk2 { hardware ethernet 50:e5:49:e8:ee:46; fixed-address 192.168.254.2; option host-name com2; if exists user-class and option user-class = "gPXE" { execute("sudo","execdiskless","20","com","2","/dev/sdc","p5p1","normal"); filename ""; option root-path "aoe:e0.2"; } else { filename "undionly.kpxe"; } } host bootdisk3 { hardware ethernet 50:e5:49:e9:14:a0; fixed-address 192.168.254.3; option host-name com3; if exists user-class and option user-class = "gPXE" { execute("sudo","execdiskless","20","com","3","/dev/sdc","p5p1","normal"); filename ""; option root-path "aoe:e0.3"; } else { filename "undionly.kpxe"; } } *หมายเหตุ การใช้งานในโค้ด dhcpd.conf ต้องมีการใช้สิทธ์ root ก่อน จึงจะสามารถเข้าถึงไฟล์และสั่งรันได้ .. ด้วย sudo
  • 75. Linux Diskless Command line - 75 ต่อไปทาการค้นหาที่เครื่อง server ใช้ domain name ชื่ออะไร # hostname -d portspro.diskless ในอย่าง domain คือ portspro.diskless # nano +5 /etc/dhcp/dhcpd.conf # sudo /etc/init.d/isc-dhcp-server start
  • 76. Linux Diskless Command line - 76 ดู Process id อย่างง่ายด้วย HTop # sudo apt-get install htop # htop จบขั้นตอนการติดตั้งทั้งหมด สั่งเปิดเครื่องลูกเพื่อดูผลงานได้เลยครับ หน้าจอเครื่องลูกหมายเลข 17 ส่วน AoE Disk = e0.17
  • 77. Linux Diskless Command line - 77 ***เมื่อติดตั้งเสร็จเรียบร้อยทุกอย่างก็ไม่ได้ใช้งาน internet อย่าลืมไปปิดการเชื่อมต่อเน็ต ดังนี้ # nano /etc/network/interfaces นาเครื่องหมาย # ไปแทรกด้านหน้าคาสั่งแต่ล่ะบรรทัด เพื่อให้กลายเป็นคอมเมนท์ # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto p6p1 iface p6p1 inet static address 192.168.254.200 netmask 255.255.255.0 #network 192.168.254.0 #broadcast 192.168.254.255 #gateway 192.168.254.254 #dns-nameservers 192.168.254.254 #dns-search portspro.diskless auto p1p1 iface p1p1 inet static address 192.168.254.201 netmask 255.255.255.0 auto p2p1 iface p2p1 inet static address 192.168.254.202 netmask 255.255.255.0 auto p3p1 iface p3p1 inet static address 192.168.254.203 netmask 255.255.255.0 auto p5p1 iface p5p1 inet static address 192.168.254.204 netmask 255.255.255.0
  • 78. Linux Diskless Command line - 78 # /etc/init.d/networking restart เมื่อไม่ได้ใช้งานอินเตอร์เน็ตก็ปิด Bind9 ไปได้เลย # /etc/init.d/bind9 stop # nano /etc/rc.local เพิ่มคาสั่งเข้าไปเมื่อบูตเข้าระบบทุกครั้งจะปิด bind9 ทันที #!/bin/sh -e # /etc/init.d/bind9 stop exit 0 # shutdown -r now
  • 79. Linux Diskless Command line - 79 SUPER USER กับ AoE e0.0 ในตัวโค้ดบังครับให้ทา super user ใน aoe 0 0 เท่านั้น เพื่อป้องกันการหลงลืม ในขณะที่เลิกเป็น super user แต่ลืมไปแก้ไขคาสั่งให้เป็น user normal จึงออกแบบโค้ดไม่ให้ระบบไปกระทากับ hdd img โดยตรง .. กรณีลืมจริงๆ ป้องกันได้ ขั้นตอนไม่ยาก ทาการแก้ไขที่ไฟล์ dhcpd.conf ยกตัวอย่างเช่น โค้ดในไฟล์ dhcpd.conf ตัวอย่างแรกเครื่องหมายเลข 1 เป็น User normal ใช้งานคืนค่าธรรมดา host bootdisk1 { hardware ethernet 50:e5:49:e9:95:e8; fixed-address 192.168.254.1; option host-name com1; if exists user-class and option user-class = "gPXE" { execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal"); filename ""; option root-path "aoe:e0.1"; } else { filename "undionly.kpxe"; } } เมื่อต้องเป็น Super User ก็เปลี่ยนแค่ normal เป็น super และเป็น aoe:e0.1 ไปเป็น aoe:e0.0 แค่นั้น ตัวอย่าง Super User host bootdisk1 { hardware ethernet 50:e5:49:e9:95:e8; fixed-address 192.168.254.1; option host-name com1; if exists user-class and option user-class = "gPXE" { execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","super"); filename ""; option root-path "aoe:e0.0"; } else { filename "undionly.kpxe"; } }
  • 80. Linux Diskless Command line - 80 จากนั้นทาการ reload service dhcpd ด้วยสั่ง force-reload เท่านั้น ถ้า restart เฉยๆ อาจจะทาให้เครื่องอื่นที่กาลังเล่นอยู่กระตุกนาน หรืออาจจะค้างไปเลย ต้องบอกให้คนเล่น reboot เครื่องนั้นใหม่ เสียชื่อร้านแน่ๆครับ ตัวอย่างคาสั่ง # /etc/init.d/isc-dhcp-server force-reload
  • 81. Linux Diskless Command line - 81 ทาการเปิดเครื่องลูกแล้วบูตแลน เพื่อดูสถานะ super user บน aoe e0.0 ในรูป นับจากบรรทัดล่างขึ้นบน บรรทัดที่ 3 จะเห็นว่าบรรทัดนี้แสดงคาว่า Booting from root path “aoe:e0.0” หมายถึงสถานะ super เครื่องลูกบูตเข้า Windows พร้อมใช้งานเรียบร้อยแล้ว เมื่อเป็น Super User แล้ว ห้ามลืมเด็ดขาด ! ต้องเข้าไปดูใน Manage ว่า AoE Disk ที่ใช้งานอยู่คือ e0.0 หรือไม่
  • 82. Linux Diskless Command line - 82 AoE Disk Properties ตรง Location ต้องเท่ากับ AoE e0.0 ดังรูป
  • 83. Linux Diskless Command line - 83 เมื่อต้องการให้เครื่องหมายเลข 1 เป็น User normal ใช้งานคืนค่าธรรมดาแบบเดิม ก็ทาการแก้ไขไฟล์ dhcpd.conf ใส่ normal และ aoe:e0.1 กลับเป็นเหมือนเดิม ตัวอย่างการกลับมาเป็น User normal ธรรมดา host bootdisk1 { hardware ethernet 50:e5:49:e9:95:e8; fixed-address 192.168.254.1; option host-name com1; if exists user-class and option user-class = "gPXE" { execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal"); filename ""; option root-path "aoe:e0.1"; } else { filename "undionly.kpxe"; } } จากนั้นก็ dhcpd force-reload อีกครั้ง # /etc/init.d/isc-dhcp-server force-reload เมื่อกลับมาใช้งานเป็น normal เข้าไปดู Manage อีกครั้ง AoE Disk ก็จะเป็น AoE e0.17
  • 84. Linux Diskless Command line - 84 Block Device สาหรับทา Image โดยการให้เครื่องลูก Upload OS ขึ้นมา Server ด้วยโปรแกรม Ghost 32 *แนะนา ขั้นตอนนี้ต้องทาความเข้าใจพอสมควร ไฟล์อาจเกิดการ NULL หรือ ว่างเปล่า ได้ ทั้งๆที่ข้อมูลก็มีอยู่แล้ว .. ส่วนนี้แนะนานักพัฒนาระบบ เขียนโปรแกรมจัดการป้องกันเพิ่มขึ้นเองเลยครับ # mkdir /root/tmp Download แบบไฟล์โค้ด แล้ว upload ไปไว้ที่ /root/tmp/ http://www.mediafire.com/?p3m2cskl9jdt2mb สารอง http://www.upload-thai.com/download.php?id=29894712204db04f607c0fc2b3b1798a จากนั้น compile code และให้สิทธ์ execute # gcc /root/tmp/makeimg.c -o /root/tmp/makeimg # chmod +x /root/tmp/makeimg # cp /root/tmp/makeimg /sbin/ ทดสอบ ต้องการจองพื้นที่ขนาด 12 GB สาหรับทา Image ไฟล์จากเครื่องลูก เก็บไฟล์ไว้ที่ /mnt/ มีชื่อไฟล์ว่า imgxp และใช้งานหมายเลข AoE Disk ที่ 231 แชร์ disk ด้วย eth1 # makeimg 12 imgxp /mnt/ 231 eth1
  • 85. Linux Diskless Command line - 85 *หมายเหตุ ในการใส่ตาแหน่ง path ที่เก็บไฟล์อิมเมจ ต้องมีเคื่องหมาย / ปิดพาธ์นั้นทุกครั้ง เช่น ตัวอย่างพาธ์ /mnt/img/img_xp ต้องระบุพาธ์ /mnt/img/ เมื่อเครื่องแม่ปล่อย Image ไปทาง AoE หมายเลข 231 เรียบร้อยแล้ว ทางฝั่งเครื่องลูกต้องไปรับ Disk ทาง AoE หมายเลข 231 เช่นกัน
  • 86. Linux Diskless Command line - 86 ในขั้นตอนนี้เครื่องลูกต้องอยู่ในวงแลนของเครื่องแม่ที่แจก dhcp-server ตัวอย่าง และเทคนิดโดยไม่ต้องไปแก้ไขไฟล์ dhcpd.conf ผมใช้งานเครื่องลูกที่เป็นระบบ Diskless อยู่ โดยใช้งาน aoe หมายเลข e0.17 จะไปทาการ mount disk จากเครื่องแม่ที่ปล่อยหลายเลข Image ทาง aoe หมายเลข 222 ภาพจากเครื่องลูกก่อนที่จะทาการ mount disk อีก aoe disk เข้ามาอีก 1 disk สร้าง disk ขนาด 99gb ชื่อไฟล์ imgxp เก็บไว้ที่พาธ์ /mnt/img/ ปล่อยออกหมายเลข aoe ที่ 222 และแชร์ disk ออกทางแลนการ์ด p3p1 ดูไฟล์ Image ที่สร้างชื่อ imgxp
  • 87. Linux Diskless Command line - 87 กลับมาต่อที่เครื่องลูกเพื่อ aoe scan ในรูปตัวอย่างจะเห็นว่าใช้คาสั่ง aoe scan แล้วไม่มี Disk หมายเลข 222 ออกมาแสดงโชว์เลย ไม่ต้องกังวลเมื่อท่านมั่นใจแล้วว่าได้ส่ง Image หมายเลข 222 มาที่เครื่องลูกแล้ว และเครื่องลูกก็ใช้งาน dhcp-server จากเครื่องแม่แล้ว ทาการ mount disk หมายเลข 222 โดยตรงเลยครับ ในรูปเป็นการ mount aoe disk โดยตรง ที่ Computer Management ในช่องด้านขวามือ –Disk drives ก็จะมี AoE Disk ขึ้นมาโชว์อีกตัว คือหมายเลข AoE e0.222
  • 88. Linux Diskless Command line - 88 ที่ Computer Management ด้านซ้ายมือเลือก Disk Management ก็จะมี Disk ตัวใหม่เกิดขึ้นมาให้สร้าง ดังรูป ทาการสร้าง Partition
  • 89. Linux Diskless Command line - 89 ของใหม่ก็จะมาดังรูป เมื่อทาเสร็จทุกครั้งอย่าลืมเปลี่ยนชื่อ Image เป็นชื่ออื่นน่ะครับ เพื่อความปลอดภาพของข้อมูลที่เสียเวลา Upload ด้วย Ghost32 และทาการฆ่า PID ของ Image ที่สร้างด้วย จากนั้นมาที่เครื่องแม่เพื่อใช้งาน execdiskless สาหรับ Image ของใหม่ที่ทามาสดๆร้อนๆ โดยการแก้ไขไฟล์ dhcpd.conf เพื่อบูต Disk แบบ Image หมายเลข aoe ก็ใช้งานตามลาดับหมายเลขเครื่องคอมเลยนะครับ โปรแกรม execdiskless จะจัดการให้เองอัตโนมัต จากนั้น reload # /etc/init.d/isc-dhcp-server force-reload
  • 90. Linux Diskless Command line - 90 ทุกครั้งที่ทาการ Upload Image เสร็จ อย่าลืม kill pid ทุกครั้ง เพื่อลดภาวะโปรเซสทางานโดยเปล่าประโยชน์ kill ตามด้วยชื่อ และพาธ์ # makeimg kill imgxp /mnt/ *บังคับ เมื่อทาไฟล์ Image และเครื่องลูก Upload OS มาเรียบร้อยแล้ว ทาการเปลี่ยนชื่อ Img ที่พาธ์นั้นใหม่ เพื่อป้องกันการสร้างไฟล์ซ้า รวมถึงหมายเลข AoE ซ้ากัน ซึ่งจะทาให้ข้อมูลที่ทามาเกิด NULL ขึ้นมาได้ # mv /mnt/imgxp /mnt/imgxp12gb *กรณีที่ไม่ต้องการใช้งานไฟล์ Image แบบถาวร หรืออาจจะต้องการทา Image ใหม่ ต้องการลบตัวเก่าทิ้ง ก็ใช้คาสั่ง rm -rf <ตามด้วยพาธ์และชื่อไฟล์> แบบธรรมดาทั่วไป # rm -rf /mnt/imgxp12gb *ต้องการดู PID ของ Vblade ที่ยังตกค้างอยู่ใน /mnt/ # lsof /mnt/* # ps aux|grep vblade ***ส่วนขั้นตอนการ upload image จากเครื่องลูกขึ้นเครื่องแม่นั้นจะอยู่ในขั้นตอน การทดลองอย่างง่ายในหน้าช่วงแรกๆอยู่แล้ว
  • 91. Linux Diskless Command line - 91 ลดภาระการทางาน CPU และ RAM ขั้นตอนนี้จะเพิ่มพื้นที่ให้หน่วยความจามีพื้นที่ทางานได้มากขึ้น ในขณะที่PID ของ vblade ทางานโดยเปล่าประโยชน์ ทั้งๆที่เครื่องลูกเครื่องนั้นปิดไปแล้ว ตัวอย่างการดู pid อย่างละเอียดด้วย htop # htop แล้วกดแป้น F3 แล้วพิมพ์ชื่อ pid ที่จะค้นหา คือ vblade แล้ว F3 ไปเรื่อยๆจนกว่าจะจบลูป จะทาการสร้าง shell script linux เพื่อทาการอ่านค่า IP address จาก text file ชื่อ pingip.txt โดยพาธ์อยู่ที่ /root/tmp/ # touch /root/tmp/pingip.txt จากนั้นทาการใส่หมายเลขไอพีของเครื่องลูกลงไปตามลาดับ ตัวอย่าง มีคอมสูงสุด 20 เครื่อง โดยที่ไอพีวงแลนของเครื่องลูก ที่เครื่องแม่แจกแบบ fix ip ให้ ระหว่าง 192.168.254.1 – 192.168.254.20 จุดสุดท้ายใช้งานตามหมายเลขเครื่องลูก
  • 92. Linux Diskless Command line - 92 # nano /root/tmp/pingip.txt ใส่หมายเลขไอพีเครื่องตามลาดับเครื่องลงไป ห้ามนับผิดเด็ดขาด ต้องตามลาดับ 1 ,2 ,3 ,4 ,5 ,n n n ไม่งั้น script จะไป kill pid ผิดครับ 192.168.254.1 192.168.254.2 192.168.254.3 192.168.254.4 192.168.254.5 192.168.254.6 192.168.254.7 192.168.254.8 192.168.254.9 192.168.254.10 192.168.254.11 192.168.254.12 192.168.254.13 192.168.254.14 192.168.254.15 192.168.254.16 192.168.254.17 192.168.254.18 192.168.254.19 192.168.254.20
  • 93. Linux Diskless Command line - 93 สร้าง shell script บน linux เพื่อไปอ่านค่าไอพีเข้ามา แล้วตรวจสอบว่าเครื่องลูกเครื่องไหนปิดใช้งานไปแล้ว เครื่องไหนปิดก็ทาการ kill pid vblade และ loop ทิ้งไปเลย # nano /root/tmp/pingipdown.sh Copy คาสั่ง script ลงไปหมดเลยครับ #!/bin/bash NAME="com" NUMREC=0 SOURCE=0 DEST=0 # no ping request COUNT=10 # add ip / hostname separated by white space for myHost in cat `cat /root/tmp/pingip.txt` do count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') if [ "$count" = 0 ]; then #100% failed kill -9 `lsof /dev/mapper/$NAME$NUMREC` dmsetup remove --force /dev/mapper/$NAME$NUMREC losetup --detach /dev/loop$SOURCE losetup --detach /dev/loop$DEST rm -rf /dev/loop$SOURCE rm -rf /dev/loop$DEST rm -rf /cow/$NAME$NUMREC echo "ping ip $myHost <OFF> [$NAME$NUMREC] !" echo "DEL Loop $SOURCE <-> $DEST" else echo "ping ip $myHost <ON> [$NAME$NUMREC]" fi let NUMREC=NUMREC+1 let DEST=NUMREC-1 let SOURCE=NUMREC+DEST let DEST=SOURCE+1 done # show device dmsetup and losetup dmsetup table losetup -a
  • 94. Linux Diskless Command line - 94 ทาการแก้ไขบรรทัดที่ 3 เพื่อเปลี่ยนชื่อเครื่องคอมที่ท่านใช้งานตาม device mapper ในตัวอย่างใช้ชื่อ com # nano +3 /root/tmp/pingipdown.sh แก้ให้เป็นชื่อคอมที่ใช้งาน NAME="com" # nano +9 /root/tmp/pingipdown.sh บรรทัดนี้ระยะเวลาในการ ping แต่ละ ip หรือจานวณ count request ในการตรวจสอบ ถ้าใช้งานค่า 1 ระบบก็จะ ping เร็วต่อครั้ง COUNT=10 ทดสอบรัน # chmod +x /root/tmp/pingipdown.sh # bash /root/tmp/pingipdown.sh
  • 95. Linux Diskless Command line - 95 ตั้งเวลารัน script เพื่อตรวจสอบไอพีที่ปิดเครื่องไปทุกๆ 5 นาที บน crontab ใช้งานในสิทธ์ root # nano /etc/crontab เพิ่มคาสั่งเข้าไปที่ท้ายไฟล์ */5 * * * * root /root/tmp/pingipdown.sh
  • 96. Linux Diskless Command line - 96 RC.local ขั้นตอนนี้ไม่ได้สาคัญอะไรมาก กรณีที่ท่านเกิดเหตุการ Server ดับ ในขณะที่กาลังแชร์ Disk ให้เครื่องลูกใช้งานอยู่ .. เมื่อท่านเปิดเครื่อง Server ขึ้นมาใหม่ แต่เครื่องลูกค้างไปแล้ว ในขั้นตอนนี้ ถ้าต้องการให้เครื่องลูกที่ค้าง ใช้งานได้ต่อเมื่อเครื่องแม่บูตเข้าระบบเรียบร้อยแล้ว โดยที่เครื่องลูกไม่ต้อง restart เครื่องใหม่ (ส่วนใหญ่จะเกิดกับร้านเล็กๆ) ให้เพิ่มคาสั่งรันระบบแชร์ disk อัตโนมัตใน /etc/rc.local # nano /etc/rc.local เพิ่มคาสั่งลงไปกับจานวณเครื่อง exediskless 5 com 1 /dev/sdb eth1 normal exediskless 5 com 2 /dev/sdb eth1 normal exediskless 5 com 3 /dev/sdb eth2 normal exediskless 5 com 4 /dev/sdb eth1 normal exediskless 5 com 5 /dev/sdb eth3 normal /etc/init.d/bind9 stop exit 0 *แนะนา ต้องให้คาสั่งในไฟล์ตรงกันกับไฟล์ dhcpd.conf ว่าการ์ดแลนหมายเลขอะไร ที่ใช้แชร์ Disk ออกไปให้แต่ล่ะเครื่อง *หมายเหตุ ห้ามนาคาสั่ง /usr/sbin/ntpdate -u pool.ntp.org มาไว้ใน /etc/rc.local เป็นคาสั่งแรกเด็ดขาด เพราะในตัวอย่างคู่มือ ไม่ได้ทาให้เครื่อง Server ออกเน็ตได้ .. ถ้ามีคาสั่งนี้เข้ามาก่อนคาสั่งอื่นในไฟล์ rc.local พอระบบเจอคาสั่งนี้แต่ออกเน็ตไม่ได้ ระบบจะแจ้งว่าคาสั่งล้มเหล้ว ระบบจะหยุดการรัน script ในไฟล์ /etc/rc.local ทั้งหมดทันที จะทาให้คาสั่งถัดไปไม่ได้ถูกรันและใช้งานทันที แบบแรก usr/sbin/ntpdate -u pool.ntp.org <------------------------------- ห้ามเด็ดขาด exediskless 5 com 1 /dev/sdb eth1 normal exediskless 5 com 2 /dev/sdb eth1 normal exediskless 5 com 3 /dev/sdb eth2 normal exediskless 5 com 4 /dev/sdb eth1 normal exediskless 5 com 5 /dev/sdb eth3 normal /etc/init.d/bind9 stop exit 0
  • 97. Linux Diskless Command line - 97 แบบที่สอง exediskless 5 com 1 /dev/sdb eth1 normal exediskless 5 com 2 /dev/sdb eth1 normal exediskless 5 com 3 /dev/sdb eth2 normal exediskless 5 com 4 /dev/sdb eth1 normal exediskless 5 com 5 /dev/sdb eth3 normal /etc/init.d/bind9 stop usr/sbin/ntpdate -u pool.ntp.org <------------------------------- แนะนาครับ exit 0 แบบที่สองถูกต้องครับ ถ้าคาสั่งไหนไม่แน่ใจว่าจะใช้งานได้ 100% ก็เอามาใส่เหมือนใน แบบที่สองได้เลย เพราะแบบที่สองเป็นการรันลาดับสุดท้ายในไฟล์ /etc/rc.local ถึงคาสั่งจะล้มเหล้วก็ไม่เป็นไร เพราะไม่มีคาสั่งรันต่อท้ายแล้ว
  • 98. Linux Diskless Command line - 98 ไฟล์ .BAT สาหรับ Startup Windows เพื่อ Rename ชื่อเครื่องตอนเข้า Windows ชื่อไฟล์ rename.bat @echo on @echo Windows XP for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IP Address"') do set IP=%%b for /f "tokens=1-4 delims=." %%a in ("%IP%") do set IP=%%d echo %IP% @echo off set computername=COM-%IP% reg delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /f reg delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /f reg add "hklmSYSTEMCurrentControlSetControlComputerNameComputerName" /v "ComputerName" /d "%computername%" /f reg add "hklmSYSTEMCurrentControlSetControlComputerNameActiveComputerName" /v "ComputerName" /d "%computername%" /f reg add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /d "%computername%" /f reg add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /d "%computername%" /f แบบที่สอง @echo on @echo Windows 7 for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4 Address"') do set IP=%%b for /f "tokens=1-4 delims=." %%a in ("%IP%") do set IP=%%d echo %IP% @echo off set computername=COM-%IP% reg delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /f reg delete "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /f reg add "hklmSYSTEMCurrentControlSetControlComputerNameComputerName" /v "ComputerName" /d "%computername%" /f reg add "hklmSYSTEMCurrentControlSetControlComputerNameActiveComputerName" /v "ComputerName" /d "%computername%" /f reg add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "Hostname" /d "%computername%" /f reg add "hklmSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /d "%computername%" /f
  • 99. Linux Diskless Command line - 99 *เพิ่มเติมครับ บางท่านอาจจะใช้ IP ไม่เหมือนในคู่มือตัวอย่าง ส่วนใหญ่ที่เห็นใช้งานกันก็จะเป็น IP 192.168.1.254 สาหรับออกเน็ต และ IP ที่ Fix ให้เครื่องลูกก็จะเป็น 192.168.1.1 ,192.168.1.2 ,192.168.1.3 ,192.168.1.4 ,192.168.1.x ตามจาเครื่องในร้านที่มี ถ้าต้องการใช้งานตามค่า ip ในแบบของท่านก็ไปแก้ไข # nano /etc/network/interfaces ในส่วนนี้จะเป็นการกาหนดหมายเลข ip ให้การ์ดแลนตาม ip ของร้านท่านใช้งาน แล้วระบุเป็น ip ของร้านท่าน auto p1p1 iface p1p1 inet static address 192.168.1.201 netmask 255.255.255.0 วิธีทาจะเหมือนในตัวอย่างการทดลองอย่างง่ายในช่วงแรกๆ ของคู่มือ
  • 100. Linux Diskless Command line - 100 จากนั้นก็ไฟล์ dhcpd.conf แก้ไข ip เครื่องลูกให้ใช้งานตาม ip ร้าน # nano /etc/dhcp/dhcpd.conf ตัวอย่างการกาหนด Gateway ไปที่ ip ออกเน็ต และ ip ที่ใช้งานในร้าน ไปที่บรรทัด subnet subnet 192.168.1.0 netmask 255.255.255.0 { default-lease-time 43200; max-lease-time 86400; allow unknown-clients; option routers 192.168.1.254; ------------ IP Gateway ใช้ออกเน็ต range 192.168.1.100 192.168.1.199; ---------- แจกแบบ auto สาหรับใช้งานอย่างอื่น (Authentication) } host bootdisk1 { hardware ethernet 50:e5:49:e9:95:e8; fixed-address 192.168.1.1; ----------- IP ที่ fix ให้เครื่องลูก ตาม ip ร้าน option host-name com1; if exists user-class and option user-class = "gPXE" { execute("sudo","execdiskless","17","com","1","/dev/sdc","p5p1","normal"); filename ""; option root-path "aoe:e0.1"; } else { filename "undionly.kpxe"; } }
  • 101. Linux Diskless Command line - 101 จากนั้นก็ต่อด้วย text file สาหรับการตรวจสอบ ip เครื่องลูกที่ไม่ได้ใช้งานแล้ว # nano /root/tmp/pingip.txt แก้เป็น ip ตามร้านใช้งาน 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5
  • 102. Linux Diskless Command line - 102 จบแล้วค่ะ