liueic revised this gist . Go to revision
1 file changed, 154 insertions
setup,yml(file created)
| @@ -0,0 +1,154 @@ | |||
| 1 | + | --- | |
| 2 | + | - name: 个人开发环境一键配置 | |
| 3 | + | hosts: localhost | |
| 4 | + | connection: local | |
| 5 | + | become: true | |
| 6 | + | ||
| 7 | + | vars: | |
| 8 | + | go_version: "1.25.6" | |
| 9 | + | user_home: "/home/{{ ansible_env.SUDO_USER }}" | |
| 10 | + | ||
| 11 | + | tasks: | |
| 12 | + | - name: 更新 apt 缓存 | |
| 13 | + | apt: | |
| 14 | + | update_cache: yes | |
| 15 | + | ||
| 16 | + | - name: 安装基础工具 | |
| 17 | + | apt: | |
| 18 | + | name: | |
| 19 | + | - curl | |
| 20 | + | - git | |
| 21 | + | - wget | |
| 22 | + | - vim | |
| 23 | + | - build-essential | |
| 24 | + | - nano | |
| 25 | + | state: present | |
| 26 | + | ||
| 27 | + | - name: 下载 Go 语言包 | |
| 28 | + | get_url: | |
| 29 | + | url: "https://golang.google.cn/dl/go{{ go_version }}.linux-amd64.tar.gz" | |
| 30 | + | dest: "/tmp/go.tar.gz" | |
| 31 | + | ||
| 32 | + | - name: 解压 Go 到 /usr/local | |
| 33 | + | unarchive: | |
| 34 | + | src: "/tmp/go.tar.gz" | |
| 35 | + | dest: /usr/local | |
| 36 | + | remote_src: yes | |
| 37 | + | creates: "/usr/local/go/bin/go" # 如果存在就不重复解压 | |
| 38 | + | ||
| 39 | + | - name: 配置 GOPROXY (写入 .bashrc) | |
| 40 | + | lineinfile: | |
| 41 | + | path: "{{ user_home }}/.bashrc" | |
| 42 | + | line: "{{ item }}" | |
| 43 | + | create: yes | |
| 44 | + | loop: | |
| 45 | + | - 'export PATH=$PATH:/usr/local/go/bin' | |
| 46 | + | - 'export GOPROXY=https://goproxy.cn,direct' | |
| 47 | + | ||
| 48 | + | - name: 下载并运行 NodeSource 安装脚本 (安装 Node 20 LTS) | |
| 49 | + | shell: curl -fsSL https://deb.nodesource.com/setup_20.x | bash - | |
| 50 | + | args: | |
| 51 | + | creates: /etc/apt/sources.list.d/nodesource.list | |
| 52 | + | ||
| 53 | + | - name: 安装 Node.js (包含 npm) | |
| 54 | + | apt: | |
| 55 | + | name: nodejs | |
| 56 | + | state: present | |
| 57 | + | ||
| 58 | + | # --------------------------------------------------- | |
| 59 | + | # 5. Python 极速包管理器:UV (Rust编写) | |
| 60 | + | # --------------------------------------------------- | |
| 61 | + | - name: 安装 UV | |
| 62 | + | shell: curl -LsSf https://astral.sh/uv/install.sh | sh | |
| 63 | + | args: | |
| 64 | + | creates: "{{ ansible_env.HOME }}/.cargo/bin/uv" | |
| 65 | + | # UV 默认装在 ~/.cargo/bin 下,如果没有 rust 会装在 ~/.local/bin | |
| 66 | + | ||
| 67 | + | - name: 配置 UV 国内镜像 (写入 .bashrc) | |
| 68 | + | lineinfile: | |
| 69 | + | path: "{{ ansible_env.HOME }}/.bashrc" | |
| 70 | + | line: "{{ item }}" | |
| 71 | + | create: yes | |
| 72 | + | loop: | |
| 73 | + | - '# UV 配置' | |
| 74 | + | - 'export UV_PYPI_MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple' | |
| 75 | + | # 让 UV 安装 Python 版本时也走国内/加速镜像 (如果有的话,目前 UV 主要是 PyPI 镜像) | |
| 76 | + | ||
| 77 | + | # --------------------------------------------------- | |
| 78 | + | # 6. Mamba (通过 Miniforge 安装,代替 Anaconda) | |
| 79 | + | # --------------------------------------------------- | |
| 80 | + | - name: 下载 Miniforge 安装脚本 | |
| 81 | + | get_url: | |
| 82 | + | url: "https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh" | |
| 83 | + | dest: "/tmp/Miniforge3.sh" | |
| 84 | + | mode: '0755' | |
| 85 | + | ||
| 86 | + | - name: 自动安装 Miniforge (Mamba) | |
| 87 | + | shell: /tmp/Miniforge3.sh -b -p "{{ ansible_env.HOME }}/miniforge3" | |
| 88 | + | args: | |
| 89 | + | creates: "{{ ansible_env.HOME }}/miniforge3" | |
| 90 | + | ||
| 91 | + | - name: 初始化 Conda/Mamba Shell | |
| 92 | + | shell: "{{ ansible_env.HOME }}/miniforge3/bin/conda init bash" | |
| 93 | + | register: conda_init_result | |
| 94 | + | # 只有当输出中包含 "modified" 字样时,Ansible 才认为系统被修改了 | |
| 95 | + | # 如果 Conda 说 "no change",Ansible 就会显示绿色 (OK) | |
| 96 | + | changed_when: "'modified' in conda_init_result.stdout" | |
| 97 | + | ||
| 98 | + | - name: 配置 Conda/Mamba 国内源 (.condarc) | |
| 99 | + | copy: | |
| 100 | + | dest: "{{ ansible_env.HOME }}/.condarc" | |
| 101 | + | content: | | |
| 102 | + | channels: | |
| 103 | + | - defaults | |
| 104 | + | show_channel_urls: true | |
| 105 | + | default_channels: | |
| 106 | + | - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main | |
| 107 | + | - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r | |
| 108 | + | - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 | |
| 109 | + | custom_channels: | |
| 110 | + | conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud | |
| 111 | + | msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud | |
| 112 | + | bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud | |
| 113 | + | menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud | |
| 114 | + | pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud | |
| 115 | + | pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud | |
| 116 | + | simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud | |
| 117 | + | ||
| 118 | + | # --------------------------------------------------- | |
| 119 | + | # 7. Pixi (下一代 Conda 项目管理工具) | |
| 120 | + | # --------------------------------------------------- | |
| 121 | + | - name: 安装 Pixi | |
| 122 | + | shell: curl -fsSL https://pixi.sh/install.sh | bash | |
| 123 | + | args: | |
| 124 | + | creates: "{{ ansible_env.HOME }}/.pixi/bin/pixi" | |
| 125 | + | ||
| 126 | + | - name: 创建 Pixi 全局配置目录 | |
| 127 | + | file: | |
| 128 | + | path: "{{ ansible_env.HOME }}/.config/pixi" | |
| 129 | + | state: directory | |
| 130 | + | ||
| 131 | + | - name: 配置 Pixi 镜像 (config.toml) | |
| 132 | + | copy: | |
| 133 | + | dest: "{{ ansible_env.HOME }}/.config/pixi/config.toml" | |
| 134 | + | content: | | |
| 135 | + | # 强制 Pixi 使用国内 Conda Forge 镜像 | |
| 136 | + | default_channels = ["https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge"] | |
| 137 | + | ||
| 138 | + | # --------------------------------------------------- | |
| 139 | + | # 8. R 语言环境及全局换源 | |
| 140 | + | # --------------------------------------------------- | |
| 141 | + | - name: 安装 R 基础包 | |
| 142 | + | apt: | |
| 143 | + | name: | |
| 144 | + | - r-base | |
| 145 | + | - r-base-dev | |
| 146 | + | state: present | |
| 147 | + | ||
| 148 | + | - name: 配置 R 全局 CRAN 镜像 (清华源) | |
| 149 | + | lineinfile: | |
| 150 | + | path: /etc/R/Rprofile.site | |
| 151 | + | line: 'local({r <- getOption("repos"); r["CRAN"] <- "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"; options(repos = r)})' | |
| 152 | + | create: yes | |
| 153 | + | state: present | |
| 154 | + | # 注意:这步需要 sudo 权限,become: true 会处理 | |
Newer
Older