一般常見問題
一般性問題 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 .... ...
- 像 Asus Eee PC 需要指定 vga 模式為 vga=785
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 相關
- http://www.novell.com/linux/security/apparmor/
- https://help.ubuntu.com/community/AppArmor
- http://forum.icst.org.tw/phpBB2/viewtopic.php?t=9114&view=previous&sid=645733d89033f882e7e30ccf0e584f4b
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
附上參考資料如下:
- http://ubuntuforums.org/showthread.php?t=226161
- http://lists.alioth.debian.org/pipermail/debian-live-devel/2007-January/000739.html
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