ปรับแต่งเครื่องลูกขณะบูต

จาก NakhonNet
ข้ามไปยัง: นำทาง, ค้นหา

ในขณะที่เครื่องลูกบูตเครื่อง เราสามารถปรับแต่งระบบเพื่อให้เหมาะสมกับเครื่องลูกแต่ละเครื่องได้ ทั้งนี้ การปรับแต่งสามารถทำได้ใน 2 ขั้นตอน คือ ก่อนผู้ใช้ Login และหลังผู้ใช้ Login

หลักการทำงาน

เมื่อวินโดวส์บูตเครื่อง จะมีการอ่านสคริปต์ต่างๆ ขึ้นมาทำงาน โดยในที่นี้จะเขียนสคริปต์ Batch File สั้นๆ ให้ไปดึงสคริปต์คำสั่งมาจากเซิร์ฟเวอร์อีกที เพื่อให้สะดวกในการปรับแต่สคริปต์โดยไม่ต้องแก้ไขไฟล์ Image

ในที่นี้จะใช้ชื่อโฟลเดอร์ และชื่อไฟล์ดังนี้

เครื่องลูก เครื่องเซิร์ฟเวอร์
โฟลเดอร์เก็บโปรแกรม C:\install /www/diskserv/app/webroot
ไฟล์ทำงานก่อน Login startup.bat startup.php
ไฟล์ทำงานหลัง Login logon.bat logon.php

หากต้องการใช้ชื่ออื่นก็สามารถทำได้ โดยแก้ไขชื่อโฟลเดอร์ และชื่อไฟล์ให้ตรงกัน

การดาวน์โหลดสคริปต์จากเซิร์ฟเวอร์

การดาวน์โหลดสคริปต์จากเซิร์ฟเวอร์จะใช้โปรแกรม wget ซึ่งเป็นโปรแกรมฟรีที่สามารถดาวน์ได้จากรายการในหน้า Software เมื่อดาวน์โหลดแล้วให้เก็บไว้ในโฟลเดอร์ C:\install

Batch File

Batch file สำหรับดึงสคริปต์จากเซิร์ฟเวอร์ แล้วเรียกใช้สคริปต์ดังกล่าว และลบสคริปต์ทิ้งเมื่อทำงานเสร็จ

สำหรับการทำงานก่อน Login

@echo off
c:
cd \install
wget -q -O runstartup.bat http://diskserv.localnet/startup.php
runstartup.bat
del runstartup.bat

ให้บันทึกไฟล์นี้ในโฟลเดอร์ C:\install โดยใช้ชื่อ startup.bat

สำหรับการทำงานหลัง Login

@echo off
c:
cd \install
wget -q -O runlogon.bat http://diskserv.localnet/logon.php
runlogon.bat
del runlogon.bat

ให้บันทึกไฟล์นี้ในโฟลเดอร์ C:\install โดยใช้ชื่อ logon.bat

การเรียกใช้งาน

การกำหนดให้วินโดวส์เรียกใช้ Batch File ที่สร้างขึ้นในขั้นตอนก่อน และหลัง Login สามารถทำได้ดังนี้

  • คลิกปุ่ม Start คลิกเมนู Run...
  • พิมพ์คำสั่ง gpedit.msc แล้วกดปุ่ม Enter
  • จะเป็นการเรียกโปรแกรม Group Policy ขึ้นมาทำงานดังรูป
Gpedit.png
  • การกำหนดให้เรียก Batch File ก่อน Login มีขั้นตอนดังนี้
    • เข้าเมนู Local Computer Policy -> Computer Configuration -> Windows Settings -> Scripts (Startup/Shutdown) ดังรูปข้างต้น
    • แผงด้านขวาจะแสดงรายชื่อการทำงาน ซึ่งมี 2 รายการคือ Startup และ Shutdown
    • ดับเบิลคลิกที่ Startup โปรแกรมจะแสดงรายชื่อสคริปต์ที่ทำงานขณะ Startup (ก่อน Login) ซึ่งจะยังไม่มีรายการใดๆ
    • คลิกปุ่ม Add แล้วพิมพ์ c:\install\startup.bat ในช่อง Script Name แล้วคลิกปุ่ม OK
    • โปรแกรมจะกลับมาหน้าแสดงรายชื่อสคริปต์อีกครั้งโดยที่มีสคริปต์ที่เพิ่งเพิ่มเข้าไป ให้คลิกปุ่ม OK เพื่อกลับไปหน้าจอ Group Policy
  • การกำหนดให้เรียก Batch File หลัง Login มีขั้นตอนดังนี้
    • เข้าเมนู Local Computer Policy -> User Configuration -> Windows Settings -> Scripts (Logon/Logoff ดังรูปข้างต้น
    • แผงด้านขวาจะแสดงรายชื่อการทำงาน ซึ่งมี 2 รายการคือ Logon และ Logoff
    • ดับเบิลคลิกที่ Logon โปรแกรมจะแสดงรายชื่อสคริปต์ที่ทำงานขณะ Logon (หลัง Login) ซึ่งจะยังไม่มีรายการใดๆ
    • คลิกปุ่ม Add แล้วพิมพ์ c:\install\logon.bat ในช่อง Script Name แล้วคลิกปุ่ม OK
    • โปรแกรมจะกลับมาหน้าแสดงรายชื่อสคริปต์อีกครั้งโดยที่มีสคริปต์ที่เพิ่งเพิ่มเข้าไป ให้คลิกปุ่ม OK เพื่อกลับไปหน้าจอ Group Policy

โปรแกรมในเซิร์ฟเวอร์

ในเซิร์ฟเวอร์จะต้องมีโปรแกรมรองรับการเรียกใช้จากเครื่องลูก โดยมีหลักการทำงานดังนี้

  • ตรวจสอบ IP ของเครื่องลูก
  • ส่งสคริปต์ที่เหมาะสมให้เครื่องลูก

การปรับแต่งก่อนผู้ใช้ Login

การปรับแต่งเครื่องลูกก่อนผู้ใช้ Login จะเป็นการปรับแต่งที่ระบบโดยตรง เช่น

  • ปรับขนาดของจอภาพ
  • สร้าง Virtual Memory Paging File
  • ลบโปรแกรม (กรณีซื้อสิทธิ์การใช้ไม่ครบทุกเครื่อง)

ตัวอย่างสถาณการณ์

สมมติว่าในจำนวน 10 เครื่อง มีส่วนประกอบที่แตกต่างกันบ้าง ดังนี้

  • ซื้อลิขสิทธิ์ Microsoft Office มา 5 ชุด โดยให้ใช้ได้เฉพาะเครื่อง 1 - 5 เท่านั้น
  • เครื่อง 6 - 10 มีหน่วยความจำน้อยกว่าเครื่อง 1 - 5 จึงต้องทำ Virtual Memory ที่เครื่อง 6 - 10 ด้วย
  • จอของแต่ละเครื่องมีความแตกต่างกันดังนี้
    • เครื่อง 1 - 5 เป็นจอ LED 23 นิ้ว ความละเอียด 1920 x 1080
    • เครื่อง 6 - 8 เป็นจอ LCD 20 นิ้ว ความละเอียด 1600 x 900
    • เครื่อง 9 เป็นจอ LCD 17 นิ้ว ความละเอียด 1280 x 1024
    • เครื่อง 10 เป็นจอ CRT 17 นิ้ว ความละเอียด 1024 x 768

ตัวอย่างไฟล์

จากเงื่อนไขข้างต้น สามารถสร้างไฟล์ startup.php ได้ดังนี้

<?php
/*
 * Script for run commands on client machine after boot
 * - delete certain item base on client's IP
 * - setup virtual memory swap file
 */

// Get client IP
$ip = $_SERVER['REMOTE_ADDR'];

// Configurations
// Delete files, folders
$file_lists = array(
  1 => array(
    array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Excel.lnk'),
    array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft PowerPoint.lnk'),
    array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Word.lnk'),
    array('type' => 'D', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Office Tools'),
    array('type' => 'D', 'name' => 'C:\Program Files\Microsoft Office')
  )
);
$computer_cleans = array(
  '192.168.2.6' => 1,
  '192.168.2.7' => 1,
  '192.168.2.8' => 1,
  '192.168.2.9' => 1,
  '192.168.2.10' => 1
);

// Create paging file
$create_swap = array(
  '192.168.2.6',
  '192.168.2.7',
  '192.168.2.8',
  '192.168.2.9',
  '192.168.2.10'
);

// Set screen resolution
$resolutions = array(
  '1024x768' => 'h1024 v768 b32 f70',
  '1280x1024' => 'h1280 v1024 b32 f60',
  '1600x900' => 'h1600 v900 b32 f60',
  '1920x1080' => 'h1920 v1080 b32 f60'
);
$computer_resolutions = array(
  '192.168.2.1' => '1920x1080',
  '192.168.2.2' => '1920x1080',
  '192.168.2.3' => '1920x1080',
  '192.168.2.4' => '1920x1080',
  '192.168.2.5' => '1920x1080',
  '192.168.2.6' => '1600x900',
  '192.168.2.7' => '1600x900',
  '192.168.2.8' => '1600x900',
  '192.168.2.9' => '1280x1024',
  '192.168.2.10' => '1024x768'
);

// Print script
// Hide command 
echo "@echo off\n";

// Delete files, folders
if (!empty($file_lists[$computer_cleans[$ip]])) {
  foreach ($file_lists[$computer_cleans[$ip]] as $file) {
    if ($file['type'] == 'F') {
      echo "del /q /f \"{$file['name']}\"\n";
    } else {
      echo "rmdir /q /s \"{$file['name']}\"\n";
    }
  }
}

// Create paging file
if (in_array($ip, $create_swap)) {
  echo "cscript //h:cscript //s\n";
  echo "pagefileconfig /create /i 1536 /m 1536 /vo c:\n";
}

// Set screen resolution
if (!empty($resolutions[$computer_resolutions[$ip]])) {
  echo "setres {$resolutions[$computer_resolutions[$ip]]}\n";
}

ไฟล์ startup.php จะแบ่งเป็น 2 ส่วนหลักๆ คือ

  1. Configurations
  2. Print script

โดยแต่ละส่วนจะแยกเป็น 3 ส่วนย่อยเพื่อทำงานดังนี้

  1. Delete files, folders - เพื่อลบไฟล์ และโฟลเดอร์ที่ระบุ ในเครื่องที่กำหนด
  2. Create paging file - เพื่อสร้าง Virtual Memory ในเครื่องที่กำหนด
  3. Set screen resolution - เพื่อกำหนดความละเอียดหน้าจอของแต่ละเครื่อง

ในการใช้ไฟล์นี้ ให้แก้ไขเฉพาะในส่วน Configurations เท่านั้น แต่ถ้าต้องการเพิ่มเติมความสามารถของสคริปต์ ก็สามารถทำได้ตามต้องการ

ลบไฟล์, โฟลเดอร์

จากตัวอย่าง จะต้องลบไฟล์ของ Microsoft Office มีการกำหนดค่า 2 ส่วน

ส่วนแรกเป็นการระบุไฟล์ และโฟลเดอร์ที่จะลบ ดังนี้

$file_lists = array(
  1 => array(
    array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Excel.lnk'),
    array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft PowerPoint.lnk'),
    array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Word.lnk'),
    array('type' => 'D', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Office Tools'),
    array('type' => 'D', 'name' => 'C:\Program Files\Microsoft Office')
  )
);
  • บรรทัดแรกเป็นตัวแปรที่เก็บ config นี้ ห้ามแก้ไข
  • บรรทัดที่สองเป็นรูปแบบที่ต้องการลบ ในที่นี้มีเพียงแบบเดียว ก็ใช้เลข 1
  • บรรทัดที่ 3 - 7 เป็นรายชื่อไฟล์ และโฟลเดอร์ที่ต้องการลบ โดยมีรูปแบบดังนี้
    • type เป็น F หมายถึงการลบไฟล์, type เป็น D หมายถึงการลบโฟลเดอร์ (Directory)
    • name คือชื่อไฟล์ หรือโฟลเดอร์ที่ต้องการลบ

ในที่นี้จะลบรายการใน Start Menu ซึ่งมี 4 รายการ และลบโฟลเดอร์โปรแกรม Microsoft Office

ส่วนที่สองเป็นการระบุว่าจะให้ลบในเครื่องใดบ้าง ดังนี้

$computer_cleans = array(
  '192.168.2.6' => 1,
  '192.168.2.7' => 1,
  '192.168.2.8' => 1,
  '192.168.2.9' => 1,
  '192.168.2.10' => 1
);

จะเป็นการระบุว่า เครื่อง 192.168.2.6 จนถึงเครื่อง 192.168.2.10 ให้ลบไฟล์ตามรูปแบบ 1

คำเตือน การปรับปรุง Image (การ Merge) ห้ามทำจากเครื่องที่มีการลบไฟล์/โฟลเดอร์ เพราะจะทำให้เป็นการลบไฟล์/โฟลเดอร์ใน Image หลักด้วย

สร้าง Virtual Memory

กรณีเครื่องที่ใช้งานมีหน่วยความจำไม่เท่ากัน และต้องการสร้าง Virtual Memory (paging file) ในบางเครื่องเท่านั้น ก็สามารถทำได้ โดยการสร้าง Image ที่ไม่มี Virtual Memory แล้วมาสร้าง Virtual Memory ให้กับเครื่องที่ต้องการในตอนบูตเครื่อง ดังนี้

$create_swap = array(
  '192.168.2.6',
  '192.168.2.7',
  '192.168.2.8',
  '192.168.2.9',
  '192.168.2.10'
);

เป็นการระบุว่า เครื่อง 192.168.2.6 ถึงเครื่อง 192.168.2.10 ให้มีการสร้าง Virtual Memory ด้วย โดยจะสร้างไฟล์ขนาด 1536 MiB ในแต่ละเครื่อง (ในที่นี้ไม่ได้ทำเป็น config ไว้ แต่สามารถแก้ไขได้ในส่วนของโปรแกรมโดยตรง)

คำเตือน การปรับปรุง Image (การ Merge) ห้ามทำจากเครื่องที่มีการสร้าง Virtual Memory เพราะจะทำให้ Image หลักมีการสร้าง Virtual Memory ด้วย

กำหนดความละเอียดหน้าจอ

การกำหนดความละเอียดของหน้าจอ สามารถทำได้โดยใช้โปรแกรม setres ซึ่งสามารถดาวน์โหลดได้จากรายการในหน้า Software เมื่อดาวน์โหลดแล้วให้เก็บไว้ในโฟลเดอร์ C:\install

การกำหนดค่าความละเอียดหน้าจอ มี 2 ส่วน คือ

ส่วนแรกเป็นการกำหนดขนาด ดังนี้

$resolutions = array(
  '1024x768' => 'h1024 v768 b32 f70',
  '1280x1024' => 'h1280 v1024 b32 f60',
  '1600x900' => 'h1600 v900 b32 f60',
  '1920x1080' => 'h1920 v1080 b32 f60'
);
  • บรรทัดแรกเป็นตัวแปรที่เก็บ config นี้ ห้ามแก้ไข
  • บรรทัดที่ 2 - 5 เป็นรูปแบบต่างๆ ของหน้าจอ สามารถแก้ไข, เพิ่มเติม หรือลบรูปแบบที่ไม่ต้องการได้ ชื่อด้านหน้าสามารถตั้งชื่อได้ตามต้องการ ส่วนพารามิเตอร์ด้านหลังมีรายละเอียดดังนี้
    • hxxxx คือความกว้างของหน้าจอ กำหนดค่าให้ตรงกับขนาดของจอ
    • vxxxx คือความสูงของหน้าจอ กำหนดค่าให้ตรงกับขนาดของจอ
    • bxx คือบิตสี โดยปกติแล้วการ์ดจอปัจจุบัน และการ์ดจอที่มีอายุไม่เกิน 10 ปี สามารถใช้ b32 ได้ สำหรับการ์ดจอเก่าอาจต้องปรับเป็น b24, b16 หรือ b15
    • fxx คืออัตราการ refresh หน้าจอ ถ้าเป็นจอ LCD, LED ให้ใช้ f60 ถ้าเป็นจอ CRT ให้ทดลองใช้ค่า f70, f72, f75, f85

ส่วนที่สองเป็นการระบุว่าเครื่องใดจะใช้รูปแบบหน้าจอใด ดังนี้

$computer_resolutions = array(
  '192.168.2.1' => '1920x1080',
  '192.168.2.2' => '1920x1080',
  '192.168.2.3' => '1920x1080',
  '192.168.2.4' => '1920x1080',
  '192.168.2.5' => '1920x1080',
  '192.168.2.6' => '1600x900',
  '192.168.2.7' => '1600x900',
  '192.168.2.8' => '1600x900',
  '192.168.2.9' => '1280x1024',
  '192.168.2.10' => '1024x768'
);
  • บรรทัดแรกเป็นตัวแปรที่เก็บ config นี้ ห้ามแก้ไข
  • บรรทัดที่ 2 - 11 เป็นการเลือกว่าเครื่องใดจะใช้หน้าจอแบบใด โดยระบุชื่อให้ตรงกับใน config แรก

การปรับแต่งหลังผู้ใช้ Login

การปรับแต่งเครื่องลูกหลังจากผู้ใช้ Login แล้ว จะเป็นการปรับแต่งเพิ่มเติมจากการปรับแต่งก่อนผู้ใช้ Login ทั้งนี้เพราะการปรับแต่งบางอย่าง โดยเฉพาะ Registry จะขึ้นอยู่กับผู้ใช้งานที่ Login

ในที่นี้จะปรับแต่งดังนี้

  • เปลี่ยน Port ของเกม War Craft III

View/Edit Diskless Server
ภาพรวม หลักการทำงาน - Hardware - Software
ติดตั้ง Server ติดตั้ง Slackware64 13.37 บูต - แบ่งพาร์ทิชั่น - เตรียมฮาร์ดดิสก์ - ติดตั้งแพ็กเกจ - ติดตั้ง Lilo - กำหนดค่าเน็ตเวิร์ก - กำหนดรหัสผ่าน - Slackware64 14.0
ปรับแต่ง Slackware Linux การใช้งานเบื้องต้น - คอมไพล์ Kernel - สร้างไดเรกทอรี - ปรับแต่ง Filesystem - ปรับแต่งแพ็กเกจ - เพิ่มการเรียก dhcpd
ปรับแต่ง Network กำหนดชื่อ Device - ทำ Network Bonding - กำหนดค่า Network
RAID สร้างพาร์ทิชั่น - สร้าง RAID - ไม่ใช้ RAID
กำหนดค่า Service NTPD - NAMED - TFTPD
โปรแกรม iSCSI Enterprise Target - iPXE
โปรแกรมจัดการระบบ Apache - MySQL - PhpMyAdmin - CakePHP - Disk Serve Manager (อัปเกรด)
ติดตั้ง Client ติดตั้ง Windows XP - ติดตั้ง iSCSI - ปรับแต่ง Windows XP - คัดลอกดิสก์ไปยังเซิร์ฟเวอร์ - Windows 7 64-bit
การใช้งาน ภาพรวม นิยาม - ไฟล์ Config และ Script
การกำหนดค่า Config - Cluster - Alternative - Computer - ตัวอย่าง
การใช้งาน หน้าจอหลัก - Mode การใช้งาน - ปรับปรุง Image - สำรอง Image - ขยายขนาด Image - ใช้หลาย Server
โปรแกรมเสริม ปรับแต่งเครื่องลูกขณะบูต - ฟอร์แมตไดรฟ์เสริม
การแก้ไขปัญหา FAQ - ไฟล์กำหนดค่า - ไฟล์บันทึกการทำงาน - Secure Erase