debian: ทดลองสารพัด

จุดประสงค์คือ จะสร้างเซอร์เวอร์สำหรับการทดลอง ไว้แทนตัวเก่าที่ปลดประจำการไปทำ เครื่องเขียนซีดี
เพื่อเวลาจะทดสอบอะไร ก็สามารถลบและลงใหม่แบบคล่องตัว

เอามาจาก ThaiLinuxCafe - debian : ทดลอง debootstrap

ติดตั้ง sarge แบบว่าง ๆ

จะติดตั้ง sarge เพื่อเป็นฐานในการทดลองรันเซิร์ฟเวอร์แบบต่าง ๆ

เพื่อให้ประหยัดแบนวิธ จะเขียนเป็น text ทั้งหมด

  • ตั้งชื่อว่า server1
  • ให้มีไอพีเป็น 192.168.1.5 (สมมุติว่า gateway, name-server และ apt-proxy ในระบบคือ 192.168.1.1)
  • ฮาร์ดดิสก์ 120G จะแบ่งพาร์ติชั่นเป็น
    /dev/hda1    primary    /boot    100MB
    /dev/hda2    primary    /        10GB
    /dev/hda3    extend
    /dev/hda5    logical    swap     512MB

    ที่เหลือปล่อยว่างไว้เพื่อใช้ในการทดสอบและติดตั้งระบบต่อไป

  • ผู้ใช้ในระบบชื่อ user1

เริ่มเลย

- บูตเครื่องด้วยแผ่นติดตั้งเดเบียน sarge
Press F1 for help, or ENTER to boot:
<<<--- linux26

Choose Language
<<<--- English

Choose country of region
<<<--- other <<<--- Asia <<<--- Thailand

Select a keyboard layout
<<<--- American English

...

ถ้ามีเราเตอร์หรือ dhcp server ก็ข้ามขั้นตอนนี้ไปได้


Configure the network
<<<--- Configure network manually

IP address:
<<<--- 192.168.1.5

Netmask:
<<<--- 255.255.255.0

Gateway:
<<<--- (ใส่ค่าไอพีของ router) 192.168.1.1

Name server addresses:
<<<--- (เหมือนเดิม) 192.168.1.1


Hostname:
<<<--- server1

Domain name:
<<<--- (ใส่ชื่อโดเมนของเรา) example.com

Partition disks
<<<--- ใส่ค่าตามที่ตั้งใจไว้

/dev/hda1    primary    /boot    100MB
/dev/hda2    primary    /        10GB
/dev/hda5    logical    swap     512MB

Installing the Debian base system
...

Install the GRUB boot loader to the master boot record?
<<<--- Yes

Installation complete
<<<--- Continue

รีบูตเข้าระบบใหม่

Welcome to your new Debian system!
<<<--- Ok

Is the hardware clock set to GMT?
<<<--- No

Are you in the Asia/Bangkok time zone?
<<<--- Yes

Root password:
<<<--- ใส่ค่ารหัสผ่านของ root
Re-enter password to verify:
<<<--- เหมือนเดิม

Enter a full name for the new user:
<<<--- user1

Enter a username for your account:
<<<--- user1

Enter a password for the new user:
<<<--- ใส่รหัสผ่านของ user1
Re-enter password to verify:
<<<--- เหมือนเดิม

Archive access method for apt:
<<<--- cdrom

CD-ROM device file:
<<<--- /dev/cdrom

Scan another CD?
<<<--- No

Testing apt sources
...

Choose software to install
เราไม่เลือกอะไรเลย เพราะจะทำเป็นฐานเพื่อไปงานอื่นเฉย ๆ
<<<--- Ok

...

General type of mail configuration:
<<<--- local delivery only; not on a network

Root and postmaster mail recipient:
<<<--- user1

Thank you for choosing Debian!
<<<--- Ok

เสร็จแล้ว

อัปเกรดเป็น etch

ทีแรกจะทำฐานเป็น sarge และตัวทดลองจริงเป็น etch
แต่การเปลี่ยน base-package จาก sarge เป็น etch มันเยอะเกินไป
แก้สคริปต์ debootstrap ไม่ไหว อัปเกรดเลยดีกว่า

แก้ apt-sources เปลี่ยน sarge เป็น etch ให้หมด
# vi /etc/apt/sources.list

deb     http://MY-APT-PROXY:9999/debian etch main contrib non-free
deb-src http://MY-APT-PROXY:9999/debian etch main contrib non-free
deb     http://security.debian.org/debian etch main contrib non-free
deb-src http://security.debian.org/debian etch main contrib non-free

อัปเดทและอัปเกรด
# apt-get upgdate; apt-get dist-upgrade
ตอบค่าปริยายทั้งหมด

ติดตั้งเคอร์เนลใหม่
# apt-get install linux-image-686
ตอบ Y ทั้งหมด

รีบูตใช้เคอร์เนลใหม่
...

ถอดเคอร์เนลเก่า
# apt-get remove --purge linux-image-2.6.8-2-386

เสร็จแล้ว

ติดตั้ง etch รุ่นทดลอง แบบ debootstrap

งานที่ทำในครั้งนี้คือ

  • แบ่งพาร์ติชั่น
  • ติดตั้ง debootstrap
  • ติดตั้ง etch รุ่นทดลอง (ย่อว่า etch-exp ในพาร์ติชั่นใหม่ โดยใช้ debootstrap

แบ่งพาร์ติชั่น

คราวที่แล้วเรามี

/dev/hda1    primary    /boot    100MB
/dev/hda2    primary    /        10GB
/dev/hda3    extend
/dev/hda5    logical    swap     512MB

คราวนี้เราจะเพิ่ม /dev/hda6 ขนาด 20G เพื่อทำเป็น / ให้กับ etch-exp

/dev/hda6    logical    /        20G

ในครั้งก่อน การติดตั้งของ sarge ไม่ยอมขยาย extended partition ให้เต็มพื้นที่
ในคราวนี้เราจะมาแก้ไขเรื่องนี้ด้วย
ขั้นตอนขยายพาร์ติชั่นและเตรียมการติดตั้งคือ

  1. หยุดการ swap ก่อน
  2. ลบ /dev/hda3 ทิ้ง และสร้างใหม่ให้เต็มพื้นที่
  3. สร้าง /dev/hda5 เป็น swap ใหม่
  4. สร้าง /dev/hda6 เป็น / ของ etch-exp ขนาด 20G
  5. รีบูตใหม่
  6. ฟอร์แมต /dev/hda6 เป็น ext3

หยุดการ swap
# swapoff -a

ลบ /dev/hda3 ทิ้ง
# fdisk /dev/hda
<<<--- d
<<<--- 3

สร้างใหม่ให้เต็มพื้นที่
<<<--- n
<<<--- e (extended)
Partition number (1-4):
<<<--- 3
First cylinder:
<<<--- DEFAULT
Last cylinder:
<<<--- DEFAULT

สร้าง /dev/hda5 เป็น swap ใหม่
<<<--- n
<<<--- l (logical)
First cylinder:
<<<--- DEFAULT
Last cylinder:
<<<--- +512M
<<<--- t
<<<--- 5
<<<--- 82

สร้าง /dev/hda6 เป็น / ของ etch-exp ขนาด 20G
<<<--- n
<<<--- l (logical)
First cylinder:
<<<--- DEFAULT
Last cylinder:
<<<--- +20G

เขียนลงดิสก์
<<<--- w

รีบูต เพื่อให้ระบบรู้จักพาร์ติชั่นใหม่
...

ฟอร์แมต /dev/hda6 เป็น ext3
# mkfs.ext3 /dev/hda6

ติดตั้ง debootstrap

# apt-get install debootstrap

ติดตั้ง etch ในพาร์ติชั่นใหม่ โดยใช้ debootstrap

สร้างจุดเมานต์ให้ /dev/hda6
# mkdir -p /mnt/disk

เมานต์
# mount /dev/hda6 /mnt/disk

เริ่ม debootstrap
# debootstrap --arch i386 etch /mnt/disk http://MY-APT-PROXY:9999/debian

คัดลอกข้อมูลระบบไปยัง etch-exp
# cp /etc/hosts /mnt/disk/etc
# cp /etc/network/interfaces /mnt/disk/etc
# cp /etc/apt/sources.list /mnt/disk/etc
# cp /etc/fstab /mnt/disk/etc

แก้ไข fstab โดยเปลี่ยนจาก /dev/hda2 เป็น /dev/hda6 อย่างอื่นเหมือนเดิม
# vi /mnt/disk/etc/fstab

...
/dev/hda6    /        ext3    defaults,errors=remount-ro 0       1
...

chroot ไป etch-exp
# mount -t proc proc /mnt/disk/proc
# mount -o bind /dev /mnt/disk/dev
# mount -t sysfs /sys /mnt/disk/sys
# chroot /mnt/disk /bin/bash

อัปเดตหนึ่งครั้ง
# apt-get update

ติดตั้งแพคเกจจำเป็น
# apt-get install locales console-data
# dpkg-reconfigure locales console-data
<<<--- Ok
<<<--- Don't touch keymap

แพคเกจอื่น
# apt-get install initrd-tools usbutils pciutils bzip2 ssh grub udev yaird ssh
# dpkg-reconfigure -a

ตอบค่าปริยายทั้งหมด
ยกเว้นรหัสผ่าน root, การเพิ่มผู้ใช้และรหัสผ่าน, โซนเวลา

ติดตั้งเคอร์เนล
# apt-get install linux-image-686
Create a symbolic link to the current kernel image?
<<<--- Y
Do you want to abort now?
<<<--- N

ออกจาก etch-exp
exit

กลับมาใช้ทรัพยากรของ etch เดิม
# umount /mnt/disk/proc
# umount /mnt/disk/dev
# umount /mnt/disk/sys
# sync
# ldconfig

ปรับแก้ grub เพิ่ม etch-exp
# vi /boot/grub/menu.lst
ปรับแก้ default ให้บูตเป็น etch-exp

...
default         2
...

ไปที่ท้ายไฟล์ (กด G)

...
title           Etch-Experiment, kernel 2.6.17-2-686
root            (hd0,0)
kernel          /vmlinuz-2.6.17-2-686 root=/dev/hda6 ro
initrd          /initrd.img-2.6.17-2-686
savedefault

เสร็จแล้ว สามารถรีบูตเข้า etch-exp เพื่อทดสอบได้เลย

สร้างสคริปต์ติดตั้ง

เนื่องจากขั้นตอนเยอะ น่าจะทำเป็นสคริปต์ติดตั้งเอาไว้เลย กันพลาดภายหลัง
เนื้องจากต้องมีการ chroot จึงต้องทำสคริปต์เป็นสองไฟล์

สคริปต์แรก ชื่อ d.debootstrap.stage1
# vi d.debootstrap.stage1

#!/bin/bash
# EDIT THESE VARIABLE
DISK=/dev/hda6          # etch-exp PARTITION
MNT=/mnt/disk           # MOUNT POINT

# VARIABLE
RELEASE=etch
PROXY="http://archive.debian.org/debian"

###### COMMANDS NEED TO RUN BEFORE CALLING THIS SCRIPT
echo "----- Prerequist command: -----"
echo "# mkfs.ext3 $DISK"
echo "# mount $DISK $MNT"
echo "# debootstrap $RELEASE $MNT $PROXY"
echo "-------------------------------"
read -p "*** THIS SCRIPT WILL DESTROY $DISK, PRESS Y TO CONTINUE: " CONFIRM
if [ $CONFIRM != "Y" ]; then
  exit 1;
fi

# BEGIN STAGE 1
cp /etc/hosts $MNT/etc
cp /etc/network/interfaces $MNT/etc/network
cp /etc/hostname $MNT/etc
cp /etc/fstab $MNT/etc
cp /etc/apt/sources.list $MNT/etc/apt
mount -t proc proc $MNT/proc
mount -o bind /dev $MNT/dev
mount -t sysfs /sys $MNT/sys
cp d.debootstrap.stage2 $MNT
echo "edit /etc/host /etc/network/interfaces /etc/hostname /etc/fstab /etc/apt/s
ources.list"
echo "then run d.debootstrap.stage2"
chroot $MNT /bin/bash
#
umount $MNT/proc
umount $MNT/dev
umount $MNT/sys
ldconfig
sync; sync; sync
echo "Edit /boot/grub/menu.lst to boot into new system."
echo "AT:TOP"
echo "--- default     0"
echo "+++ default     2"
echo "AT:BOTTOM"
echo "+++ title       Etch-Experiment, kernel 2.6.17-2.686"
echo "+++ root        (hd0,0)"
echo "+++ kernel      /vmlinuz-2.6.17-2-686 root=$DISK ro"
echo "+++ initrd      /initrd.img-2.6.17-2-686"
echo "+++ savedefault"

และสคริปต์สอง ตั้งชื่อว่า d.debootstrap.stage2
# vi d.debootstrap.stage2

#/bin/bash
apt-get update
apt-get install locales console-data
dpkg-reconfigure locales
apt-get install initrd-tools usbutils pciutils bzip2 ssh grub udev yaird ssh
#
# FOR X-WINDOWS-SYSTEM
# apt-get install xorg gdm gnome
#
# FOR PRINT SERVER
# apt-get install cupsys linuxprinting.org-ppds
#
# CHANGE THIS LINE FOR THE PROPER KERNEL IMAGE
apt-get install linux-image-2.6.17-2-686
#
passwd
dpkg-reconfigure -a
exit

อย่าลืมเปลี่ยนโหมดรัน
# chmod 0755 d.*

เวลาสั่งรันก็ใช้
# ./d.debootstrap.stage1
(แก้ /etc/fstab และไฟล์อื่นที่เกี่ยวข้อง)
# ./d.debootstrap.stage2
(ปรับตั้ง locales และแพคเกจอื่น ๆ)
# exit
(แก้ /boot/grub/menu.lst)
# reboot

debian: บันทึกการใช้งาน stable

ใช้งานเดสก์ทอป sid มานานจนย่ามใจ ลองอัปเกรดเซิร์ฟเวอร์ที่ใช้เป็น testing แบบ dist-upgrade ผลปรากฎว่าเครื่องวินโดวส์ตระกูล 9x ติดต่อแม่ข่ายไม่ได้ ทำให้วุ่นวายหลายวัน

บันทึกข้อควรจำ

  1. ถ้าเป็นเครื่อง production ควรใช้ stable เท่านั้น
  2. หากต้องการซอฟต์แวร์ที่ทันสมัย แต่ยังเสถียรที่สุดเท่าที่เป็นไปได้ ให้พ่วง testing เข้ามาโดยยังไม่ต้องทิ้ง stable ตัวอย่างไฟล์ /etc/apt/sources.list คือ
    deb     http://ftp.debian.org/debian stable main contrib non-free
    deb-src http://ftp.debian.org/debian stable main contrib non-free
    deb     http://security.debian.org/ stable/updates main contrib non-free
    deb-src http://security.debian.org/ stable/updates main contrib non-free
    deb     http://ftp.debian.org/debian testing main contrib non-free
    deb-src http://ftp.debian.org/debian testing main contrib non-free
    deb     http://security.debian.org/ testing/updates main contrib non-free
    deb-src http://security.debian.org/ testing/updates main contrib non-free

    โดยมีข้อปฏิบัติคือ

    • ห้ามใช้ apt-get dist-upgrade เด็ดขาด
    • เวลาต้องการติดตั้งแพกเกจใหม่ ให้ติดตั้งเป็น stable เช่นจะติดตั้ง samba ใช้คำสั่งว่า
      $ sudo apt-get install samba/stable
      เสร็จแล้วจึง apt-get upgrade อีกทีนึง
Topic: