LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1257|回复: 9

archlinux装完基本系统后的自动安装脚本 【xfce桌面】

[复制链接]
发表于 2011-8-16 07:38:03 | 显示全部楼层 |阅读模式
这个“自动安装脚本”算不上自动安装,是在装完基本系统后用来装xfce桌面环境以及更改相关的配置文件(sudo、xinit、inittab、useradd、slim.conf、rc.conf、etc.)的脚本
----------
在虚拟机和实体机上都试了下应该没错了



  1. #!/bin/bash
  2. # expected environment : freshly installed archlinux, login : root.

  3. echo "Are you connected to internet ? If not, please Ctrl+C and reload this script when connected"
  4. echo "Otherwise, press ENTER to continue installation"
  5. read var_dummy

  6. echo "Creation of the user : please type in your user name :"
  7. read var_username
  8. useradd -u 1000 -g users -G audio,lp,storage,optical,video,wheel,games,power,network -d /home/$var_username/ -s /bin/bash -m $var_username
  9. echo "You will now be asked to create the password for this user:"
  10. passwd $var_username

  11. # Add servers for pacman to find packages
  12. cat >> /etc/pacman.conf << EOF
  13. [multilib]
  14. Include = /etc/pacman.d/mirrorlist

  15. [archlinuxfr]
  16. Server = http://repo.archlinux.fr/`arch`

  17. EOF

  18. # Install packages

  19. pacman-db-upgrade
  20. pacman -Syyu
  21. pacman -S acpi acpid alsa-oss alsa-plugins alsa-utils  cpufrequtils cups dbus gstreamer0.10-base-plugins iptables laptop-mode-tools mesa net-tools netcfg ntp pm-utils rfkill rsync sudo ttf-dejavu vim wireless_tools xf86-input-evdev xorg-server xorg-utils xorg-xinit xorg-xinput yaourt  gamin gnome-icon-theme gnome-keyring gvfs-afc network-manager-applet networkmanager slim slim-themes archlinux-themes-slim hicolor-icon-theme xfce4 xfce4-goodies  ttf-dejavu  wqy-zenhei ffmpeg mplayer scrot



  22. # Fix sound issue
  23. cat > /home/$var_username/.asoundrc << EOF
  24. pcm.!default{
  25. type hw
  26. card 1
  27. device 0
  28. }
  29. ctl.!default{
  30. type hw
  31. card 1
  32. device 0
  33. }
  34. EOF
  35. chown $var_username:users /home/$var_username/.asoundrc

  36. # Configure video settings for X
  37. if [[ ! -e /etc/X11/xorg.conf.d ]]
  38. then
  39.         mkdir /etc/X11/xorg.conf.d
  40. fi
  41. #i dont know how write  you can write yourself

  42. echo "please type in your graphic card's type (intel,ati,nv,vesa,nouveau,vmware,...)"
  43. echo "I will use pacman -S xf86-video-<the type> to install the driver"
  44. read card_type
  45. pacman -S xf86-video-$card_type



  46. # Install clickpad support
  47. yaourt -S xf86-input-synaptics-clickpad


  48. # Add new daemons, remove old ones, disable hwclock and remove netfs since I don't use it. add it if you need it
  49. sed '/DAEMONS=/c\DAEMONS=(!hwclock dbus syslog-ng networkmanager !laptop-mode acpid @alsa @cupsd @cpufreq ntpd crond)' </etc/rc.conf >/etc/rc.conf.new
  50. mv -f /etc/rc.conf.new /etc/rc.conf

  51. # Slim login manager ; change theme
  52. mv /usr/share/slim/themes/archlinux-darch-grey /tmp/
  53. mv /usr/share/slim/themes/default /tmp/
  54. rm -r /usr/share/slim/themes/*
  55. mv /tmp/archlinux-darch-grey /usr/share/slim/themes
  56. mv /tmp/default /usr/share/slim/themes
  57. sed '/^current_theme/c\current_theme archlinux-darch-grey' </etc/slim.conf >/etc/slim.conf.new
  58. mv -f /etc/slim.conf.new /etc/slim.conf

  59. # XFCE login, and thunar launched as a daemon (note that the part with 'if [ -d /etc/X11/xinit/xinitrc.d ]" is not present, to avoid mounting problems when logged as regular user)
  60. cat  >/home/$var_username/.xinitrc << EOF
  61. #!/bin/sh
  62. #
  63. # ~/.xinitrc
  64. #
  65. # Executed by startx (run your window manager from here)

  66. exec ck-launch-session startxfce4
  67. thunar --daemon &
  68. EOF
  69. chown $var_username:users /home/$var_username/.xinitrc

  70. # Boot to runlevel 5 now, and run slim then
  71. sed -e 's/id:3/#id:3/' -e 's/#id:5/id:5/' -e 's|x:5:respawn:/usr/bin/xdm|#x:5:respawn:/usr/bin/xdm|' -e 's|#x:5:respawn:/usr/bin/slim|x:5:respawn:/usr/bin/slim|' </etc/inittab >/etc/inittab.new
  72. mv -f /etc/inittab.new /etc/inittab



  73. # add user to sudoers,and the sudo poweroff without password

  74. sed  -e "/^root/a $var_username ALL=(ALL) ALL" -e  "/^root/a $var_username ALL=(ALL) NOPASSWD : /sbin/poweroff " </etc/sudoers >/etc/sudoers.new
  75. mv -f /etc/sudoers.new /etc/sudoers
  76. chmod 0440 /etc/sudoers


  77. # Reboot, because it's quick and I'm too lazy to learn how to start all the daemons and others.
  78. reboot

复制代码


还有cpufreq那部分没写,xorg.d那个目录也没写让他自动检测吧,会写的帮忙写吧

中文本地化脚本在5楼。


pm_utils 使用见wiki :https://wiki.archlinux.org/index.php/Pm-utils
求完善

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2011-8-16 11:46:41 | 显示全部楼层
随便写的自动配置cpufreq (前提 pacman  -S  cpufrequtils)


  1. #!/bin/bash
  2. #configure cpufreq
  3. echo "acpi-cpufreq " >>/etc/modprobe.d/mymod.conf
  4. echo "cpufreq_userspace" >>/etc/modprobe.d/mymod.conf
  5. echo "cpufreq_ondemand " >>/etc/modprobe.d/mymod.conf
  6. #以上可以写到rc.conf的modules里代替

  7. sed  -n '/^DAEMON/p'   /etc/rc.conf >temp1
  8. sed 's/)/  @cpufreq ) /' <temp1 >temp2
  9. sed  's/^DAEMON/#DAEMON/'   </etc/rc.conf >/etc/rc.conf.new
  10. mv -f /etc/rc.conf.new /etc/rc.conf
  11. cat temp2 >>/etc/rc.conf
  12. rm temp1
  13. rm temp2
  14. rm /etc/rc.conf.new


  15. cat >>/etc/rc.local <<EOF
  16. (sleep 30 && echo -n 25 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold) &
  17. (sleep 30 && echo -n 10 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor)&
  18. (sleep 30 && echo -n 40 > /sys/devices/system/cpu/cpufreq/conservative/up_threshold) &
  19. (sleep 30 && echo -n 25 > /sys/devices/system/cpu/cpufreq/conservative/down_threshold) &

  20. EOF

  21. cat >/etc/conf.d/cpufreq <<EOF
  22. governor="userspace"

  23. min_freq="1GHz"
  24. max_freq="2GHz"

  25. EOF

  26. echo 'cpufreq-set -g userspace -f 1.00Ghz' >> ~/.xinitrc
  27. #if you have  a cpu with more than 2core
  28. echo 'cpufreq-set -c 1 -g userspace -f 1.00Ghz' >>~/.xinitrc
  29. echo 'cpufreq-set -c 2 -g userspace -f 1.00Ghz' >>~/.xinitrc
  30. echo 'cpufreq-set -c 3 -g userspace -f 1.00Ghz' >>~/.xinitrc
  31. #cpufreq-set -g ondemand
复制代码



.
回复 支持 反对

使用道具 举报

发表于 2011-8-16 12:05:38 | 显示全部楼层

  1. #!/bin/bash

  2. #time sudo ./quickinstall 2>&1 | tee ./log.txt

  3. export color=y
  4. PROFILE_DIR="profiles"
  5. SP_CUSTOM_DIR="${PROFILE_DIR}/sp_custom"
  6. DRY_RUN="n"
  7. TARGET=/dev/sda8
  8. DESTDIR=""
  9. LOG=""
  10. ERR_LOG=""
  11. PACKLIST=""
  12. QUICK_INSTALL="y"
  13. LISTDIR=""
  14. PACMAN=pacman
  15. #CUSTOM_REPO=/mnt/sda3/cpkg
  16. CACHE=""
  17. MOUNT_AUFS="n"
  18. MOUNT_TARGET="n"
  19. DOWNLOAD="n"
  20. PACKAGE_DIR=""
  21. INSTALL_ONLY="0"
  22. time=5




  23. RST="\033[1;0m"
  24. # regular colors
  25. K="\033[0;30m"    # black
  26. R="\033[0;31m"    # red
  27. G="\033[0;32m"    # green
  28. Y="\033[0;33m"    # yellow
  29. B="\033[0;34m"    # blue
  30. M="\033[0;35m"    # magenta
  31. C="\033[0;36m"    # cyan
  32. W="\033[0;37m"    # white
  33. # emphasized (bolded) colors
  34. EMK="\033[1;30m"
  35. EMR="\033[1;31m"
  36. EMG="\033[1;32m"
  37. EMY="\033[1;33m"
  38. EMB="\033[1;34m"
  39. EMM="\033[1;35m"
  40. EMC="\033[1;36m"
  41. EMW="\033[1;37m"
  42. # background colors
  43. BGK="\033[40m"
  44. BGR="\033[41m"
  45. BGG="\033[42m"
  46. BGY="\033[43m"
  47. BGB="\033[44m"
  48. BGM="\033[45m"
  49. BGC="\033[46m"
  50. BGW="\033[47m"

  51. HYB="\033[1;33;44m"
  52. HGK="\033[1;32;40m"
  53. HBK="\033[1;34;40m"
  54. HWK="\033[1;37;40m"
  55. HRK="\033[1;31;40m"

  56. plain() {
  57.         if [ $# -eq 2 ] && [ "$1" = "-n" ]; then
  58.                 if [ "${COLOR}" = "y" ]; then
  59.                         echo -n -e "$W$RST      $2$RST"
  60.                 else
  61.                         echo -n -e "      $2"
  62.                 fi
  63.         else
  64.                 if [ "${COLOR}" = "y" ]; then
  65.                         echo -e "$W$RST      $@$RST"
  66.                 else
  67.                         echo -e "      $@"
  68.                 fi
  69.         fi
  70. }
  71. msg() {
  72.         if [ "${COLOR}" = "y" ]; then
  73.                 echo -e "$EMB==>$RST$HWK $@$RST"
  74.         else
  75.                 echo -e "==> $@"
  76.         fi
  77. }
  78. msg2() {
  79.         if [ $# -eq 2 ] && [ "$1" = "-n" ]; then
  80.                 if [ "${COLOR}" = "y" ]; then
  81.                         echo -n -e "$HBK   ->$RST$W $2$RST"
  82.                 else
  83.                         echo -n -e "  -> $2"
  84.                 fi
  85.         else
  86.                 if [ "${COLOR}" = "y" ]; then
  87.                         echo -e "$HBK   ->$RST$W $@$RST"
  88.                 else
  89.                         echo -e "  -> $@"
  90.                 fi
  91.         fi
  92. }
  93. warn() {
  94.         if [ "${COLOR}" = "y" ]; then
  95.                 echo -e "\n$Y==> $(gettext "WARNING:") $@$RST"
  96.         else
  97.                 echo -e "\n ==> $(gettext "WARNING:") $@"
  98.         fi
  99. }
  100. error() {
  101.         if [ "${COLOR}" = "y" ]; then
  102.                 echo -e  "\n$HRK==> $(gettext "ERROR:") $@$RST"
  103.         else
  104.                 echo -e "\n==> $(gettext "ERROR:") $@"
  105.         fi
  106. }
  107. hgreen() {
  108.         if [ "${COLOR}" = "y" ]; then
  109.                 echo -e "$HGK      $@$RST"
  110.         else
  111.                 echo "      $@"
  112.         fi
  113. }
  114. green() {
  115.         if [ "${COLOR}" = "y" ]; then
  116.                 echo -e "$G      $@$RST"
  117.         else
  118.                 echo -e "      $@"
  119.         fi
  120. }
  121. yellow() {
  122.         if [ "${COLOR}" = "y" ]; then
  123.                 echo -e "$HYB$@$RST"
  124.         else
  125.                 echo -e "$@"
  126.         fi
  127. }

  128. info () {
  129.         if [ "${COLOR}" = "y" ]; then
  130.                 echo -e "$G      $@$RST"
  131.         else
  132.                 echo -e "      $@"
  133.         fi

  134. }

  135. usage ()
  136. {
  137.     echo "usage 程序名 [选项] 命令 <命令选项>"
  138.     echo " 一般选项:"
  139.     #echo "    -f               强制覆盖现有的工作目录等,全部重新制作"
  140.     echo "    -t TARGET        预安装的目标分区."
  141.     echo "    -c CACHE DIR     Arch软件包存储位置"
  142.     echo "    -C CUSTOM_REPO          本地自定义repo"
  143.     echo "    -d DESTDIR         工作文件临时挂载位置"
  144.     echo "    -l LOG_FILE       保存正常输出的log文件"
  145.     echo "    -e ERR_LOG_FILE     保存出错信息的log文件"
  146.     echo "    -p PACKLIST       包列表保存目录"
  147.     echo "    -m MOUNT_DIR     仅挂载指定目录的proc dev sys"
  148.     echo "    -u UMOUNT_DIR     仅卸载指定目录的proc dev sys"
  149.     echo "    -w                仅下载但不安装"
  150.     echo "    -n                仅测试不真正运行安装"
  151.     echo "    -h               本帮助信息."
  152.     exit $1
  153. }

  154. #error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; }
  155. #warn ()  { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; }
  156. #info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; }


  157. function get_pkgname () {
  158.    # $1  软件包清单
  159.    # 该函数将软件包清单中需要检测依赖关系的软件包以空格相隔返回到变量PKGNAME
  160.    pkgname=$(awk 'BEGIN {dep_pkg=""}{if ($1 !~ /^#+/) {if (NF == 1) {dep_pkg=dep_pkg " " $1}}}END {print dep_pkg}' $1)
  161. }
  162. function get_d_pkgname () {
  163.    # $1  软件包清单
  164.    # 该函数将软件包清单中无需检测依赖关系的软件包以空格相隔返回到变量PKGNAME
  165.    pkgname=$(awk 'BEGIN {nodep_pkg=""}{if ($1 !~ /^#+/) { if (NF == 2) {nodep_pkg=nodep_pkg " " $2}}}END {print nodep_pkg}' $1)
  166. }
  167. function get_all_pkgname () {
  168.    # $1  软件包清单
  169.    # 该函数将软件包清单中所有软件包以空格相隔返回到变量PKGNAME
  170.    pkgname=$(awk 'BEGIN {all_pkg=""}{if ($1 !~ /^#+/) { {all_pkg=nodep_pkg " " $1" "$2}}}END {print all_pkg}' $1)
  171. }

  172. function pac_install () {
  173.     if [ "${DRY_RUN}" = "y" ] ; then
  174.         echo "pkgname = $pkgname"
  175.         return 0
  176.     fi
  177.     if [ "$DOWNLOAD" = "n" ] ; then
  178.         $PACMAN -S -f --needed --noconfirm --config "${PACMANCONF}" --cachedir "$CACHE" -r "${DESTDIR}" $pkgname | tee -a ${LOG}
  179.     else
  180.         $PACMAN -S -w --needed --noconfirm --config "${PACMANCONF}" --cachedir "$CACHE" -r "${DESTDIR}" $pkgname | tee -a ${LOG}
  181.     fi
  182.     #echo "pkgname = $pkgname"
  183.         case $? in
  184.            #0) (green "软件包${pkgname/-d /} 安装成功! " | tee -a ${LOG} ) ; break;;
  185.            0) (green "软件包${pkgname/-d /} 安装成功! " | tee -a ${LOG} ) ;;
  186.        1)
  187.         if [ -e ${PACKLIST}/available.list ] ; then
  188.             pkgname=${pkgname/-d /}
  189.             for pkg in $pkgname; do
  190.                 if [ "x$(grep $pkgname ${PACKLIST}/available.list)" != "x" ]; then
  191.                     error "安装$pkgname出错" | tee -a ${LOG}
  192.                     #cat $log >> ${BUILDLOG}/${mod}-errors.log
  193.                     error "安装$pkgname出错" | tee -a ${ERR_LOG}
  194.                     #break
  195.                 else
  196.                     error "现有软件仓中无 $pkgname, 忽略" | tee -a ${LOG}
  197.                     error "现有软件仓中无 $pkgname, 忽略" | tee -a ${ERR_LOG}
  198.                     #break
  199.                 fi
  200.             done
  201.         fi
  202.         ;;
  203.             #255) exit;;
  204.     esac
  205.     #echo "pac_install over!!!"
  206. }

  207. function check_continue()
  208. {
  209.     if [ "${DRY_RUN}" = "y" ] ; then
  210.         info "${FUNCNAME} 检测到是模拟运行,返回"
  211.         return 1
  212.     fi
  213.     if [ "$DOWNLOAD" = "y" ] ; then
  214.         info "${FUNCNAME} 检测到是下载模式,返回"
  215.         return 1
  216.     fi
  217.     return 0
  218. }


  219. # $1 预创建repo的文件夹——软件包存放位置
  220. # $2 预创建的repo仓库名称
  221. create_repo ()
  222. {
  223.         for pkgfile in $(ls $1/*.pkg.tar.gz); do
  224.                 repo-add $1/$2.db.tar.gz $pkgfile
  225.         done
  226. }

  227. function do_mount_info()  {
  228.    if [ -d ${DESTDIR}/proc ] ; then
  229.        if [ -d ${DESTDIR}/sys ] ; then
  230.            mount -t proc proc ${DESTDIR}/proc
  231.            mount -t sysfs sysfs ${DESTDIR}/sys
  232.            mount -o bind /dev ${DESTDIR}/dev
  233.            mount -t devpts devpts ${DESTDIR}/dev/pts/
  234.        fi
  235.    fi
  236. }


  237. function do_umount_info()  {
  238.    umount  ${DESTDIR}/dev/pts/
  239.    umount  ${DESTDIR}/dev
  240.    umount  ${DESTDIR}/sys
  241.    umount  ${DESTDIR}/proc
  242. }

  243. function check_param()
  244. {
  245.     if [ "$EUID" != "0" ]; then
  246.         echo "错误: 必须以root用户运行本制作脚本."
  247.         exit 1
  248.     fi

  249.     if [ "${arch}" != "i686" ] && [ "${arch}" != "x86_64" ] ; then
  250.         error "arch != i686 and arch != x86_64"
  251.         exit 1
  252.     fi
  253.     if [ "x${DESTDIR}" = "x" ] ; then
  254.         DESTDIR="$(pwd)/install_dir_${arch}"
  255.     fi
  256.     if [ "x${CACHE}" = "x" ] ; then
  257.         CACHE="${DESTDIR}/var/cache/pacman/pkg"
  258.     elif [ ! -d ${CACHE} ] ; then
  259.         CACHE="${DESTDIR}/var/cache/pacman/pkg"
  260.     fi
  261.     if [ "x${LISTDIR}" = "x" ] ; then
  262.         LISTDIR="list-${arch}"
  263.     fi
  264.     if [ "x${PACKLIST}" = "x" ] ; then
  265.         PACKLIST="$(pwd)/packlist"
  266.     fi
  267.     if [ "x${LOG}" = "x" ] ; then
  268.         LOG="$(pwd)/install_log.txt"
  269.     fi
  270.     if [ "x${ERR_LOG}" = "x" ] ; then
  271.         ERR_LOG="$(pwd)/install_error_log.txt"
  272.     fi
  273.     if [ "x${OVERLAY}" = "x" ] ; then
  274.         USE_OVERLAY="n"
  275.     elif [ ! -d ${OVERLAY} ] ; then
  276.         USE_OVERLAY="n"
  277.     fi
  278.     # 装载软件仓等相关配置
  279.     PACMANCONF="$(pwd)/${PROFILE_DIR}/pacman_${arch}.conf"
  280.     if [ ! -f "${PACMANCONF}" ]; then
  281.         error "count load pacman.conf"
  282.         exit 1
  283.     fi
  284.         # 更新安装时候的软件缓存位置
  285. #        [ -f $PACMANCONF ] && sed -i "s%.*CacheDir.*%CacheDir = $CACHE%g" $PACMANCONF
  286.     if [ "x${PACKAGE_DIR}" = "x" ] ; then
  287.         PACKAGE_DIR=$(pwd)/${arch}-packages
  288.     fi
  289.     if [ "x${PKGFILE}" = "x" ] ; then
  290.         PKGFILE="${PACKAGE_DIR}/${arch}-packages.list"
  291.     fi
  292.     if [ "x${UMOUNT_DIR}" != "x" ] ; then
  293.         DESTDIR=${UMOUNT_DIR}
  294.         info "start umount ${DESTDIR}"
  295.         do_umount_info
  296.         info "umount ${DESTDIR} over"
  297.         exit 0
  298.     fi
  299.     if [ "x${MOUNT_DIR}" != "x" ] ; then
  300.         DESTDIR=${MOUNT_DIR}
  301.         info "start mount ${DESTDIR}"
  302.         do_mount_info
  303.         info "mount ${DESTDIR} over"
  304.         exit 0
  305.     fi
  306. }

  307. function grub_install_tips()
  308. {
  309.     #>/tmp/grub.log 2>&1"
  310.     ROOTDEV="/dev/sdX"
  311.     info "=============================================="
  312.     info "run $DESTDIR/sbin/grub-install --recheck --grub-shell=$DESTDIR/sbin/grub --root-directory=$DESTDIR $ROOTDEV"
  313.     info "vim $DESTDIR/etc/mkinitcpio.conf"
  314.     info "run pacman -S kernel26"
  315.     info "run locale-gen"
  316.     info "vim $DESTDIR//etc/mkinitcpio.d/kernel26.kver"
  317.     info "/sbin/mkinitcpio -p kernel26"
  318.     info "-k KERNELVERSION Use KERNELVERSION. default: 2.6.35-ARCH"
  319.     info "-b BASEDIR       Use BASEDIR. default: /"
  320.     info "创建启动镜像"
  321.     info "${DESTDIR}/sbin/mkinitcpio -b ${DESTDIR} -c ${DESTDIR}/etc/mkinitcpio.conf -g ${DESTDIR}/boot/kernel26.img"
  322.     info "${DESTDIR}/sbin/mkinitcpio -b ${DESTDIR} -c ${DESTDIR}/etc/mkinitcpio.conf -g ${DESTDIR}/boot/kernel26-fallback.img -S autodetect"
  323.     info "vim $DESTDIR/boot/grub/menu.lst"
  324.     info "=============================================="
  325. }


  326. function show_param()
  327. {
  328.     info "=============================="
  329.     info "arch=${arch}"
  330.     info "DESTDIR=${DESTDIR}"
  331.     info "CACHE=${CACHE}"
  332.     info "LISTDIR=${LISTDIR}"
  333.     info "PACMANCONF=${PACMANCONF}"
  334.     info "DOWNLOAD=${DOWNLOAD}"
  335.     info "DRY_RUN=${DRY_RUN}"
  336.     info "PKGFILE=${PKGFILE}"
  337.     info "SP_CUSTOM_DIR=${SP_CUSTOM_DIR}"
  338.     info "=============================="
  339.     echo ""
  340.     grub_install_tips
  341.     echo ""
  342.     echo " 需要制作的模块为: $(echo ${MODULES} | tr -s "\n" " ")"
  343.     info "you can run as 'time sudo ./quickinstall 2>&1 | tee ./log.txt'"
  344.     hgreen "***如果以上不是你想要的,Ctrl+C 终止程序的执行,并检测相关配置文件.***"
  345.     echo -n "                            "; yellow "5 秒后开始程序"
  346.     echo "-----------------------------------------------------------------------------"
  347.     sleep $time
  348.     echo ""
  349. }

  350. unset MODULES

  351. if [ -f $(pwd)/${PROFILE_DIR}/qi.conf ] ; then
  352.     source $(pwd)/${PROFILE_DIR}/qi.conf
  353. else
  354.     error "count load $(pwd)/${PROFILE_DIR}/qi.conf"
  355.     exit 1
  356. fi

  357. #实际需要的模块 (去掉#)
  358. MODULES=$(echo $MODULES | tr -s " " "\n" | grep -v "#")
  359. EXTRAMODULES=$(echo $EXTRAMODULES | tr -s " " "\n" | grep -v "#")

  360. # 检测、配置输入的命令
  361. while getopts 'c:C:d:e:l:m:np:t:u:wnvSIh' arg; do
  362.     case "${arg}" in
  363.         c) CACHE="${OPTARG}" ;;
  364.         C) CUSTOM_REPO="${OPTARG}" ;;
  365.         d) DESTDIR="${OPTARG}" ;;
  366.     e) ERR_LOG="${OPTARG}" ;;
  367.     l) LOG="${OPTARG}" ;;
  368.         m) MOUNT_DIR="${OPTARG}" ;;
  369.     n) DRY_RUN="y";;
  370.     p) PACKLIST="${OPTARG}" ;;
  371.         t) TARGET="${OPTARG}" ;;
  372.         u) UMOUNT_DIR="${OPTARG}" ;;
  373.         v) QUIET="n" ;;
  374.     w) DOWNLOAD="y";;
  375.     S) SP_CUSTOM_DIR="";;
  376.     I) INSTALL_ONLY="1";;
  377.     h|?) usage 0 ;;
  378.     *) echo "无效参数 '${arg}'"; usage 1 ;;
  379.     esac
  380. done
  381. APPNAME=$(basename "${0}")
  382. check_param
  383. show_param

  384. info "准备文件系统"
  385. if [ "$DOWNLOAD" = "y" ] ; then
  386.     info "仅是下载文件,不进行安装"
  387. fi


  388. info "开始安装程序"

  389. old_list=""
  390. new_list=""
  391. install_list=""
  392. no_pkg_list=""

  393. echo "MODULES=$MODULES"

  394. function cmd_install ()  {
  395.     local old_list new_list install_list no_pkg_list
  396.     for mod in ${MODULES}; do
  397.         echo "mod = $mod"
  398.         old_list="${PROFILE_DIR}/$LISTDIR/${mod}.list"
  399.         new_list="${PACKLIST}/${mod}.new"
  400.         install_list="${PACKLIST}/${mod}.install"
  401.         no_pkg_list="${PACKLIST}/${mod}.no_pkg"

  402.         [ "x$(tail -1 ${old_list})" = "x" ] || (echo >>"${old_list}")
  403.         cat "${old_list}" | sed -r "s/#.*//g" | sed -r "/^$/d" > ${new_list}
  404.         green "完成!" | tee -a ${LOG}

  405.         rm -f $install_list > /dev/null
  406.         rm -f $no_pkg_list > /dev/null
  407.         cat ${new_list} | while read pkgname; do
  408.         pkgname=${pkgname#-d }
  409.         if grep " $pkgname " ${PACKLIST}/available.list >/dev/null; then
  410.             echo "$pkgname" >> $install_list
  411.             continue
  412.         elif grep "$pkgname " ${PACKLIST}/group_detail.list >/dev/null; then
  413.             echo "$pkgname" >> $install_list
  414.             continue
  415.         else
  416.             echo "$pkgname" >> $no_pkg_list
  417.             warn "模块 ${mod} 中指定的软件 $pkgname 无法从当前设定的软件仓中找到。" | tee -a ${LOG}
  418.             warn "模块 ${mod} 中指定的软件 $pkgname 无法从当前设定的软件仓中找到。" | tee -a ${ERR_LOG}
  419.         fi
  420.     done
  421.     rm -f  ${PACKLIST}/${mod}.order > /dev/null
  422.     if [ "${QUICK_INSTALL}" = "y" ] ; then
  423.         get_pkgname $install_list
  424.         #${PROFILE_DIR}/$LISTDIR/${mod}.list
  425.         if [ "x${pkgname}" != "x" ] ; then
  426.             echo "$pkgname" >> ${PACKLIST}/${mod}.order
  427.             pac_install
  428.         fi
  429.     else
  430.         #cat  "${PACKLIST}/${mod}.new" | while read pkgname; do
  431.         cat  "${install_list}" | while read pkgname; do
  432.             [ "x$pkgname" = "x" ] && continue
  433.             echo "$pkgname" >> ${PACKLIST}/${mod}.order
  434.             pac_install
  435.             done

  436.     fi

  437.    
  438.     #$PACMAN -Sy --noconfirm --config "${PACMANCONF}" --cachedir "${CACHE}" -fr "${DESTDIR}"
  439.     #cat  "$(pwd)/list" | grep -v "^#" | while read pkgname; do
  440.     #echo "安装 $pkgname"
  441.     #$PACMAN -S -f --needed --noconfirm --config "${PACMANCONF}" --cachedir "$CACHE" -r "${DESTDIR}" $pkgname
  442.     #done
  443. done
  444. }
  445. function custom_install()
  446. {
  447.     check_continue
  448.     if [ $? -ne 0 ] ; then
  449.         warn "${FUNCNAME} 检测到返回"
  450.     fi

  451.    # 导出SP_CUSTOM_DIR特别设置文件(如果有)清单
  452.    if [ "x${SP_CUSTOM_DIR}" != "x" ]; then
  453.         msg2 -n "导出特别设置文件清单..." | tee -a ${LOG}
  454.         find ${SP_CUSTOM_DIR} -type f -name "*" >${PACKLIST}/sp_custom.list
  455.         sed -i "s#${SP_CUSTOM_DIR}/##g" ${PACKLIST}/sp_custom.list
  456.         green "完成!" | tee -a ${LOG}
  457.    fi


  458.         # 特别定制文件       
  459.         if [ "x${SP_CUSTOM_DIR}" != "x" ]; then
  460.                 msg2 "拷贝特别设置${SP_CUSTOM_DIR}到目标系统..." | tee -a ${LOG}
  461.                 cat ${PACKLIST}/sp_custom.list | while read file; do
  462.                         [ -f ${DESTDIR}/$file ] && cp -f ${SP_CUSTOM_DIR}/$file $DESTDIR/$file
  463.                 done
  464.                 if [ "x$(ls ${DESTDIR}/var/lib/pacman/local | grep "glibc-")" != "x" ]; then
  465.                         [ -d ${SP_CUSTOM_DIR}/etc ] && cp -rf ${SP_CUSTOM_DIR}/etc/* $DESTDIR/etc/
  466.                         [ -f ${SP_CUSTOM_DIR}/etc/locale.gen ] && chroot $DESTDIR locale-gen
  467.                 fi
  468.                 [ -f ${DESTDIR}/etc/sudoers ] && chmod 0440 ${DESTDIR}/etc/sudoers
  469.         if [ -f ${SP_CUSTOM_DIR}/etc/mkinitcpio.conf ] ; then
  470.             info "start create ${DESTDIR}/boot/kernel26.img"
  471.             ${DESTDIR}/sbin/mkinitcpio -b ${DESTDIR} -c ${DESTDIR}/etc/mkinitcpio.conf -g ${DESTDIR}/boot/kernel26.img
  472.             info "create kernel26.img over"
  473.             info "start create ${DESTDIR}/boot/kernel26-fallback.img"
  474.             ${DESTDIR}/sbin/mkinitcpio -b ${DESTDIR} -c ${DESTDIR}/etc/mkinitcpio.conf -g ${DESTDIR}/boot/kernel26-fallback.img -S autodetect
  475.             info "create kernel26-fallback.img over"

  476.         fi
  477.                 green "完成!" | tee -a ${LOG}
  478.         fi

  479.     [ -e "${DESTDIR}/etc/ld.so.conf" ] && chroot $DESTDIR ldconfig
  480.     #do_locale_file

  481.     $PACMAN -Q -r ${DESTDIR} > ${PKGFILE}
  482. }

  483. function sync_databaes() {
  484.     $PACMAN -Sy --noconfirm --config "${PACMANCONF}" --cachedir "${CACHE}" -fr "${DESTDIR}"
  485. }

  486. function get_available_table()  {
  487.     plain -n "导出可用软件包清单到${PACKLIST}/available.list" | tee -a ${LOG}
  488.     #$PACMAN -Sl >${PACKLIST}/available.list
  489.     $PACMAN -Sl  --config "${PACMANCONF}" --cachedir "$CACHE" -r "${DESTDIR}"  > ${PACKLIST}/available.list
  490.     green "完成!" | tee -a ${LOG}

  491.     plain -n "导出软件仓软件组信息到${PACKLIST}/group_detail.list" | tee -a ${LOG}
  492.     #$PACMAN -Qg >${PACKLIST}/group_detail.list
  493.     $PACMAN -Qg  --config "${PACMANCONF}" --cachedir "$CACHE" -r "${DESTDIR}" >${PACKLIST}/group_detail.list
  494.     green "完成!" | tee -a ${LOG}
  495. }

  496. function do_make_dir() {
  497.     [ ! -d ${DESTDIR} ] && mkdir -p ${DESTDIR}

  498.     if [ "$MOUNT_TARGET" = "y" ] ; then
  499.         mount ${TARGET} ${DESTDIR}
  500.     fi

  501.     if [ "x${CUSTOM_REPO}" != "x" ]; then
  502.         info "建立本地自定义软件仓"
  503.         for db in CUSTOM_REPO/${db}.db.tar.gz; do
  504.             rm -f CUSTOM_REPO/${db}.db.tar.gz
  505.         done
  506.         create_repo ${CUSTOM_REPO} archlive-pkg
  507.     fi

  508.     if [ "$MOUNT_AUFS" = "y" ] ; then
  509.         mount -t aufs -o br:${DESTDIR}=rw aufs ${DESTDIR}
  510.         if [ $? -ne 0 ]; then
  511.             echo "挂载 $DESTDIR aufs文件系统错误."
  512.             exit 1
  513.         fi
  514.     fi

  515.     if [ "$DOWNLOAD" = "n" ] ; then
  516.         [ ! -d "${DESTDIR}/var/lib/pacman" ] && mkdir -p "${DESTDIR}/var/lib/pacman"       
  517.         [ ! -d "${DESTDIR}/dev" ] && mkdir -p "${DESTDIR}/dev"
  518.         #[ ! -d "${DESTDIR}/proc" ] && mkdir -p "${DESTDIR}/proc"
  519.         #[ ! -d "${DESTDIR}/sys" ] && mkdir -p "${DESTDIR}/sys"

  520.         [ ! -e ${DESTDIR}/dev/console ] && mknod ${DESTDIR}/dev/console c 5 1 >/dev/null
  521.         [ ! -e ${DESTDIR}/dev/null ] && mknod ${DESTDIR}/dev/null c 1 3 >/dev/null
  522.         [ ! -e ${DESTDIR}/dev/zero ] && mknod ${DESTDIR}/dev/zero c 1 5 >/dev/null

  523.         if [ -e "${DESTDIR}/var/lib/pacman/db.lck" ]; then
  524.             rm -f ${DESTDIR}/var/lib/pacman/db.lck
  525.         fi

  526.     fi

  527.     rm -f $LOG > /dev/null
  528.     rm -f $ERR_LOG > /dev/null


  529.     ! [ -d $DESTDIR/var/lib/pacman ] && mkdir -p $DESTDIR/var/lib/pacman
  530.     #! [ -d /var/lib/pacman ] && mkdir -p /var/lib/pacman
  531.     # mount proc/sysfs first, so mkinitrd can use auto-detection if it wants
  532.     ! [ -d $DESTDIR/proc ] && mkdir $DESTDIR/proc
  533.     ! [ -d $DESTDIR/sys ] && mkdir $DESTDIR/sys
  534.     ! [ -d $DESTDIR/dev ] && mkdir $DESTDIR/dev
  535.     if [ "x${PACKAGE_DIR}" != "x" ] ; then
  536.         if [ ! -d ${PACKAGE_DIR} ] ; then
  537.             mkdir -p ${PACKAGE_DIR}
  538.         fi
  539.     fi
  540.     [ ! -d $PACKLIST ] && mkdir -p $PACKLIST
  541. }



  542. function do_locale_file()
  543. {
  544.     check_continue
  545.     if [ $? -ne 0 ] ; then
  546.         warn "${FUNCNAME} 检测到返回"
  547.     fi

  548.     if [ "${USE_OVERLAY}" = "y" ]; then
  549.         locale_gen_file="${OVERLAY}/etc/locale.gen"
  550.     else
  551.         locale_gen_file="${SP_CUSTOM_DIR}/etc/locale.gen"
  552.     fi
  553.     if [ -f "${locale_gen_file}" ]; then
  554.         cp -f ${locale_gen_file} $DESTDIR/etc/
  555.         plain -n "根据定制的locale.gen文件生成locale文件"
  556.         chroot $DESTDIR locale-gen
  557.         green "完成!" | tee -a ${LOG}
  558.     fi
  559. }

  560. function cmd_clean() {
  561.     check_continue
  562.     if [ $? -ne 0 ] ; then
  563.         warn "${FUNCNAME} 检测到返回"
  564.     fi

  565.     info "开始清理文件系统"
  566.     find ${DESTDIR} -type f -name ".wh.*" -exec rm {} \;
  567.     find ${DESTDIR} -type d -name ".wh.*" -exec rm -rf {} \;

  568.     info "删除除zh_CN外的语言文件"
  569.     if [ -d ${DESTDIR}/usr/share/locale ] ; then
  570.         find ${DESTDIR}/usr/share/locale/* -maxdepth 0 -type d ! -iregex ".*zh.CN" -exec rm -rf {} \;
  571.     fi
  572.     if [ -d ${DESTDIR}/usr/share/X11/locale ] ; then
  573.         find ${DESTDIR}/usr/share/X11/locale/* -maxdepth 0 -type d ! -iregex ".*zh.C*" -exec rm -rf {} \;
  574.     fi

  575.     info "删除除zh_CN及英文外的帮助文件"
  576.     if [ -d ${DESTDIR}/usr/share/man ] ; then
  577.         find ${DESTDIR}/usr/share/man/* -maxdepth 0 -type d ! -name "man*" ! -iregex ".*zh.CN" -exec rm -rf {} \;
  578.     fi

  579.     if [ -d ${DESTDIR}/usr/include ] ; then
  580.         rm -rf ${DESTDIR}/usr/include/
  581.     fi
  582.     if [ -d ${DESTDIR}/usr/src ] ; then
  583.         rm -rf ${DESTDIR}/usr/src/
  584.     fi

  585.     info "将配置文件释放到目标分区"
  586.     if [ -e $(pwd)/overlay.tgz ] ; then
  587.         tar -xzvpf $(pwd)/overlay.tgz -C ${DESTDIR}
  588.     elif [ -d $PROFILE_DIR/overlay ] ; then
  589.         cp -af $PROFILE_DIR/overlay/*  ${DESTDIR}
  590.     fi
  591.     if [ -d $PROFILE_DIR/overlay_custom ] ; then
  592.         cp -af $PROFILE_DIR/overlay_custom/*  ${DESTDIR}
  593.     fi

  594.     if [ "x${OVERLAY}" != "x" ] ; then
  595.         if [ -d $PROFILE_DIR/${OVERLAY} ] ; then
  596.             if [ "${OVERLAY}" != "overlay" ] ; then
  597.                 cp -af $PROFILE_DIR/${OVERLAY}/*  ${DESTDIR}
  598.             fi
  599.         fi
  600.     fi
  601. }


  602. do_make_dir
  603. #do_mount_info

  604. #if [ ${INSTALL_ONLY} = "0" ] ; then
  605. sync_databaes
  606. #fi
  607. get_available_table
  608. cmd_install

  609. if [ ${INSTALL_ONLY} = "0" ] ; then
  610.     custom_install
  611. fi

  612. if [ "$MOUNT_TARGET" = "y" ] ; then
  613.     info "卸载并删除临时挂载点${DESTDIR}"
  614.     umount -l ${DESTDIR}
  615.     #rm -rf ${DESTDIR}
  616. fi

  617. if [ ${INSTALL_ONLY} = "0" ] ; then
  618.     cmd_clean
  619. fi

  620. grub_install_tips
  621. #grub-install  --no-floppy  ${DEV}
  622. info "---------------  OVER ----------------"
复制代码


修改自老焦的quickinstall
1. 将 fstab, passwd, 等弄成overlay, pacman -S 安装完后cp -a 覆盖
2. 将一台局域网的机子/var/cache/pacman/pkg 用http共享出pkg,方便快速下载包
回复 支持 反对

使用道具 举报

发表于 2011-8-16 14:50:41 | 显示全部楼层
留个脚印以后再来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-8-17 19:00:26 | 显示全部楼层
语言 本地化:


  1. sed -e 's/^en_US/#en_US/g'  -e 's/^#zh_CN/zh_CN/g'  </etc/locale.gen >/etc/locale.gen.new
  2. mv -f /etc/locale.gen.new /etc/locale.gen
  3. sed -e 's/^LOCALE="en_US.UTF-8"/LOCALE="zh_CN.UTF-8"/' </etc/rc.conf >/etc/rc.conf.new
  4. mv -f /etc/rc.conf.new /etc/rc.conf

复制代码
回复 支持 反对

使用道具 举报

发表于 2011-8-19 11:30:18 | 显示全部楼层
用这脚本装的系统依赖关系肯定乱的一塌糊涂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-8-19 12:02:14 | 显示全部楼层
Post by qiang_liu8183;2147200
用这脚本装的系统依赖关系肯定乱的一塌糊涂


这样啊,能发下,您改好的吗?

还有为什么依赖会乱,我都是用pacman装的软件
回复 支持 反对

使用道具 举报

发表于 2011-8-21 11:34:56 | 显示全部楼层
这样装出的系统用的时间久了会出现依赖关系已经没用了但用Qdt有检测不到、或删除不干净的问题,因为你装的时候很多包都是--asexplicit
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-8-21 11:50:02 | 显示全部楼层
Post by qiang_liu8183;2147722
这样装出的系统用的时间久了会出现依赖关系已经没用了但用Qdt有检测不到、或删除不干净的问题,因为你装的时候很多包都是--asexplicit


那怎么弄???
回复 支持 反对

使用道具 举报

发表于 2011-8-21 14:14:37 | 显示全部楼层
man pacman
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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