技术解析

浅谈 Linux 开发环境无缝迁移
0
2021-06-29 05:44:58
idczone

相信使用过 Unix 系的同学都会有感,Unix 系大部分工具都是可以通过文本进行自定义配置, 典型的例子就是 Vim/Emacs 的自定义配置了。但是像笔者这种工作时使用 Os X, 笔记本是 Fedora, 台式机是 Arch Linux, 甚至家里给父母使用的老电脑也换上了 Deepin, 各种工具 的重新安装和配置就真的很麻烦,更不要说可能需要 ssh 登录管理 vps. 对于这些基于文 本的配置,其实做的工作无非是下载工具,然后复制指定的配置文件到指定的路径,或者是 home 目录或者是 .config, 这些真的都是体力活,不如交给脚本来自动解决。 安装工具 ##包管理器 对于 Linux 种类繁多的发行版本,也对应着各种不同的包管理工具,但是包管理器的数 量是远远不及发行版本数量的,主要是 Debian 系的 apt-get, RHEL 系的 yum 以及 衍生的 dnf, 还有最好用的 Arch 系的 pacman 等,当然,还包括 OS X 上的 brew. 现在的工作就是判断发行版本,然后选择包管理器安装工具。判断发行版本可以 使用我之前分享的脚本进行判断,只是我就偷个懒,直接通过是否存在对应的管理器 来安装工具了:

function install_awesome_tools() {
    if [ "$(uname)" == "Darwin" ]; then
	# Do something under Mac OS X platform        
	echo "This is mac os"
	# check if brew exists
	brew_install
    elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
	# Do something under GNU/Linux platform
	GetDistro
	if type apt-get >/dev/null 2>&1; then
	    apt_get_install
	elif type yum >/dev/null 2>&1; then
	    yum_dnf_install
	elif type pacman >/dev/null 2>&1; then
	    pacman_install
	fi
    elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then
	# Do something under 32 bits Windows NT platform
	echo "This is 32-bit windows"
    elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then
	# Do something under 64 bits Windows NT platform
	echo "this is 64-bit windows" 
    fi
}

复制配置到指定路径

当安装完工具之后,就可以把配置复制到指定的路径。而我倾向于使用 Github 来保存 配置,然后只需 clone 到本地即可。但是为了方便管理,可以 clone 到指定目录, 然后 创建指向该目录的软链接 备份

备份

在创建软链接的时候,可能目标文件已存在,比如说之前已经在安装 Emacs 的时候,附带创建了 .emacs 文件,比较好的习惯就是对文件根据时间戳进行备份,然后再创建链接

Oh-my-unix

Oh-my-unix 就是笔者创建的一个实现笔者上述自动化操作的项目,可以保存笔者 zsh, i3 oh-my-zsh 别名,环境变量等的配置文件,以及对应的各式工具,然后只需要 clone 到本地,执行初始化脚本,就可以把环境配好。而在该项目 README 上的就是我常用的一些工具及其介绍.

项目地址: https://github.com/samrayleung/Oh-my-unix. 虽说使用的工具因人而异,但是想法是可以相互交流的 :)


用好 ansible 类似的工具就可以避免这种脚本了,另外写 python 总比写 shell 容易。

那我想迁移 gentoo 怎么办,cpu 还不一样。

但是某些部分,python 还是要调用 shell,例如你使用 apt-get 安装工具,这个 python 还是要调用  shell 命令吧.所以我觉得,小的东西,涉及到很多  shell 命令的操作,尽量都用 shell script 解决.此外,并不是所有的系统都会默认带有 python 环境的,但是 shell 这个解释器是一定会有的.

交流的想法,并不是通用的解决方案哈.我没有用过 gentoo,但是相信 gentoo 下面还是会有 zsh 和对应的别名,环境变量配置的.然后就可以进行适配.

linux or mac 肯定有 python。用 ansible 不需要管底层到底调用的是什么包管理器。
麻烦在于软件包名,虽然你这里也一样存在。
并且用 shell 并不容易保证每次执行都是相同的结果,用好 ansible 就能做的。

感觉各有所长吧,只是不同的取舍和选择.并不是所有的 Linuxer 都有用过 ansible, 但是基本比较有经验的 Linuxer 用户多多少少都会一点 shell .

portage 不是你所知道的,有些内核都要自己动手编译。

如果所有系统全都用一个 Linux 发行版 ...

Mac 下面这个还行 https://github.com/lra/mackup

看起来似乎就是我想要的效果,只是如果我想要的工具它不支持,我也是很无奈

作为一个 合格 Linuxer,当然可以去折腾其他发行版本.不同的发行版本适用不同的场景嘛.

systemd-nspawn.

ansible 安装, stow 管理 dotfile, 其实 ansible 不需要你会 Python

这么看来,值得尝试哈.我原来一直都是直接  ln -fs,并没有使用过 stow. 看来可以去学习一下.

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服