当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 9 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 配置Ubuntu的小脚本
帖子发表于 : 2010-12-29 20:22 

注册: 2010-12-29 19:35
帖子: 8
送出感谢: 0 次
接收感谢: 0 次
我写的一个小脚本,帮助配置Ubuntu,请大家看看,帮忙改改,提提新功能。。。。。。


http://u.115.com/file/f564e405d7


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-29 21:18 
头像

注册: 2008-09-18 13:11
帖子: 2767
送出感谢: 1
接收感谢: 448
怎么说呢,对于新手来说,你用zenity之类的做个GUI的选择对话框会更方便,非要用命令行的话,用whiptail之类来构造界面会漂亮一点。

对于生成安装脚本这件事,我觉得只对要在多台电脑上进行安装的人有用。而且脚本你也没有加上可执行权限
另外不要在开头直接删除原来的脚本,检查一下是否已存在,提示用户一下是否覆盖/直接使用。

有些操作可以再优化一下,把所有需要安装的包用一个apt-get install中全部安装,避免重复的apt-get update之类

提示当前的配置进度情况,让人知道总共有几步,当前进行到第几步

尽量不要用版本号的软件包名,比如不要用emacs23,直接来emacs


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-30 13:24 

注册: 2010-12-29 19:35
帖子: 8
送出感谢: 0 次
接收感谢: 0 次
楼上,我仔细阅读了你的回复。

关于你说的:
1.我是一个超级新手,技术并不好,但我会尽力注意的。

2.关于生成安装脚本,这个是深思熟虑过的,因为我想把所有的过程放在一起执行,减少交互时间。

3.关于为什么要使用多次apt-get update,这个已经在其中注释中指出,不愿让用户不小心升级到不稳定版本,而我还不会在命令行中删除某个源。(这个比较寒)

4.关于进程提示,我目前还想不到怎样写比较好。

5.软件包的版本号,这个问题我也想过,可我担心为某些用户误装了命令行版的。

6.其实我还想是否用gksu代替sudo,这样也许更好。

7.有一些功能还未实现,可以在注释中看到

8.部分高级功能还不知道怎样写。

9.关于执行权限,这个,自己chmod +x就行吧,我是直接上传的脚本,下载下来后没有执行权限是正常的阿。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-30 16:45 

注册: 2008-06-10 12:31
帖子: 18
送出感谢: 0 次
接收感谢: 0 次
我也写过一个,希望对你有参考价值:
代码:
#!/bin/sh

if [ "$HOME" = "/root" ];then
   echo 不能在root下执行哦
   exit 0
fi

echo 这个脚本需要用到sudo,请输入密码
sudo echo ''

cd $HOME

CURRENT_TIME=`date -d today +"%Y%m%d%H%M"`

get_reg_string()
{
    echo "$1" | sed -e 's/\//\\\//g' -e 's/\./\\\./g'
}

HOME_REG=`get_reg_string $HOME`

echo 初始化...
BAK_DIR="$HOME/.init_config_bak"
echo 创建备份目录$BAK_DIR
mkdir $BAK_DIR 2> /dev/null
echo 安装本脚本依赖文件
sudo apt-get install -y dialog

#############################################################
if dialog --title "选择更新源" --radiolist "更新源:" 20 60 4 \
"mirrors.163.com" "网易镜像" on \
"mirrors.sohu.com" "搜狐镜像" off \
2> /tmp/select
then
echo ''

mirror=`cat /tmp/select`
echo 软件原列表备份至 $BAK_DIR/sources.list.$CURRENT_TIME
cp /etc/apt/sources.list $BAK_DIR/sources.list.$CURRENT_TIME
echo 使用新的软件源
sudo sed -i "s/\(\(en\|us\|cn\)\.\)\?archive.ubuntu.com/${mirror}/g" /etc/apt/sources.list
#####apt-get update
else
echo ''
fi

#############################################################
echo ''
echo --------------------------------------
echo 安装常用软件
echo 编辑器    : gawk,vim
echo 软件包管理: aptitude
echo 媒体软件  : smplayer mp3,wma解码器
echo 办公软件  : chmsee
echo win共享网络:samaba
echo --------------------------------------
sudo apt-get install -y gawk vim \
aptitude \
flashplugin-installer \
smplayer \
gstreamer0.10-ffmpeg \
gstreamer0.10-fluendo-mp3 \
gstreamer0.10-plugins-ugly \
chmsee \
samba \
system-config-samba

#############################################################
echo ''
echo 解压需要的资源
sed "1,/DONGGANCHAORE\(\)N/d" $0 > /tmp/ubuntu_init_shell.zip

TMP_SRC_DIR=/tmp/ubuntu_init
mkdir $TMP_SRC_DIR
unzip -o -d $TMP_SRC_DIR /tmp/ubuntu_init_shell.zip
TMP_SRC_DIR="$TMP_SRC_DIR/var"

#############################################################
echo ''
echo --------------------------------------
echo 设置smplayer字幕,添加文件关联
echo --------------------------------------
if test ! -f "$HOME/.config/smplayer/smplayer.ini";then
   smplayer >/dev/null &
   sleep 3
   killall smplayer
fi

cp  $HOME/.config/smplayer/smplayer.ini $BAK_DIR/smplayer.ini.$CURRENT_TIME
echo smplayer配置已备份到$BAK_DIR/smplayer.ini.$CURRENT_TIME

sed -i -e "s/subcp=ISO-8859-1/subcp=UTF-8/" \
      -e "s/use_enca=false/use_enca=true/" \
      -e 's/fontname=Arial/fontname=\\x6587\\x6cc9\\x9a7f\\x5fae\\x7c73\\x9ed1/g' $HOME/.config/smplayer/smplayer.ini

mimelist="$HOME/.local/share/applications/mimeapps.list"

if test ! -f $mimelist;then
   echo '[Added Associations]' > $mimelist
fi

if test -z "`grep 'Added Associations' $mimelist`"
then
   echo '[Added Associations]' >> $mimelist
fi

if test -z "`grep 'smplayer' $mimelist`"
then
   sed -i "/[Added Associations]/r${TMP_SRC_DIR}/smplayer_mime" $mimelist
fi


#############################################################
echo ''
echo --------------------------------------
echo 修正:用flash播放视频时禁用屏幕保护程序
echo --------------------------------------
mkdir $HOME/.init_shell 2> /dev/null
cp $TMP_SRC_DIR/stop_screensaver_for_flash.sh $HOME/.init_shell
cp $TMP_SRC_DIR/stop_screensaver_for_flash.desktop $HOME/.config/autostart

sed -i "s/HOME/$HOME_REG/g" $HOME/.config/autostart/stop_screensaver_for_flash.desktop

#############################################################
echo ''
echo -------------------------------------
echo 设置firefox
echo 默认不显示书签栏
echo -------------------------------------

FIREFOX_DIR=`find $HOME/.mozilla/ -type d -name "*.default"|head -n 1`
if test -z "$FIREFOX_DIR";then
   firefox &
   sleep 3
   killall firefox-bin
   FIREFOX_DIR=`find $HOME/.mozilla/ -type d -name "*.default"|head -n 1`
fi

cp  $FIREFOX_DIR/localstore.rdf $BAK_DIR/localstore.rdf.$CURRENT_TIME
echo firefox配置已备份到$BAK_DIR/localstore.rdf.$CURRENT_TIME

cp $TMP_SRC_DIR/localstore.rdf $FIREFOX_DIR

#############################################################
echo ''
echo ------------------------------------
echo 用pidgin代替empathy
echo ------------------------------------
sudo apt-get remove -y empathy empathy-common nautilus-sendto-empathy
sudo apt-get install -y pidgin

echo ''
echo -----------------------------------
echo 删掉gwibber,不能用代理的玩具。。
echo -----------------------------------
sudo apt-get remove -y gwibber gwibber-service

#############################################################
echo ''
echo -----------------------------------
echo 安装gappproxy
echo -----------------------------------

config_gappproxy()
{
   rm /tmp/dialog_input
   if dialog --title "设置Gappproxy" --inputbox "设置一个fetch server" 10 75 2>/tmp/dialog_input
   then
      echo ''
      url=`cat /tmp/dialog_input`
      if test -n "$url";then
         if test -n "`wget $url -O - 2>/dev/null | grep GAppProxy/2.0.0`";then
            echo "fetch_server = $url" >> $HOME/.gappproxy/localproxy-2.0.0/proxy.conf
         else
            echo "输入的fetchserver不可用,需要一个安装gappproxy2.0.0的fetchserver"
            sleep 3
            config_gappproxy
         fi
      fi
   else
      echo ''
   fi
}

install_gappproxy()
{

   mkdir $HOME/.gappproxy

   cd $HOME/.gappproxy
   wget http://gappproxy.googlecode.com/files/localproxy-2.0.0.tar.gz
   tar zxvf *.tar.gz
   cp $TMP_SRC_DIR/gappproxy.desktop $HOME/.config/autostart/
   sed -i "s/HOME/$HOME_REG/g" $HOME/.config/autostart/gappproxy.desktop
   rm *.tar.gz
   config_gappproxy
   cd $HOME
}

if test ! -f "$HOME/.gappproxy"
then
   install_gappproxy
fi

#############################################################
echo ''
echo -----------------------------------
echo 安装sshd
echo -----------------------------------
sudo apt-get install -y ssh

if test -n "`cat /etc/ssh/sshd_config|grep 'Port 22'`"
then
if dialog --title "更改ssh端口" --inputbox "建议不要使用默认的22端口~" 10 75 22 2>/tmp/dialog_input
then
   echo ''
   newport=`cat /tmp/dialog_input`
   if [ "$newport" != "22" ];then
      cp  /etc/ssh/sshd_config $BAK_DIR/sshd_config.$CURRENT_TIME
      echo ssh server配置已备份到$BAK_DIR/sshd_config.$CURRENT_TIME
      sudo sed -i "s/Port 22/Port ${newport}/g" /etc/ssh/sshd_config
      sudo service ssh restart
   fi
else
   echo ''
fi
fi

#############################################################
echo ''
echo -----------------------------------
echo 系统时间与网络同步
echo -----------------------------------

sudo apt-get install -y ntp
if test -z "`cat /etc/ntp.conf|grep 210.72.145.44`"
then
   sudo sed -i '$aserver 210.72.145.44' /etc/ntp.conf
fi

exit 0
#DONGGANCHAOREN#



直接执行是不能用的,可执行的在这里
http://code-of-emptyhua.googlecode.com/svn/trunk/shell/ubuntu_10_10_init/bin/ubuntu10.10_init.bin


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-30 17:30 
头像

注册: 2008-09-18 13:11
帖子: 2767
送出感谢: 1
接收感谢: 448
gjp1120 写道:
2.关于生成安装脚本,这个是深思熟虑过的,因为我想把所有的过程放在一起执行,减少交互时间。

3.关于为什么要使用多次apt-get update,这个已经在其中注释中指出,不愿让用户不小心升级到不稳定版本,而我还不会在命令行中删除某个源。(这个比较寒)

9.关于执行权限,这个,自己chmod +x就行吧,我是直接上传的脚本,下载下来后没有执行权限是正常的阿。


执行权限我指的是你生成的那个AutoConf.autoscripter,我以为你是为了方便用户在多台机器上配置。
我知道你是不想每问一个问题就执行一些命令,但有比新创建个脚本更好的方法。而且按你的流程来说,如果用户先选择了更新源,又选择了安装ibus,那么最后执行的将是
代码:
sudo apt-get update
sudo add-apt-repository XXX
sudo apt-get update
....

这些个 apt-get update 完全可以合并为一个。多个apt-get install同理

如果我来写这个脚本的话,我大概会这么写
代码:
PKG=""
REPO=""
if 用户要安装软件a ;then
  PKG= "$PKG a"
fi
if 用户要安装ppa源中的软件b ;then
  REPO="add-apt-repository ppa:B"
  PKG= "$PKG b"
fi
if 用户要安装ppa源中的软件c ;then
  REPO="$REPO; add-apt-repository ppa:C"
  PKG= "$PKG c"
fi
...

if [ -n "$REPO" ];then
   $REPO
fi
if [ 用户要更新源 -o -n "$REPO" ];then
  sudo apt-get update
fi
if [ -n "$PKG" ];then
   sudo apt-get install $PKG
fi


另外删除apt-add-repository添加的源还是用apt-add-repository,加个-r参数就是,记得多用man或--help

gjp1120 写道:
5.软件包的版本号,这个问题我也想过,可我担心为某些用户误装了命令行版的。

这个你该看看包的具体依赖情况,比如emacs的目前是emacs23 | emacs23-lucid | emacs23-nox,会优先装emacs23,当emacs23和emacs23-lucid都不行时才会去装emacs23-nox


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-30 17:47 
头像

注册: 2008-09-18 13:11
帖子: 2767
送出感谢: 1
接收感谢: 448
简单列一下zenity和whiptail的用法,不推荐4楼的dialog,因为还要安装额外的包,而这两个是ubuntu默认自带的
代码:
if zenity --question --text "要安装XX吗?"; then echo Y;fi
if whiptail --yesno "要安装XX吗?" 10 30;then echo Y;fi


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-30 19:03 

注册: 2010-12-29 19:35
帖子: 8
送出感谢: 0 次
接收感谢: 0 次
关于您说的,
1.万一用户不执行更新ibus呢?而且apt-get update第二次执行较快。

2.在我计算机上apt-add-repository 的-r参数无效,man没有apt-add-repository的手册,--help和-h没有什么帮助。

3.emacs的版本号问题我已修复。感谢。

4.我会写一个使用zenity和whiptail的脚本,欢迎再次挑错。

十分感谢你的认真。十分感谢。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-30 19:19 

注册: 2010-12-29 19:35
帖子: 8
送出感谢: 0 次
接收感谢: 0 次
关于4 楼 emptyhua 兄的建议:
1.我也认为,不应为用户安装额外的软件包

2.其中的一部分代码给了我很大的参考价值,我将会在下一版本插入脚本。

感谢你的建议。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 配置Ubuntu的小脚本
帖子发表于 : 2010-12-30 22:03 
头像

注册: 2008-09-18 13:11
帖子: 2767
送出感谢: 1
接收感谢: 448
gjp1120 写道:
关于您说的,
1.万一用户不执行更新ibus呢?而且apt-get update第二次执行较快。

我写了那么一段示例代码你都没看,还是看不懂?我那样写不管用户怎么选最多都只执行一次update,效率最高。

gjp1120 写道:
2.在我计算机上apt-add-repository 的-r参数无效,man没有apt-add-repository的手册,--help和-h没有什么帮助。

可能是你系统的python-software-properties比较旧。0.76以及之后的版本中才有这个参数。你用lucid的话就很遗憾了,只有手动去删除公钥和list文件


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 9 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译