pc-dom-01

如何建立fedora的DOM系統
目地:製做一個可以隨插即用的 Linux DOM
工具:HDD0(開發用的OS), HDD1(建立DOM用的OS), SATADOM(最終要建立的)

[SV3SE]

更新記錄

item note
20160706 第一版

目錄


流程如下:
1.將原本的fedora系統先安裝到HDD1裡面
2.將此HDD1系統裁切至適合的大小(目前是用4G DOM)
3.之後將此HDD1 mount到原本開發系統HDD0
4.格化DOM, 設定label, 安裝grup2, 修改fstab及grup.cfg


目前使用dom規格

item description
interface STAT III 6.0 Gb/s
Flash Type SLC
RW max. 300 /130

建立DOM需要的rootfs及boot內容(Fedora HDD1)

格式化預計安裝Fedora HDD1及安裝

  • 先使用parted移除全部的partition(即sdc3,sdc2,sdc1)

    • ex. parted -s /dev/sdc rm 3
    • ex. parted -s /dev/sdc rm 2
    • ex. parted -s /dev/sdc rm 1
  • 清除MBR

    • dd if=/dev/zero of=$1 bs=446 count=1
  • 建立使用分割區(sda1:boot, sda2:rootfs)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
fdisk -u $1 << EOF
n
p
1

+230M
n
p
2

+6000M
n
p
3


w
EOF
fdisk $1 << EOF
a
1
w
EOF
  • 格式化及設定hdd label

    • mkfs.ext4 /dev/sdc1
    • e2label /dev/sdc1 dom-boot
    • mkfs.ext4 /dev/sdc2
    • e2label /dev/sdc2 dom-rootfs
  • 放入fedora光碟片,開始安裝Fedora-Live-Workstation-x86_64-22到HDD1

  • 記得要不設定LVM

裁切 HDD1 Fedora系統

  • 安裝完fedora22大約佔4G空間,若在更新後大約為5G空間,因此需要裁切
  • 安裝完成,進入系統記得更新dnf update (更新package,同時也會自動更新kernel)
  • 更改系統設定

    • 關閉selinex: vi /etc/selinux/config (SELINUX=disabled)
      這個很重要,不然即使建立好dom也無法登入
    • Disable Firewalld Service: systemctl mask firewalld
    • 設置電源,禁止白屏 (Blank screen : Never / Automatic suspend : Off )
    • 設置網絡: 設定為固定ip
  • 縮小空間

    • du -h: 都沒有刪除任何東西應該都會大於4G (預計放入4G DOM裡面,因此需要小於3.5G左右)
    • dnf remove libreoffice* (312M)
    • dnf remove firefox (148M)
    • dnf remove java-1.8.0-openjdk* (106M)
    • dnf remove gedit* (16M)
    • 可以用dnf remove就用dnf, 若不刪才用rm -rf
    • rm -rf /usr/share/help (202M)
    • rm -rf /usr/share/doc (111M)
    • /usr/share/locale/: 只保留en_US
  • 移除不必要的kernel

    • uname -a : 列出系统中正在使用的内核
    • rpm -qa | grep kernel : 查询系统中全部的内核
    • dnf remove kernel-2.6.32-279.9.1.el6.x86_64: 删除沒有使用的内核
  • 用df -h檢查目前使用空間

裁切 HDD1

  • 若是安裝fedora24及更新相關package之後為5G
  • 需要在將下例移除才能為3.6G大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
dnf remove qt*
dnf remove gdb
dnf remove adobe*
dnf remove gnome*
dnf remove git*
dnf remove perl*

dnf remove evince*

dnf list installed | grep doc
dnf remove gnome-getting-started-docs.noarch gnome-user-docs.noarch python-systemd-doc.x86_64

dnf list installed | grep help
dnf remove anaconda-user-help.noarch cups-pk-helper.x86_64 evolution-help.noarch pkcs11-helper.x86_64

dnf autoremove elfutils
dnf remove *bluetooth*
dnf remove wireless*
dnf remove vinagre
dnf remove iw*
dnf remove dotconf

dnf 說明

參考來源 - DNF的命令使用教学

  • dnf provides
    使用dnf provides /bin/bash查出在那個package

  • dnf list installed
    查看那些已安裝


建立 HDD1 rootfs.tgz

  • 將原本已建立及裁切好的HDD1,mount到開發系統中

    • mount /dev/sda1 /media/hdd1-boot
    • mount /dev/sda2 /media/hdd1-rootfs
  • 建立root.tar.gz

    • cd /media/hdd1-rootfs (切換到root目錄)
    • tar cvzf ~/rootfs.tgz ./*

4G SATA DOM 建立

SATA DOM 格式化

  • 建立sata-dom分割區

    • 先使用parted移除全部的partition(即sdc3,sdc2,sdc1)
    • ex. parted -s /dev/sdc rm 1
  • 建立分割區及設定開機partition

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fdisk $1 << EOF
n
p
1

+230M
n
p
2


w
EOF
fdisk $1 << EOF
a
1
w
EOF
  • 格式化sata-dom

    • mkfs.ext4 /dev/sdc1
    • e2label /dev/sdc1 dom-boot
    • mkfs.ext4 /dev/sdc2
    • e2label /dev/sdc2 dom-root
  • 記得使用blkid查看hdd label是否正確

1
2
/dev/sda1: LABEL="dom-boot" UUID="2cd0d8db-192d-424f-a897-55a79926962a" TYPE="ext4" PARTUUID="6761d7de-01"
/dev/sda2: LABEL="dom-root" UUID="8e1bf5c5-a853-4d6b-98d3-1bedd64f3200" TYPE="ext4" PARTUUID="6761d7de-02"

建立DOM boot內容

  • 將已格式化好的dom-boot mount到系統
  • ex. mount /dev/sdc1 /media/dom-boot
  • 建立boot grub2
    • grub2-install –root-directory=/media/dom-boot/boot /dev/sdc
  • 由/media/hdd1-boot內,覆製開機需要的檔案到/media/dom-boot裡面
    • vmlinux
    • System.map
    • initramfs
    • config
    • efi
1
2
3
4
5
6
7
8
9
[root@localhost /]# ls -l /media/dom-boot/
total 26932
drwxr-xr-x 3 root root 1024 Jul 12 11:33 boot
-rw-r--r-- 1 root root 169320 Jul 12 11:37 config-4.4.13-200.fc22.x86_64
drwxr-xr-x 4 root root 1024 Jul 12 13:43 efi
-rw-r--r-- 1 root root 17981093 Jul 12 11:37 initramfs-4.4.13-200.fc22.x86_64.img
drwx------ 2 root root 12288 Jul 12 10:50 lost+found
-rw------- 1 root root 3251710 Jul 12 11:37 System.map-4.4.13-200.fc22.x86_64
-rwxr-xr-x 1 root root 6159784 Jul 12 11:36 vmlinuz-4.4.13-200.fc22.x86_64
  • 建立/media/dom-boot/boot/grub2/grub.cfg檔案
    • 由/media/hdd1-boot/grub2/grub.cfg覆製過來並且修改如下
    • set timeout=1 :由5秒改為1秒,開機等待使用者選擇不同的kernel時間
    • 修改grub.cfg:設定開機hdd的label

DOM grub.cfg 修改前

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora (4.4.13-200.fc22.x86_64) 22 (Twenty Two)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.0.4-301.fc22.x86_64-advanced-3e1cfe65-b54e-45d6-b139-1a09af8a4e93' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 --hint='hd0,gpt2' 0fa31a4e-5192-4941-9a95-da7f43e26cd8
else
search --no-floppy --fs-uuid --set=root 0fa31a4e-5192-4941-9a95-da7f43e26cd8
fi
linux16 /vmlinuz-4.4.13-200.fc22.x86_64 root=UUID=3e1cfe65-b54e-45d6-b139-1a09af8a4e93 ro rhgb quiet LANG=en_US.UTF-8
initrd16 /initramfs-4.4.13-200.fc22.x86_64.img
}

DOM grub.cfg 修改後

1
2
3
4
5
6
7
8
9
10
11
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora (4.4.13-200.fc22.x86_64) 22 (Twenty Two)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.0.4-301.fc22.x86_64-advanced-3e1cfe65-b54e-45d6-b139-1a09af8a4e93' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
linux16 /vmlinuz-4.4.13-200.fc22.x86_64 root=LABEL=dom-rootfs ro rhgb quiet LANG=en_US.UTF-8
initrd16 /initramfs-4.4.13-200.fc22.x86_64.img
}

建立DOM root內容

  • 將已格式化好的dom-root mount到系統
  • ex. mount /dev/sdc1 /media/dom-rootfs
  • 解壓root.tgz到/media/dom-rootfs
  • 修改/media/dom-rootfs/etc/fstab 如下
1
2
LABEL=dom-rootfs /                       ext4    defaults        1 1
LABEL=dom-boot /boot ext4 defaults 1 2

建立DOM image

  • 到目前為此,可以先驗證此stat dom是否可以正常

    • umount /media/dom-boot
    • umount /media/dom-rootfs
    • 將sata-dom移除,安裝到另一台電腦上,測試是否正常
  • 建立dom image

    • 備份:dd if=/dev/sdc of=/home/dom.img
    • 還原: dd if=dom.img of=dev/sdc

如何使用parted建立dom使用的分割區

清除MBR

  • parted -s /dev/sda print: 先確認是4G的DOM
  • 清除之前的partition

    • parted -s /dev/sda rm 2
    • parted -s /dev/sda rm 1
  • 清除MBR

  • dd if=/dev/zero of=/dev/sda bs=446 count=1

  • mklabel

    • parted -s /dev/sda mklabel msdos

建立partition

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
parted -s /dev/sda mkpart primary 0% 128
parted -s /dev/sda mkpart primary 128 100%
parted -s /dev/sda print

Model: ATA SATADOM-SV 3ME (scsi)
Disk /dev/sda: 4012MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 128MB 127MB primary ext4
2 128MB 4011MB 3883MB primary

[root@localhost ~]#

設定開機

1
2
3
4
5
6
7
8
9
10
11
12
parted -s /dev/sda set 1 boot on

[root@localhost ~]# parted -s /dev/sda print
Model: ATA SATADOM-SV 3ME (scsi)
Disk /dev/sda: 4012MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 128MB 127MB primary ext4 boot
2 128MB 4011MB 3883MB primary

參考來源