Ubuntn系统自动检测和安装自己需要的软件包

记得第一次开始接触Linux玩的是Ubuntn9.04的系统,是10年那会,手上有一台二手的奔腾4的512M戴尔笔记本。当时很好奇,很有兴趣,在那20GB的硬盘空间中,在反复的折腾下,我硬是装了xp和Ubuntn9.04的双系统,虽然基本还不会用Linux系统。后来在上面又折腾装了9.10、10.04两个版本,纯粹是为了新鲜,基本都没用过。唯一的好处就是熟悉了Linux的环境和安装。之后开始自学Linux系统的知识、命令,在新电脑上又折腾过10.10,11.04,12.04这些版本,还有Fedora16、Fedora17的系统也玩过一会。

每一次装新系统,因为都是用的CD ISO版,所以都得把一些常用的工具、命令一个个重新下载安装一次。上次装12.04的服务器,为了安装和更新软件包,整了一个晚上也没有结束,因为不知道可以用国内的仓库源。而且我都是一个个的工具手动去安装、等待结果的。这次打算折腾一把Debian 7,也是希望以后能少折腾系统了。因此写了一个shell脚本来实现安装好系统后,自动检测和安装自己需要的软件包,实现自动化。

#! /bin/bash

# check whether some essential packages exist.
# if not installed, install them from software repos.
# essential packages:
# gcc g++ gdb make
# exuberant-ctags cscope
# ftp tree wget curl lynx
# openssh-server openssh-client
# mysql-server mysql-client
# vim git svn rcs sed gawk
# chromium-browser

MY_PROGRAM_PACKS="gcc g++ gdb make exuberant-ctags cscope vim git"
MY_UTILITY_PACKS="ftp tree wget curl lynx sed gawk chromium-browser"
MY_MANAGE_PACKS="openssh-server openssh-client mysql-server mysql-client"

MY_PACKS="$MY_PROGRAM_PACKS $MY_UTILITY_PACKS $MY_MANAGE_PACKS"

STATUS_1=" installed"
STATUS_2=" not installed"

# for statistics result
INIT_INS_PACKS=
NEW_INS_PACKS=
FAIL_INS_PACKS=


for pack in $MY_PACKS
do
        echo  "checking for $pack ..."

        status=`aptitude show $pack|grep State:|cut -d ":" -f 2`
        version=`aptitude show $pack|grep Version:|cut -d ":" -f 2-`

        if [ "$status" = "$STATUS_1" ]
        then
                INIT_INS_PACKS="$INIT_INS_PACKS $pack"
                echo "$pack is $status,version is $version"
        else
                echo "$pack is $status, start to install $version ..."
                aptitude install $pack
                if [ $? -eq 0 ]
                then
                        NEW_INS_PACKS="$NEW_INS_PACKS $pack"
                        echo "install $pack ($version) successfully."
                else
                        FAIL_INS_PACKS="$FAIL_INS_PACKS $pack"
                        echo "install $pack ($version) failed."
                fi
        fi
        echo "checking $pack done."
done

echo "the checking packages result:"
echo "    initial installed packages: $INIT_INS_PACKS "
echo "    new installed packages: $NEW_INS_PACKS "
echo "    failed installed packages: $FAIL_INS_PACKS "

exit 0
脚本是针对使用APT包管理系统的Linux发行版的,如 Debian和Ubuntn。对于RHEL、CentOS、Fedora这些使用其它包管理系统的Linux发行版,只需要把脚本中的包管理命令aptitude换成相应的命令就OK了,如CentOS中的yum命令,当然注意state和version信息的提取可能不一样。

你可能感兴趣的:(Ubuntn系统自动检测和安装自己需要的软件包)