跳转至

Ubuntu 初始化流程

该教程以 ubuntu 22.04 为例,介绍如何初始化一个 ubuntu 系统。

ubuntu-2204

基础配置

  1. 更换主机名

    sudo hostnamectl set-hostname <new-hostname>
    

  2. 更换用户

    # 添加用户
    sudo adduser libaoy
    sudo usermod -aG sudo libaoy
    

  3. 生成 SSH 密钥

    ssh-keygen -t ed25519 -C "libaoyang1997@gmail.com"
    

  4. 将公钥添加到 ~/.ssh/authorized_keys 文件中

    # 本机免密登录
    cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
    

  5. 配置 git 用户信息

    git config --global user.name "Libao Yang"
    git config --global user.email "libaoyang1997@gmail.com"
    

更换 apt 源

  1. 备份原始文件

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    

  2. 运行更换命令

    cat <<EOF | sudo tee /etc/apt/sources.list
    deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
    EOF
    
    cat <<EOF | sudo tee /etc/apt/sources.list
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
    EOF
    
  3. 更新索引

    sudo apt update
    sudo apt upgrade
    

安装常用工具

sudo apt install -y vim curl wget git net-tools tree tmux

Docker 安装

  1. 安装基础依赖

    sudo apt update
    sudo apt install -y ca-certificates curl gnupg
    
  2. 添加 Docker 官方密钥与软件源

    # 创建密钥目录
    sudo install -m 0755 -d /etc/apt/keyrings
    
    # 从阿里云镜像下载密钥
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    
    # 添加阿里云软件源
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
        $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
        sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  3. 安装 Docker & Compose

    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. 免 sudo 运行(可选但强烈建议)

    sudo usermod -aG docker $USER
    newgrp docker
    
  5. 验证安装

    docker --version
    docker compose version
    

Docker 代理设置

  1. 创建并编辑配置文件

    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
    

  2. 配置

    [Service]
    Environment="HTTP_PROXY=http://127.0.0.1:7890/"
    Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
    Environment="NO_PROXY=localhost,127.0.0.1"
    

  3. 重启 Docker 服务

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

Zsh 安装配置

  1. 安装基础工具

    sudo apt install wget git curl vim -y
    
    # 安装 Zsh
    sudo apt install zsh -y
    

  2. 安裝 Oh My Zsh

    sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    

  3. 安装 PowerLevel10k 主题

    git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
    

  4. 安装 zsh-autosuggestionszsh-syntax-highlighting 插件

    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
    

  5. 配置 Zsh

    vim ~/.zshrc
    

    修改配置项如下:

    ZSH_THEME="powerlevel10k/powerlevel10k"
    ...
    plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
    

    重启 Zsh

    source ~/.zshrc
    

  6. 配置快捷命令到 $ZSH_CUSTOM 目录中, 详细请参考 leo-ops/zsh

    ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom} 目录下创建文件

    PROXY_HOST="http://127.0.0.1:7890"
    
    proxy() {
        export http_proxy="$PROXY_HOST"
        export https_proxy="$PROXY_HOST"
        export HTTP_PROXY="$PROXY_HOST"
        export HTTPS_PROXY="$PROXY_HOST"
        export ALL_PROXY="$PROXY_HOST"
        export no_proxy="localhost,127.0.0.1,192.168.*,10.*,*.local"
        export NO_PROXY="localhost,127.0.0.1,192.168.*,10.*,*.local"
        echo "🟢 Proxy is enabled: $PROXY_HOST 🚀"
    }
    
    noproxy() {
        unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY no_proxy NO_PROXY
        echo "🔴 Proxy is disabled 🚫"
    }
    
    llm-api-env() {
        # Claude code api key
        export ANTHROPIC_BASE_URL=""
        export ANTHROPIC_AUTH_TOKEN=""
    }
    
    home-server-env() {
        # CUDA 12.8
        export PATH=/usr/local/cuda-12.8/bin:$PATH
        export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH
    
        # Rust
        export PATH=$HOME/.cargo/bin:$PATH
    
        # Golang
        export GOPATH=$HOME/tools/go
        export PATH=$PATH:$GOPATH/bin:/usr/local/go/bin
    
        # Vcpkg
        export VCPKG_ROOT=$HOME/tools/vcpkg
        export PATH=$VCPKG_ROOT:$PATH
    }
    
    # Load e based on hostname
    case $(hostname) in
        "home-server")
            llm-api-env
            home-server-env
            ;;
        "tencent-server")
            ;;
    esac
    
    k8s-alias() {
        alias k='kubectl'
        alias kgp='kubectl get pods'
    }
    
    home-server-alias() {
        alias lr='cd ${HOME}/learnhub/learning_ray'
        # ...
    }
    
    common-alias() {
        alias ops='cd ${HOME}/leo-ops'
        alias note='cd ${HOME}/learnhub/Leo_Note'
    }
    
    # Load aliases based on hostname
    case $(hostname) in
        "home-server")
            k8s-alias
            home-server-alias
            common-alias
            ;;
        "tencent-server")
            common-alias
            ;;
    esac