My configuration system

我的配置系统是github上的一个项目,System-config

里面最开始只是我的.bashrc、.emacs等文件,但很快我就把它的目标修正为: 当我新安装一台机器后,我可以通过一个简单的 git clone --recursive https://github.com/baohaojun/system-config 和额外的几条脚本,把我的个 人环境快速重建出来。

整个项目必须checkout到你的 $HOME/system-config 下。你可能会觉得奇 怪,.bashrc/.emacs等文件不是应该放在 $HOME/ 下吗,为什么要放到一个叫 system-config的子目录下呢?别急,听我慢慢道来😊

这其实是两个问题:

  • 为什么要子目录?你自己试试就知道了,因为不用子目录,直接放在 $HOME/ 下的话,你每次跑 git status 会被烦死的,因为会有很多其它系 统自动生成的配置文件、log文件等。你难道能不停更新你的.gitignore?你难 道能忍住、记住不能在 $HOME/ 下跑 git clean -xfd (会把所有非git版 本管理文件全部删除,泪啊)?
  • 为什么叫system-config?这只是个巧合而已,最开始的时候我正在公司的 windows机器上用cygwin,所以其配置文件就叫system-config了。本来计划在 linux底下搞个linux-config的,但后来发现完全没必要,它们可以用设计模式 中factory的模式共用大部分代码,见在shell脚本里的抽象工厂模式😊

最后,“额外的几条脚本”是指何意?把代码checkout到~$HOME/system-config/~ 下之后,只要再跑 两条 一条 命令就搞定了,所以总共就这两条命令(跑 的过程中如果出现错误的话可以考虑自己修正一下bug,非常涨经验值的!最后 你可以把修正的结果告诉我,比如给我发个pull request,我会很感动、感谢、 感激。当然,也可以直接报个bug,请我帮你修正,但我可能会太忙,不能及时 搭理你。当然,如果你请我喝过咖啡的话,那就又不一样了😊):

git clone --recursive https://github.com/baohaojun/system-config
~/system-config/bin/Linux/after-check-out.sh

其中第一条就是要把相应的该放在 $HOME 下的文件/目录通过symlink给放出来,让bash/emacs等程序能读到。用symlink而不是拷贝出来有一个额外的好处,你能猜到 是什么 吗?

第二条则是做一些.deb包的安装、编译工作。

其中.deb包的安装有点意思,可以跟大家说说:

  • 用文件系统作数据库。我每次发现自己希望默认该装什么包,我就以该包的名 字在某配置目录( /home/bhj/system-config/bin/Linux/config/pkgs/ )下生成一个文件。 参见ESR的The Art of Unix Programming

    我会把所有文件都作为参数传给 apt-get intstall

  • 安装出错的自动处理。随着时间推移,或者我从debian换到ubuntu或者反之, 有些包可能会找不到了。这时候我们只需要把 apt-get install 的 stdout/stderr结果记下来,parse一下,再把出错的包从它的参数列里拿掉再 来一遍(实际上是一个while循环)就好了。

最后,欢迎大家试用我的配置系统,并多提改进意见😊