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
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"
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
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 ตามรูปภาพเลยครับ
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 ที่สร้างขึ้นมาใหม่
33. Linux Diskless Command line - 33
ขั้นตอนการเลือก Drive letter ส่วนตัวผมชอบสร้างที่ drive Z เพราะมันแตกต่างดี
File system จะเป็นอะไรก็ได้ แต่แนะนา NTFS ส่วนตัวอย่างเครื่องทดลองไม่แรง จึงใช้ FAT32
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
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
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 ตัวมันเอง
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
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"
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
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
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
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
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