LinuxSir.cn,穿越时空的Linuxsir!

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

另类方法安装Arch Linux──利用aufs 可扩展为在任意linux live下安装Arch

[复制链接]
发表于 2009-5-18 15:05:51 | 显示全部楼层 |阅读模式
利用aufs文件系统。
需要宿主系统有aufs──kernel26-archlive 2.6.29.3内核已经集成aufs2

脚本很简单,大家稍微看看就知道如何用了

俺今天刚刚在archlive 090115版本下如此安装了系统在用
脚本执行完后需要自行修改或者安装bootloader fstab等。。。

注: 由于该脚本造成数据丢失后果自负! 哈

此脚本功能简单,只是将清单指定的软件包安装到目标分区,没有bootloader的安装(俺这里不需要,双系统,用的grub4dos),也没有修改fstab, 有兴趣的兄弟可以再扩展下


gen_repo 来自于 larch...

安装脚本:

  1. usage ()
  2. {
  3.     echo "usage ${程序名} [选项] 命令 <命令选项>"
  4.     echo " 一般选项:"
  5.     echo "    -f               强制覆盖现有的工作目录等,全部重新制作"
  6.     echo "    -t TARGET        预安装的目标分区."
  7.     echo "    -c CACHE DIR     Arch软件包存储位置"
  8.     echo "    -C CUSTOM_REPO          本地自定义repo"
  9.     echo "    -u union         工作文件临时挂载位置"
  10.     echo "    -h               本帮助信息."
  11.     exit $1
  12. }
  13. if [ "$EUID" != "0" ]; then
  14.     echo "错误: 必须以root用户运行本制作脚本."
  15.     exit 1
  16. fi

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

  20. #mount -f /dev/sda4 /mnt/sda4
  21. TARGET=/dev/sda8
  22. UNION=/mnt/sda8
  23. PACMAN=pacman
  24. CUSTOM_REPO=/mnt/sda3/cpkg
  25. union=/mnt/sda4/union
  26. CACHE="/mnt/sda3/pkg"

  27. # 检测、配置输入的命令
  28. while getopts 'i:t:c:M:m:a:t:c:nfvh' arg; do
  29.     case "${arg}" in
  30.         t) TARGET="${OPTARG}" ;;
  31.         c) CACHE="${OPTARG}" ;;
  32.         C) CUSTOM_REPO="${OPTARG}" ;;
  33.         u) union="${OPTARG}" ;;
  34.         h|?) usage 0 ;;
  35.         *) echo "无效参数 '${arg}'"; usage 1 ;;
  36.     esac
  37. done
  38. APPNAME=$(basename "${0}")

  39. mkdir -p ${UNION}
  40. #umount -l ${TARGET}
  41. #if [ -d ${union} ]; then
  42. #        umount -l ${union}
  43. #        rm -rf ${union}
  44. #fi
  45. #mkreiserfs -f ${TARGET}
  46. #mount ${TARGET} ${UNION}

  47. info "建立本地自定义软件仓"
  48. for db in CUSTOM_REPO/${db}.db.tar.gz; do
  49.         rm -f CUSTOM_REPO/${db}.db.tar.gz
  50. done
  51. python ./gen_repo ${CUSTOM_REPO} carbon

  52. info "准备文件系统"
  53. mkdir -p ${union}
  54. mount -t aufs -o br:${UNION}=rw aufs ${union}
  55. if [ $? -ne 0 ]; then
  56.         echo "挂载 $union aufs文件系统错误."
  57.         exit 1
  58. fi

  59. # 装载软件仓等相关配置
  60. if [ -f "$(pwd)/pacman.conf" ]; then
  61.         PACMANCONF="$(pwd)/pacman.conf"
  62. else
  63.         PACMANCONF="/etc/pacman.conf"
  64. fi

  65. mkdir -p "${union}/var/lib/pacman"       
  66. mkdir -p "${union}/dev"
  67. mknod ${union}/dev/console c 5 1 >/dev/null
  68. mknod ${union}/dev/null c 1 3 >/dev/null
  69. mknod ${union}/dev/zero c 1 5 >/dev/null

  70. if [ -e "${union}/var/lib/pacman/db.lck" ]; then
  71.         rm -f ${union}/var/lib/pacman/db.lck
  72. fi

  73. if [ -d /sys/devices ]; then
  74.         mkdir -p ${union}/sys
  75.         cp -r /sys/devices ${union}/sys/devices
  76. fi

  77. info "开始安装程序"
  78. $PACMAN -Sy --noconfirm --config "${PACMANCONF}" --cachedir "${CACHE}" -fr "${union}"
  79. cat  "$(pwd)/list" | grep -v "^#" | while read pkgname; do
  80.         echo "安装 $pkgname"
  81.         $PACMAN -S -f --needed --noconfirm --config "${PACMANCONF}" --cachedir "$CACHE" -r "${union}" $pkgname
  82. done

  83. info "卸载并删除临时挂载点${union}"
  84. umount -l ${union}
  85. rm -rf ${union}

  86. info "开始清理文件系统"
  87. find ${UNION} -type f -name ".wh.*" -exec rm {} \;
  88. find ${UNION} -type d -name ".wh.*" -exec rm -rf {} \;

  89. info "删除除zh_CN外的语言文件"
  90. find ${UNION}/usr/share/locale/* -maxdepth 0 -type d ! -iregex ".*zh.CN" -exec rm -rf {} \;
  91. find ${UNION}/usr/share/X11/locale/* -maxdepth 0 -type d ! -iregex ".*zh.C*" -exec rm -rf {} \;

  92. info "删除除zh_CN及英文外的帮助文件"
  93. find ${UNION}/usr/share/man/* -maxdepth 0 -type d ! -name "man*" ! -iregex ".*zh.CN" -exec rm -rf {} \;

  94. info "将配置文件释放到目标分区"
  95. tar -xzvpf $(pwd)/overlay.tgz -C ${UNION}
复制代码
发表于 2009-5-18 16:20:30 | 显示全部楼层
很好很好(不能少于6个字符!)
回复 支持 反对

使用道具 举报

发表于 2009-5-18 16:24:59 | 显示全部楼层
Post by carbonjiao;1988538
注: 由于该脚本造成数据丢失后果自负! 哈


哈哈哈哈 !
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-18 16:33:31 | 显示全部楼层
俺觉得这种安装方式比较有前景!

欢迎大家扩展。。。

加上相应的功能。。。
回复 支持 反对

使用道具 举报

发表于 2009-5-18 19:10:28 | 显示全部楼层
要想真有前景,图形界面是必须的,尤其在国内。
曾经设想:
  1. 图形界面(一次性收集安装参数)-> 安装脚本执行
复制代码

或者说,carbonjiao 做了一个很好的开头。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-18 22:31:55 | 显示全部楼层
shell 脚本也可以搞成图形界面的   Slitaz就是如此。。。
回复 支持 反对

使用道具 举报

发表于 2009-5-20 00:23:28 | 显示全部楼层
人工置顶并收藏
回复 支持 反对

使用道具 举报

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

本版积分规则

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