setup,yml
· 5.4 KiB · Text
Raw
---
- name: 个人开发环境一键配置
hosts: localhost
connection: local
become: true
vars:
go_version: "1.25.6"
user_home: "/home/{{ ansible_env.SUDO_USER }}"
tasks:
- name: 更新 apt 缓存
apt:
update_cache: yes
- name: 安装基础工具
apt:
name:
- curl
- git
- wget
- vim
- build-essential
- nano
state: present
- name: 下载 Go 语言包
get_url:
url: "https://golang.google.cn/dl/go{{ go_version }}.linux-amd64.tar.gz"
dest: "/tmp/go.tar.gz"
- name: 解压 Go 到 /usr/local
unarchive:
src: "/tmp/go.tar.gz"
dest: /usr/local
remote_src: yes
creates: "/usr/local/go/bin/go" # 如果存在就不重复解压
- name: 配置 GOPROXY (写入 .bashrc)
lineinfile:
path: "{{ user_home }}/.bashrc"
line: "{{ item }}"
create: yes
loop:
- 'export PATH=$PATH:/usr/local/go/bin'
- 'export GOPROXY=https://goproxy.cn,direct'
- name: 下载并运行 NodeSource 安装脚本 (安装 Node 20 LTS)
shell: curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
args:
creates: /etc/apt/sources.list.d/nodesource.list
- name: 安装 Node.js (包含 npm)
apt:
name: nodejs
state: present
# ---------------------------------------------------
# 5. Python 极速包管理器:UV (Rust编写)
# ---------------------------------------------------
- name: 安装 UV
shell: curl -LsSf https://astral.sh/uv/install.sh | sh
args:
creates: "{{ ansible_env.HOME }}/.cargo/bin/uv"
# UV 默认装在 ~/.cargo/bin 下,如果没有 rust 会装在 ~/.local/bin
- name: 配置 UV 国内镜像 (写入 .bashrc)
lineinfile:
path: "{{ ansible_env.HOME }}/.bashrc"
line: "{{ item }}"
create: yes
loop:
- '# UV 配置'
- 'export UV_PYPI_MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple'
# 让 UV 安装 Python 版本时也走国内/加速镜像 (如果有的话,目前 UV 主要是 PyPI 镜像)
# ---------------------------------------------------
# 6. Mamba (通过 Miniforge 安装,代替 Anaconda)
# ---------------------------------------------------
- name: 下载 Miniforge 安装脚本
get_url:
url: "https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh"
dest: "/tmp/Miniforge3.sh"
mode: '0755'
- name: 自动安装 Miniforge (Mamba)
shell: /tmp/Miniforge3.sh -b -p "{{ ansible_env.HOME }}/miniforge3"
args:
creates: "{{ ansible_env.HOME }}/miniforge3"
- name: 初始化 Conda/Mamba Shell
shell: "{{ ansible_env.HOME }}/miniforge3/bin/conda init bash"
register: conda_init_result
# 只有当输出中包含 "modified" 字样时,Ansible 才认为系统被修改了
# 如果 Conda 说 "no change",Ansible 就会显示绿色 (OK)
changed_when: "'modified' in conda_init_result.stdout"
- name: 配置 Conda/Mamba 国内源 (.condarc)
copy:
dest: "{{ ansible_env.HOME }}/.condarc"
content: |
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
# ---------------------------------------------------
# 7. Pixi (下一代 Conda 项目管理工具)
# ---------------------------------------------------
- name: 安装 Pixi
shell: curl -fsSL https://pixi.sh/install.sh | bash
args:
creates: "{{ ansible_env.HOME }}/.pixi/bin/pixi"
- name: 创建 Pixi 全局配置目录
file:
path: "{{ ansible_env.HOME }}/.config/pixi"
state: directory
- name: 配置 Pixi 镜像 (config.toml)
copy:
dest: "{{ ansible_env.HOME }}/.config/pixi/config.toml"
content: |
# 强制 Pixi 使用国内 Conda Forge 镜像
default_channels = ["https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge"]
# ---------------------------------------------------
# 8. R 语言环境及全局换源
# ---------------------------------------------------
- name: 安装 R 基础包
apt:
name:
- r-base
- r-base-dev
state: present
- name: 配置 R 全局 CRAN 镜像 (清华源)
lineinfile:
path: /etc/R/Rprofile.site
line: 'local({r <- getOption("repos"); r["CRAN"] <- "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"; options(repos = r)})'
create: yes
state: present
# 注意:这步需要 sudo 权限,become: true 会处理
| 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 会处理 |