LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: home_king

gentoo的中文LIVECD──ibox

[复制链接]
发表于 2004-10-24 12:35:50 | 显示全部楼层
只能用于intel的cpu阿
本来还想试试看的
 楼主| 发表于 2004-10-24 12:39:52 | 显示全部楼层
mkxorgconf

  1. #!/bin/sh

  2. #
  3. # Auto-configure Xorg
  4. #
  5. # Author: home_king <home_king@163.com>
  6. # to go with IBOX LIVECD
  7. #

  8. IBOXCONF=xorg.conf.ibox
  9. TEMPFILE=mkxorgconf.tmpfile

  10. errhandler(){
  11.         message=${1:-"Terminated!"}
  12.         echo "$message"
  13.         [ -n $TEMPFILE ] && rm -f $TEMPFILE
  14.         exit 1
  15. }

  16. showinfo(){
  17.         echo -n ">>> "
  18.         echo $1
  19. }

  20. trap errhandler INT TERM

  21. # Check the dependent tools
  22. qpkg -I > $TEMPFILE
  23. grep hwsetup $TEMPFILE 2>&1 >/dev/null || errhandler "No hwsetup...terminated!"
  24. grep hwdata-knoppix $TEMPFILE 2>&1 >/dev/null || errhandler "No hwdata...terminated!"
  25. grep ddcxinfo-knoppix $TEMPFILE 2>&1 >/dev/null || errhandler "No ddcxinfo-knoppix...terminated!"  

  26. # Create an initial configuration file for Xorg by itself
  27. /usr/X11R6/bin/Xorg -configure 2>&1 >/dev/null

  28. # ibox-autoconfig handles it on early stage???
  29. rm -f /etc/sysconfig/knoppix
  30. hwsetup -p

  31. # Adjust xmouse
  32. showinfo "Creating mouse section..."
  33. . /etc/sysconfig/mouse
  34. if [ "$XMOUSETYPE" = "PS/2" ]; then
  35.         # Check wheel enable
  36.         echo $FULLNAME | grep -i wheel 2>&1 >/dev/null && XMOUSETYPE="IM${XMOUSETYPE}"
  37. fi
  38. cat > $TEMPFILE <<EOF
  39. Section "InputDevice"
  40.         Identifier  "Mouse0"
  41.         Driver      "mouse"
  42.         Option            "Protocol"                "@P@"
  43.         Option            "Device"                "@D@"
  44.         Option      "ZAxisMapping"        "4 5"       
  45. EndSection
  46. EOF
  47. sed -e "s|@P@|$XMOUSETYPE|;s|@D@|$DEVICE|" $TEMPFILE > $IBOXCONF

  48. getsection(){
  49.     section=$1
  50.     identifier=$2
  51.     file=$3
  52.     if [ "$identifier" = "NULL" ]; then
  53.         sed -n '/^Section "'"$section"'"/,/^EndSection/p' $file
  54.     else
  55.         awk '{if($0~/^Section "'"$section"'"/){flag=1;tmpstr=$0}if(flag==1 && $0 ~/"'"$identifier"'"/){flag=2;print tmpstr}if(flag==2 && $0~/^EndSection/){flag=0;print}if(flag==2)print}' $file
  56.     fi
  57. }

  58. showinfo "Creating ServerLayout section..."
  59. getsection ServerLayout "X.org Configured" xorg.conf.new >> $IBOXCONF

  60. showinfo "Creating Files section..."
  61. getsection Files NULL xorg.conf.new > $TEMPFILE
  62. MYFONTDIR="/usr/share/fonts/ttf/zh_CN"
  63. [ -n "$MYFONTDIR" ] && sed '/^EndSection/ ! {H;d};${x;s|$|\n\tFontPath\t"'"$MYFONTDIR"'"|;G}' $TEMPFILE >> $IBOXCONF

  64. showinfo "Creating Modules section..."
  65. getsection Module NULL xorg.conf.new >> $IBOXCONF

  66. showinfo "Creating InputDevice section..."
  67. getsection InputDevice Keyboard0 xorg.conf.new >> $IBOXCONF

  68. showinfo "Creating Monitor section..."
  69. getsection Monitor NULL xorg.conf.new > $TEMPFILE
  70. ddcxinfo-knoppix -monitor | awk '{if($0~/VertRefresh/)print;if($0~/HorizSync/)print}' | \
  71. awk '{ddcdata[NR]=$0}END{ while( (getline < "'"$TEMPFILE"'") > 0 ) { if (flag==0 && $0~/HorizSync/) {flag=1;print ddcdata[1]}; if(flag==1 && $0~/VertRefresh/) {flag=0;print ddcdata[2];continue}; if(flag==0)print}}' >> $IBOXCONF

  72. showinfo "Creating Device section..."
  73. getsection Device NULL xorg.conf.new > $TEMPFILE
  74. # pre-match to help the later video card adjustment.
  75. sed 's/\([[:blank:]]*Driver[[:blank:]]*\)".*"/\1"@VIDEOCARD@"/' $TEMPFILE >> $IBOXCONF

  76. showinfo "Creating Others..."
  77. cat >> $IBOXCONF <<EOF
  78. Section "Screen"
  79.         Identifier "Screen0"
  80.         Device     "Card0"
  81.         Monitor    "Monitor0"
  82.         DefaultDepth        24
  83.         SubSection "Display"
  84.                 Viewport   0 0
  85.                 Depth     1
  86.         EndSubSection
  87.         SubSection "Display"
  88.                 Viewport   0 0
  89.                 Depth     4
  90.         EndSubSection
  91.         SubSection "Display"
  92.                 Viewport   0 0
  93.                 Depth     8
  94.         EndSubSection
  95.         SubSection "Display"
  96.                 Viewport   0 0
  97.                 Depth     15
  98.         EndSubSection
  99.         SubSection "Display"
  100.                 Viewport   0 0
  101.                 Depth     16
  102.         EndSubSection
  103. #         SubSection "Display"
  104. #                 Viewport   0 0
  105. #                 Depth     24
  106. #                 Modes        "1024x768"
  107. #                 Virtual        1024 768
  108. #         EndSubSection
  109.        
  110.                SubSection      "Display"
  111.                 Depth   24
  112.                 Modes   "1024x768" "800x600" "640x480"
  113.         EndSubSection
  114. EndSection

  115. Section "dri"
  116.   Mode 0666
  117. EndSection

  118. # Section "Extensions"
  119. # Option "Composite" "True"
  120. # EndSection
  121. EOF

  122. # clean
  123. rm -f xorg.conf.new

  124. # --Add here to enable 3D support for your video card--
  125. source /etc/sysconfig/xserver
  126. case $XMODULE in
  127.     nv)
  128.         # Load modules for NVIDIA because hotplug can not do it automatically.
  129.         modprobe nvidia
  130.         if [ $? -eq 0 ]; then
  131.             # replace the Xorg builtin module with NVDIA module.
  132.             sed 's/@VIDEOCARD@/nvidia/' $IBOXCONF > $TEMPFILE
  133.             mv $TEMPFILE $IBOXCONF
  134.             # adjust MODULE section
  135.             sed 's/^[[:blank:]]*Load[[:blank:]]*"dri"/#&/' $IBOXCONF > $TEMPFILE
  136.             mv $TEMPFILE $IBOXCONF
  137.             # to make X server use the nvidia GLX libraries.
  138.             opengl-update nvidia
  139.         else
  140.             sed 's/@VIDEOCARD@/nv/' $IBOXCONF > $TEMPFILE
  141.             mv $TEMPFILE $IBOXCONF            
  142.         fi
  143.         ;;
  144.     radeon)
  145.         sed 's/@VIDEOCARD@/ati/' $IBOXCONF > $TEMPFILE
  146.         mv $TEMPFILE $IBOXCONF       
  147.         ;;
  148.     *)
  149.         sed 's/@VIDEOCARD@/'"$XMODULE"'/' $IBOXCONF > $TEMPFILE
  150.         mv $TEMPFILE $IBOXCONF
  151.         ;;
  152. esac
  153. rm -f $TEMPFILE

  154. # post-install
  155. showinfo 'place to /etc/X11/xorg.conf'
  156. mv $IBOXCONF /etc/X11/xorg.conf

  157. showinfo 'All done! Run startx after you login in.;-)'
复制代码
发表于 2004-10-24 13:10:11 | 显示全部楼层
好象只depend on ddcxinfo-knoppix吧
发表于 2004-10-24 13:29:08 | 显示全部楼层
恭喜教主,贺喜教主。

我想问一下这个livecd对sata支持如何,特别是如果要做硬盘安装脚本的情况下,在只启动一个minirootfs的情况下,如何对硬件进行检测,加载驱动?
 楼主| 发表于 2004-10-24 13:37:56 | 显示全部楼层
最初由 snoopyxp 发表
恭喜教主,贺喜教主。

我想问一下这个livecd对sata支持如何,特别是如果要做硬盘安装脚本的情况下,在只启动一个minirootfs的情况下,如何对硬件进行检测,加载驱动?

应该可以吧。所有相关的SATA驱动已经编译成模块了。
有SATA的兄弟帮忙测试一下吧。

我不太明白你说的minirootfs。
发表于 2004-10-24 16:10:39 | 显示全部楼层
哦,我也在做自己的livecd,基于rhel3的,可能咱们两个采用的技术方式不太一样。
我想你也是要用到initrd里面的小文件系统的吧,如果要把硬盘安装做到真实系统(即光盘上用squashfs压缩的系统)启动之前就执行,譬如在boot时输入intall,这个时候由于initrd大小的限制导致放不下很多驱动模块,而且硬件检测也很用问题,不知你是怎么考虑的,或有其他方案?
希望和你多交流
 楼主| 发表于 2004-10-24 16:23:01 | 显示全部楼层
最初由 snoopyxp 发表
哦,我也在做自己的livecd,基于rhel3的,可能咱们两个采用的技术方式不太一样。
我想你也是要用到initrd里面的小文件系统的吧,如果要把硬盘安装做到真实系统(即光盘上用squashfs压缩的系统)启动之前就执行,譬如在boot时输入intall,这个时候由于initrd大小的限制导致放不下很多驱动模块,而且硬件检测也很用问题,不知你是怎么考虑的,或有其他方案?
希望和你多交流

明白兄弟的意思了。
由于ibox的定位在于livecd,所以ibox-installer将在ibox上面执行,也就是说,不是传统意义上的裸机安装。

当然,如果要裸机安装,也不难。
我给出我自己的简单做法吧。
只需要磁盘驱动(如SATA),文件系统模块,以及一些静态链接的同步工具如rsync即可,在linuxrc阶段挂载sqaushfs,然后在识别到的硬盘上格式化指定分区(可使用静态链接的cfdisk作用户交互进行分区操作),使用rsync同步即可。
整个过程建基于shell,所以很有限制,因为目前最主流的initrd工具链就是busybox,而busybox提供的静态shell如ash并不好用。
另外,initrd的空间可通过ramdisk=xxx来调整,所以可容纳足够体积的模块。这点不用担心。

至于复杂的做法,就要用C语言来编写了,这个恐怕难度很大。
发表于 2004-10-24 16:44:41 | 显示全部楼层
唉,我已经把initrd调整到16兆了,结果还是放不下足够的模块,toolchain也用的是静态编译的busybox,但硬件检测工具放进去就占了不少空间(硬件信息库就接近3M),看来这种安装方式只用shell确实有些难度。
 楼主| 发表于 2004-10-24 16:51:17 | 显示全部楼层
最初由 snoopyxp 发表
唉,我已经把initrd调整到16兆了,结果还是放不下足够的模块,toolchain也用的是静态编译的busybox,但硬件检测工具放进去就占了不少空间(硬件信息库就接近3M),看来这种安装方式只用shell确实有些难度。

其实我觉得你的想法有点奇怪。

initrd阶段的硬盘安装操作,你大可以把光盘的压缩根文件系统(这个系统不需要很大,比如说一个100M左右的squashfs文件系统)解压然后挂载上,然后利用上面的工具来进行安装操作;因为你的initrd已经如此大,就已经不能做成floppy based了,那既然如此,何必把自己的思考限制在单纯的initrd上呢?况且,挂载根文件系统对用户来说是透明的。

这种技术在redhat的安装盘上就有体现。我的看法是,不可能也没必要把硬盘安装的舞台限制在一个小小的initrd上。
发表于 2004-10-24 16:57:22 | 显示全部楼层
你说的很对,但是我这里有客观限制。
我做的livecd主要是做公司里的研发平台使用,基系统加gnome加fluxbox在加一些toolchain已经使光盘必须得用超刻才能刻上了,所以想安装程序尽可能的小,不过要是我自己用的话,我会采用你那中方案的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表