如何在ZFS上安裝KDE Neon
*請以這份教學手冊為基準
請注意: 你將弄亂這個硬碟。我可能會大多以這個為主。就像老諺語說的:「Linux好的地方在於它可以做到你完全跟他講的,壞的地方在於它就是做你所告訴他的。」我強烈建議你在執行這項過程時以離線 ∕ 移除你不想碰觸到的硬碟,你才不會不慎刪除你不想刪除的硬碟。
注意:在這項目執行的過程中,KDE Neon是以Ubuntu 16.04 Xenial為基礎。
整個過程看起來是像這樣:
- 進入Xenial Desktop的伺服器環境
- 安裝ZFS包裝在伺服器環境中
- 準備陣列
- 安排Debootstrap
- Chroot 到陣列中
- 安裝剩餘的KDE Neon
- Tweak
- Reboot 新的KDE Neon系統到ZFS
這真的跟dotFiles Ubuntu 16.04 (Xenial) ZFS native root install很相似,只是加入一些KDE Neon bits進去。我在使用KDE Neon的時候有很好的體驗,我很喜歡使用ZFS,所以也自然的會想將其結合,在你要開始執行前,至少先讀這篇文章,我把我覺得有用的地方做標記以及畫上螢光記號。我在最後已經提醒了,不過如果你在中途卡住了,可以使用我拿來做為參考的資料作為引導,我大多從他的引導中得到答案,廢話不多說讓我們開始吧!
創建並進入Ubuntu 16.04 Xenial Desktop live media
我大部分使用USB,但是 CD也是ok的,點這裡以取用
在 LIVE的環境
在live 環境下安裝 ∕ 開始 SSH服務
我大多在遠距的狀況下使用這些,所以我需要讓SSH能夠使用
sudo -i apt update && apt install -y openssh-server passwd ubuntu
將一切轉為原始設定會是個好主意,因為大部分我們做的事情都包含管理權限
sudo -i
開始吧!
安裝套件
我有一個問題是,我當時使用的Xenial 安裝媒體上的儲存庫並未包含’zfsutils-linux’。如果這也發生在你身上,我建議使用a repo generator以免 /etc/apt/sources.list因為一些原因而過時。
apt update && apt install -y zfsutils-linux debootstrap vim
上傳ZFS核心模組
apt update && apt install -y zfsutils-linux debootstrap vim
執行以下:
modprobe zfs
認證:
root@ubuntu:~# lsmod | grep zfs zfs 2711552 3 zunicode 331776 1 zfs zavl 16384 1 zfs zcommon 49152 1 zfs znvpair 77824 2 zcommon,zfs spl 98304 3 znvpair,zcommon,zfs
關於Udev:
使用以下內容創建/etc/udev/rules.d/90-zfs.rules
KERNEL=="sd*[!0-9]", IMPORT{parent}=="ID_*", SYMLINK+="$env{ID_BUS}-$env{ID_SERIAL}" KERNEL=="sd*[0-9]", IMPORT{parent}=="ID_*", SYMLINK+="$env{ID_BUS}-$env{ID_SERIAL}-part%n"
更新Symlinks以阻止裝置
udevadm trigger
分開硬碟
使用 lsblk再次確認你將弄亂的硬碟
Isblk
使用wipefs以移除存在的分隔表,為每個你要安排到你的數組中的硬碟做移除動作
wipefs -a /path/to/first/block/device wipefs -a /path/to/next/block/device
可以用lsblk做認證
Lsblk
使用以下來分隔硬碟至你的儲存池中,調整路徑以針對特定需求(eg. /dev/sdX):
sgdisk -Z -n9:-8M:0 -t9:bf07 -c9:Reserved -n2:-8M:0 -t2:ef02 -c2:GRUB -n1:0:0 -t1:bf01 -c1:ZFS /path/to/first/block/device sgdisk -Z -n9:-8M:0 -t9:bf07 -c9:Reserved -n2:-8M:0 -t2:ef02 -c2:GRUB -n1:0:0 -t1:bf01 -c1:ZFS /path/to/next/block/device
使用lsblk以核對新分隔項目
Lsblk
ZFS 的有趣時刻
下面將介紹創建一個ZFS pool 名為 「rpool」,包含一個RAID1 mirror,此RAID1 mirror裡面又包含兩個分隔項目。我再說一次,調整路徑根據Linux如何偵測你的硬碟,特別是指硬碟存的空間中的分隔項目一。 (eg. /dev/sda1):
zpool create -m none -o ashift=12 -O compression=lz4 rpool mirror /path/to/first/block/device1 /path/to/next/block/device1
在陣列上創建一個根目錄
zfs create -o mountpoint=/ rpool/root
認證:
zpool status -v # shows pool status zfs list # shows mountpoint
輸出儲存池:
zpool export rpool
以正確的裝置名稱置入pool並在/mnt上執行mount指令
zpool import -d /dev/disk/by-id -R /mnt rpool
認證:
zpool status -v # should show different device name(s) zfs list # should show mounted on /mnt
將基本系統檔案置入/mnt中
這個動作可以將一個基本系統從網路上拉出來,並將它置入特定的目錄中。(這可能會花一點時間,視你的網路連線而定。)
debootstrap xenial /mnt
用zpool list -v,你可以看到pool開始填滿了
watch zpool list -v # exit with Ctrl-c
複製我們先前做的 /etc/udev/rules.d/90-zfs.rules
cp /etc/udev/rules.d/90-zfs.rules /mnt/etc/udev/rules.d/90-zfs.rules
將舊的 /mnt/etc/apt/sources.list清理掉
mv /mnt/etc/apt/sources.list /mnt/etc/apt/sources.list.old
以下列的內容創建新的 /mnt/etc/apt/sources.list (依照個人的需求微調)
###### Ubuntu Main Repos deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
###### Ubuntu Update Repos deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ xenial-proposed main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu/ xenial-proposed main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
###### Ubuntu Partner Repo deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner
###### KDE Neon Repo deb http://archive.neon.kde.org/user xenial main deb-src http://archive.neon.kde.org/user xenial main
對 /dev, /proc和/sys執行mount指令以準備chroot
mount --rbind {,/mnt}/dev mount --rbind {,/mnt}/proc mount --rbind {,/mnt}/sys
對/mnt執行Chroot指令
chroot /mnt /bin/bash --login
在chroot中
初始 tweak並產生locale:
locale-gen en_US.UTF-8
初始 KDE NEON 金鑰:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E6D4736255751E5D
軟體包安裝
更新套件管理系統apt並安裝軟體包(將會花一點時間)。注意:你可能會想要選一個不一樣版本的核心,而非現正運作的這一個(如uname -r指令所輸出的)。根據Distrowatch, KDE Neon現在是用4.10的版本,我現在用的是4.10.0-42-generic。
注意:根據我的經驗,有些KDE Neon 軟體包(我想它是一個以GRUB為主的軟體包)會先創建 /etc/default/grub,但實際上裡面什麼都沒有,接著grub-pc會被安裝以重複上述的工作,接著apt就會不確定要怎麼做,當apt搞不清楚狀況的時候,它會問你它該執行什麼指令,從我的經驗當中,最好的作法是選擇「使用程式包維護者的版本」,我不知道在你讀這個指南時,程式包會被以何種順序安裝,所以你應該要注意其中的差異以防萬一。如果它在線旁邊有 ‘>’,那表示這是一個新的檔案,如果你看到很多條線而且旁邊都有 ‘>’ ,那表示會想要使用程式包維護者的版本,如果你不使用的話,那就留住現有的檔案。你可以在這篇文章的最後找到我寫的關於 /etc/default/grub在危急時刻的文章。
apt-get update && apt-get install -y zfsutils-linux zfs-initramfs zfs-dkms zfs-zed linux-image-$(uname -r) linux-image-extra-$(uname -r) linux-headers-$(uname -r) grub2-common grub-pc acpi-support vim linux-firmware neon-desktop
當它問你GRUB該裝在哪邊的時候,選擇ZFS裝置。
root@ubuntu:/# find /boot -iname '*zfs*' /boot/grub/i386-pc/zfsinfo.mod /boot/grub/i386-pc/zfs.mod /boot/grub/i386-pc/zfscrypt.mod
建立根用戶密碼
passwd root
告訴系統去重新啟動graphical 目標為預設值
systemctl set-default graphical.target
用sudo特權指令來新增使用者
adduser usernamegoeshere usermod -aG sudo usernamegoeshere
在/etc/default/grub,將GRUB_CMDLINE_LINUX=””改成GRUB_CMDLINE_LINUX=”boot=zfs”:
GRUB_CMDLINE_LINUX="boot=zfs"
離開Chroot:
exit
回到線上的環境裡,確定GRUB知道根目錄是 ZFS
grub-probe /mnt
安裝GRUB來啟動磁碟扇區
grub-install --root-directory=/mnt /path/to/first/block/device
grub-install --root-directory=/mnt /path/to/next/block/device
重新啟動
reboot now
歡迎來到在ZFS上的KDE NEON桌機上!好好使用吧!
希望你安裝順利,如果你遇到問題,讀讀the dotFiles guide,它向來是我遇到問題時的求助資源.別擔心KDE Neon有關的東西,因為它要花很久的時間才會安裝好,只要試試重新啟動系統就好,如果你做到這個地步,你可以增加KDE Neon儲存並在上面安裝NEON。
以下是我的/etc/default/grub,只是以防萬一:
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="boot=zfs"
# Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"
更多電商營運知識,別忘了訂閱我們的電子報,以及追蹤我們的Facebook粉絲專頁!
我要留言