V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
samray
V2EX  ›  Linux

浅谈 Linux 开发环境无缝迁移

  •  
  •   samray ·
    ramsayleung · 2017-06-22 15:49:11 +08:00 · 4247 次点击
    这是一个创建于 2492 天前的主题,其中的信息可能已经有所发展或是发生改变。

    相信使用过 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. 虽说使用的工具因人而异,但是想法是可以相互交流的 :)

    14 条回复    2017-06-23 12:01:54 +08:00
    whatot
        1
    whatot  
       2017-06-22 15:56:47 +08:00
    用好 ansible 类似的工具就可以避免这种脚本了,另外写 python 总比写 shell 容易。
    jyf007
        2
    jyf007  
       2017-06-22 15:57:48 +08:00
    那我想迁移 gentoo 怎么办,cpu 还不一样。
    samray
        3
    samray  
    OP
       2017-06-22 16:01:27 +08:00
    @whatot 但是某些部分,python 还是要调用 shell,例如你使用 apt-get 安装工具,这个 python 还是要调用  shell 命令吧.所以我觉得,小的东西,涉及到很多  shell 命令的操作,尽量都用 shell script 解决.此外,并不是所有的系统都会默认带有 python 环境的,但是 shell 这个解释器是一定会有的.
    samray
        4
    samray  
    OP
       2017-06-22 16:03:05 +08:00
    @jyf007 交流的想法,并不是通用的解决方案哈.我没有用过 gentoo,但是相信 gentoo 下面还是会有 zsh 和对应的别名,环境变量配置的.然后就可以进行适配.
    whatot
        5
    whatot  
       2017-06-22 17:07:54 +08:00
    @samray linux or mac 肯定有 python。用 ansible 不需要管底层到底调用的是什么包管理器。
    麻烦在于软件包名,虽然你这里也一样存在。
    并且用 shell 并不容易保证每次执行都是相同的结果,用好 ansible 就能做的。
    samray
        6
    samray  
    OP
       2017-06-22 17:43:45 +08:00
    感觉各有所长吧,只是不同的取舍和选择.并不是所有的 Linuxer 都有用过 ansible, 但是基本比较有经验的 Linuxer 用户多多少少都会一点 shell .
    jyf007
        7
    jyf007  
       2017-06-22 20:30:56 +08:00
    @samray portage 不是你所知道的,有些内核都要自己动手编译。
    sammo
        8
    sammo  
       2017-06-22 23:43:59 +08:00
    如果所有系统全都用一个 Linux 发行版 ...
    SharkIng
        9
    SharkIng  
       2017-06-23 09:47:46 +08:00
    Mac 下面这个还行 https://github.com/lra/mackup
    samray
        10
    samray  
    OP
       2017-06-23 09:52:58 +08:00
    @SharkIng 看起来似乎就是我想要的效果,只是如果我想要的工具它不支持,我也是很无奈
    samray
        11
    samray  
    OP
       2017-06-23 09:54:23 +08:00
    @sammo 作为一个 合格 Linuxer,当然可以去折腾其他发行版本.不同的发行版本适用不同的场景嘛.
    reus
        12
    reus  
       2017-06-23 10:11:06 +08:00
    systemd-nspawn.
    hellove1985
        13
    hellove1985  
       2017-06-23 10:25:11 +08:00
    ansible 安装, stow 管理 dotfile, 其实 ansible 不需要你会 Python
    samray
        14
    samray  
    OP
       2017-06-23 12:01:54 +08:00
    @hellove1985 这么看来,值得尝试哈.我原来一直都是直接  ln -fs,并没有使用过 stow. 看来可以去学习一下.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5189 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:14 · PVG 15:14 · LAX 00:14 · JFK 03:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.