一般常見問題

一般性問題 Common 客制化 Customize

您可以從右邊的總覽清單快速地找詢您的問題。

Q : tux2live 製作時如何避免rc.local被修改?

依製作的套件找到相對應的檔案,如:
製作 Debian/Ubuntu 時,修改

	~/tux2live/function/4_debian/S07stop_services

Fedora/Centos/Mandriva ...等,修改

	~/tux2live/function/4_rh/S07stop_services

找到如下:

#!sh
# Clean up /etc/lrc.local
cat > /etc/rc.local <<EOF
#!/bin/sh -e
#
# rc.local
#
# This script is generated in tux2live-mkrootfs

exit 0

EOF

將其整段註解掉 或刪除即可。

Q : 如何直接指定 tux2live 製作出來的 iso 檔名?

參數 -o [iso-name], ex:

sudo ./tux2live -b -o my-livecd.iso

此外,如果想變更預設的前置字元 tux2live-CentOS.iso ,可以在 ~tux2live/conf/tux2live.conf 中修改 _TUX2LIVE_ISO_NAME_PREFIX 參數 , 如下:

_TUX2LIVE_ISO_NAME_PREFIX=my-prefix

參數可修改 iso 檔的預設前字串;之後檔名預設會變成 [my-prefix]-[Debain|Ubuntu|Fedora|...].iso , 其餘 tux2live 參數可請用 --help 來查詢

Q: 如何修改 isolinux 的開機背景圖?

將符合格式的 png 圖檔至換到 ~/tux2live/cdimage.skel/tux2liveisoboot.png 下 :640x480, 顏色數不超過16色, png

Q: 如何修該 isolinux 開機預設選項,例如啟用 usplash, 設定 vga=791 .... 等?

請修改 ~/tux2live/cdimage.skel/isolinux/isolinux.cfg 找到 vga 參數,如下:

...
  append initrd=/isolinux/initrdlive.img boot=casper vga=normal nousplash ....
...

直接修改成想要的參數即可,如 :

...
  append initrd=/isolinux/initrdlive.img boot=casper vga=791 usplash ....
...

Q: 可否自行製作開機 splash 動畫?

可下載 downloader:2 , 解開後參閱 Howto.txt.

其他 splash 製作可參考:

Q: 如何對 root.filesystem 內的檔案再做修改?修改後如何完成後續打包動作?

tux2live 的製作設計上分三的階段:

  • Step 1: kernel/initrd 製作
  • Step 2: real filesystem 收集並後製成 squashfs 的檔案格式
  • Step 3: 將 step 1,2 的結果打包成 iso 檔

其實,執行 tux2live -b 時,其實也就是是依序做這三件動作。此3個步驟的分別參數是 --mkinitrd, --mkrootfs, --mkiso.也就是說如果有需要分開做時,使用者些參數即可,如:
* ./tux2live --mkrootfs real filesystem 並製成需要的 squashfs

  • ./tux2live --mkinitrd --mkiso 製作 kernel 與 initrd, 並將已存在的 squashfs 一起打包成iso 檔( 就略去準備 real filesystem 的動作, 但如果程式發現需要的 squashfs 不存在時則會中斷)。
	所以目前設計的中斷點並無法處理,需要如下步驟:
  • 1. 修改 ~tux2live/tux2live-mkrootfs , 找到
#!sh
...
 [ "$_BATCH_MODE" = 'y' -a -z "$_MKROOTFS_IMPORT_USER" ] || import_user_home

 mkrootimg
...
 補上:   echo "Wait here !";  read pause_point;  如下:
#!sh
...
 [ "$_BATCH_MODE" = 'y' -a -z "$_MKROOTFS_IMPORT_USER" ] || import_user_home

echo "Wait here !";  read pause_point;

 mkrootimg
...

改完存檔,下 ./tux2live -b --mkrootfs --mkiso 進行打包。等到程式出現 "Wait here !" 後,保留原console ,開其他 console 或工具進行對 root.filesystem 的修改。完成修改後回到剛在 Wait 的 console , 按 [Enter] 後變會繼續後續的打包動作。

這類的客制化之後將已兩種型態來符合需要 :

  • 1. 新增 ~/tux2live/user-define 目錄,user 在此目錄內將需要覆蓋或新增的檔案,依原始目錄結構放置,如:~/tux2live/user-define/etc/rc.local
    則 root.filesystem 下的 /etc/rc.local 則被取代。若原先沒有的檔案則會新增上去。
  • 2. 修改 tux2live 流程,讓 --mkrootfs 只做到 real system 的收集預後製即可; make squashfs 的部分則留到 --mkiso 時再進行。

Q: 如何讓已經植入 USB/HD 的 live 環境關機時不需要顯示 移除裝置後按 [Enter] 而直接關閉電源

請在開機載入設定檔(視您的 boot loader : syslinux , grub, lilo, ....) 中加入 noprompt 參數, 以 grub 為例,編輯 ~/grub/menu.lst

kernel		(hd0,0)/isolinux/vmlinuzlive boot=casper noprompt ...
initrd		(hd0,0)/isolinux/initrdlive.img

Q: 在 Live 環境下 AppArmor 啟動導致有些服務無法正常

在 Live 環境下設定列印系統 (cups) 發生錯誤 或 Lucid下網路不法正常連線 在 Live 環境下執行列表機設定,連接到 localhost 時,出現 httpConnectionEncrypt failed 錯誤。到命令列下重新起動 cups 服務會出現下面訊息:

sudo /etc/init.d/cupsys restart
* Restarting Common Unix Printing System: cupsd
/usr/sbin/cupsd: error while loading shared libraries: /lib/tls/i686/cmov/libc.so.6:  cannot apply additional memory protection after relocation: Permission denied

原因是在 Ubuntu 在 7.10 之後加入了一個與安全性相關的 framework : Apparmor (由 Novell 開發,主要對打的是 RH 的 SELinux) 。主要是針對應用程 式存取時透過對記憶體保護的方式來達到相對類似 SELinux 的效果。由於目前他 在 stack filesystem (如: unionfs ) 有些 bug ,所以會導致有些 service 無 法正常起動。

解決方式有兩種:

1. 在Live 環境 中先停止 apparmor 服務再新啟動 cupsys

sudo /etc/init.d/apparmor stop
sudo /etc/init.d/cupsys restart
  • 要配和 persistent 模式,才能維持設定。

2. 重包 initrdlive.img 將附件中的檔案 42disable_apparmor.tgz Δ 複製到 ~/tux2live/initrd-live.skel/scripts/casper-bottom 下,重新產生一個 initrdlive.img

sudo ./tux2live -b --mkinitrd

再把做出來的 initrdlive.img 取代掉原先的 usb 中對應位置的 initrdlive.img 即可。如果要重包 ISO 在加入 --mkiso 參數即可。

  • Memory protection 不止 cups 會遇到,像 mysql 服務也會遇到類似的現象。這次的問題也會一併加 到 to do list 中。

註:AppArmor 相關

Q: 在 Live 環境下執行 sun-java* 的 java 會出現 Error: could not find libjava.so 的問題

在 live 環境下執行

sudo ln -s / /filesystem.squashfs
  • 目的讓 java 在執行時找得到 libjava.so . 這個可能是 sun-java 本身的 bug 尤其又搭配上 unionfs 檔案系統。像在 OTG 上所裝的的 gij ,就可以正常的使用 java.
  • 其中可以 strace 來追蹤從 system call 執行 java 時所發生的問題點
strace java

附上參考資料如下:

Q: 使用 downloader:1 在 Ubuntu 8.10 環境下打包,之後在開機時會掉到 busybox 的問題

  • 主要原因是在 initrd 階段 udev 無法正確的對應到正確 device path (ex: /dev/sr0 --> /dev/scd0),但實際上已經抓的到光碟機裝置
  • 解決:將附件中的檔案 20-names.rules.tgz Δ 複製原先的 ~/tux2live/initrd-live.skel/etc/udev/rules.d/20-names.rules 下,重新產生一個 initrdlive.img 即可

Attachments