顯示具有 chroot 標籤的文章。 顯示所有文章
顯示具有 chroot 標籤的文章。 顯示所有文章

2016年12月4日 星期日

如何客製化 rootfs ? (2016 版)

如何客製化 rootfs ?

先前我們所完成的 rootfs 還沒有進行客製化,因此有一些部份還需要設定,例如:

1. root 密碼:leenix123
2. 新增一個使用者帳號 leenix/密碼: leenix123
3. 設定 locale (可裝/可不裝)
4. 設定網路
5. 設定 apt 來源
6. 架設 apache 伺服器
7. 設定主機名稱
8. 清理不必要檔案以節省空間

這些工作都需要在 chroot 環境裡實作,因此請先將 sd.img 裡的第 2 個分割區掛載至
/mnt/sdcard2 目錄下,然後執行:

# chroot /mnt/sdcard2
bash: warning: setlocale: LC_ALL: cannot change locale (zh_TW.UTF8)

==1==
此時我們已經在 /mnt/sdcard2 目錄下,首先我們要修改 root 密碼,請執行:

# echo root:leenix123 | chpasswd

==2==
接下來要新增使用者並設定密碼,請執行:

# useradd leenix
# echo leenix:leenix123 | chpasswd

==3==
接下來請設定語系,以免出現奇奇怪怪的訊息,請執行:

#dpkg-reconfigure locale

由於這是嵌入式系統,不是先前所使用的中文桌面環境,因此僅需要使用英文語系,請
設定 en_US.UTF-8 作為預設語系。

==4==
然後我們要設定網路,請編輯 /etc/network/interfaces,將其內容修改為:
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.10.100
netmask 255.255.255.0
gateway 192.168.10.1

之後我們將以 192.168.10.100 為連線主機檢查 apache server 是否有順利啟動。

==5==
要在虛擬 ARM 環境中安裝軟體跟 PC 版的流程是一樣的,因此要修改
/etc/apt/sources.list 這個設定檔,請將其內容改為:

deb http://opensource.nchc.org.tw/debian/ jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main


==6==
修改完 apt 設定後接下來就可以設定 apache 伺服器,請執行:

# apt-get install apache2
# systemctl enable apache2


==7==
之後我們要設定 /etc/hostname 這個檔案以修改主機名稱,請執行

# echo arm_leenix > /etc/hostname

==8==
最後要離開系統前,請清除不必要的檔案:

# apt-get clean
# rm -rf /usr/share/doc/*
# rm -rf /usr/share/locale/*
# rm -rf /usr/share/man/*
# rm -rf /var/log/*

作完之後離開系統,並解除 /mnt/sdcard2 的掛載,解除 sd.img 的連接,然後重新再執
行虛擬 arm 主機,看能不能用 root 登錄。

2016年6月2日 星期四

建立 chroot 環境

什麼是 chroot ?

chroot (change root) 是一個指令,它可以將某個小型的檔案系統變成一個 /  環境,而這個小型的檔案系統要用 debootstrap 這個指令來建立。

使用 debootstrap 指令

debootstrap 指令是用來建立小型 root 環境的一個指令,他對於建立嵌入式系統的根目錄或是我們現在要建立的小型 root 環境都非常有用,要安裝 debootstrap 請執行:

# apt-get install debootstrap


安裝完成後,請在 ~/virtualclassroom 底下建立一個 chroot 目錄,接著在此目錄新增一個 shell script,其檔名為 debootstrap.sh,內容如下所示:

SOURCEDIR=`pwd`/LEENIX
ARCH=amd64
DEBIAN_RELEASE=jessie
#DEBIAN_MIRROR=ftp://opensource.nchc.org.tw/debian
DEBIAN_MIRROR=file:///srv/ftp/debian

[ -d $SOURCEDIR ] && rm -rf $SOURCEDIR

mkdir -p $SOURCEDIR

time debootstrap --arch ${ARCH} ${DEBIAN_RELEASE} ${SOURCEDIR} ${DEBIAN_MIRROR}

建完 debootstrap.sh 後,請以 root 權限執行:

# sh debootstrap.sh

此時會看到 debootstrap 開始抓檔案並開始安裝一個最原始、最小型的 / 檔案系統。debootstrap.sh 執行完的畫面如下所示:

I: Configuring iputils-ping...
I: Configuring isc-dhcp-common...
I: Configuring isc-dhcp-client...
I: Configuring tasksel...
I: Configuring tasksel-data...
I: Configuring libc-bin...
I: Configuring systemd...
I: Base system installed successfully.

此時會有一個 LEENIX 的目錄,我們可以檢查此目錄來看其內容,這個目錄其實就是一個最精簡的 / 目錄。接下來我們可以使用 chroot 指令來切換至此目錄,請先編輯 chroot.sh 檔案,其內容如下所示:

SOURCEDIR=`pwd`/LEENIX

chroot ${SOURCEDIR} \
  /usr/bin/env -i \
  HOME=/root \
  TERM=$TERM \
  PS1='\u:\w\$ ' \
  PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  /bin/bash --login

編輯完之後可以用 root 權限執行:

sh chroot.sh

此時你會發現你的目錄位置變成 /,如底下所示:

~/virtualclassroom/chroot# sh chroot.sh
root@120:/#

現在我們已經切換到剛剛那個小型的 root 目錄了,在這個目錄可以作一些事情,理論上不會傷害到實體主機。例如 apt-get 指令等均是在此小型 / 目錄中作修改。我們可以在這個目錄新增一個空的 aaa.txt 檔,指令如下所示:

/# touch aaa.txt

接著打 exit 離開 chroot 環境,再觀看 LEENIX 目錄中是否有 aaa.txt 這個檔案。

以上所完成的就是一個最簡單的 chroot 環境,它與我們接下來要教的 docker 有點類似,所以 docker 才號稱是「加了外掛的 chroot 環境」。