0 背景
有了远程连接工具之后,似乎作为服务器的Ubuntu24.04
桌面版有点备受冷落了,桌面版的Ubuntu24.04
的优势是图形化桌面,是作为一个日常工作的系统来用的,就像Windows
,如果要作为服务器来用的话,显得不方便,因为一般不会直接去操作服务器(远程即可)。
所以图形化界面显得多余而且占资源,所以安装一个专业的服务器版的Ubuntu24.04
是有必要的。
1 下载镜像
直接给出清华源下载地址
2 安装虚拟机
关于VirtualBox
的安装参考这篇文章,不过VirtualBox7.0
似乎默认不能安装在C
盘,你可以选择妥协,也可以参考如下解决方法:
以管理员方式打开Windows
的命令行,执行:
icacls G:\VirtualBox /reset /t /c
icacls G:\VirtualBox /inheritance:d /t /c
icacls G:\VirtualBox /grant *S-1-5-32-545:(OI)(CI)(RX)
icacls G:\VirtualBox /deny *S-1-5-32-545:(DE,WD,AD,WEA,WA)
icacls G:\VirtualBox /grant *S-1-5-11:(OI)(CI)(RX)
icacls G:\VirtualBox /deny *S-1-5-11:(DE,WD,AD,WEA,WA)
其中,G:\VirtualBox
是你要将VirtualBox
安装到的文件夹,最好是直接建在盘符下一级,建好之后到文件夹中执行上面的命令即可。
3 安装UbuntuServer24.04
到这一步时,在VirtualBox
上的操作已经完了,和这篇文章中一样,这里从Try or Install Ubuntu
开始。通过一系列图片展示安装过程:
可以看到界面上方有很多语言的欢迎语,不过没有中文的,和桌面版不同,安装过程的语言也没有中文的可选,所以选择English
。
默认,回车下一步
默认,回车下一步
默认也行,不过我选择最小化,后面安装好后可以通过unminimize
恢复
默认,下一步
不填,默认,下一步
下载源,这个我写的是阿里源,也可以写其它源,要等待check完后再下一步(显示Reading package lists...
即可)
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
https://mirrors.aliyun.com/ubuntu/
磁盘分区,默认,下一步
默认,下一步
确认,下一步
设置用户名和主机名,下一步
skip,下一步
选择安装OpenSSH server
,这个很重要,下一步
什么都不选,下一步
等待安装完成,下一步
重启
安装到此结束,几乎全是默认,手动操作的很少。
4 配置基本环境
用户登录到系统中,现在虚拟机的网络连接模式应该是默认的网络地址转换(NAT)
,是可以联网的。
接下来配置环境,笔者已经做过很多次手动一步一步的操作了,虽然熟练但是已经恶心得想吐了,所以想偷个懒,写了个脚本一行命令执行配置。
不过现在需要将脚本传送进来,根据这篇文章中介绍的方法即可将脚本文件传送进来,然后执行(请注意不要使用sh script.sh
的方式执行,因为脚本中可能有些命令会无法正确执行,这是sh
和bash
的区别)
# 先到脚本文件所在目录
cd /path/to/script
# 然后给脚本添加执行权限
chmod +x script.sh
# 最后执行
./script.sh
那么脚本文件的内容是什么呢?
#!/bin/bash
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
PURPLE='\033[35m'
CYAN='\033[36m'
WHITE='\033[37m'
RESET='\033[0m'
tip() {
local len=${#1}
local n=$((len+22))
local color_1=${RED}
local color_2=${GREEN}
echo -e "${color_1}$(printf "%0.s-" $(seq 1 ${n}))${RESET}"
echo -e "${color_1}++++++++++${RESET} ${color_2}${1}${RESET} ${color_1}++++++++++${RESET}"
echo -e "${color_1}$(printf "%0.s-" $(seq 1 ${n}))${RESET}"
}
# 首先, 更新系统源
tip "UPDATE SYSTEM"
sudo apt update
sudo apt upgrade -y
# 设置用户使用 sudo 命令免密
# 根据文件 /etc/sudoers 中的注释, 比起直接修改 /etc/sudoers
# 更好的方法是在 /etc/sudoers.d/ 目录中加入配置文件
tip "MAKE YOU BECOME A SUDOER AND NO NEED PASSWORD"
echo "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee "/etc/sudoers.d/${USER}"
# 如果安装的是最小化的系统的话, 上面没有 vi 编辑器, 也不能用 visudo 命令
# 只能先安装编辑器, 选择 vim
tip "INSTALL EDITOR [vim]"
sudo apt install vim
# 配置 vim
cd ~
echo -e 'set nu\nset tabstop=4\nset softtabstop=4\nset shiftwidth=4\nset expandtab\nset showmatch\nset ruler\nset autoindent\nset undofile\nset undodir=~/.vim/undodir\nset showmode\nset showcmd\nset hlsearch\nset t_Co=256\nset noerrorbells\nset vb t_vb=\nset laststatus=2\nset statusline=%F%m%r%h%w\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%Y\ -\ %H:%M\")}\nset backspace=2\nsyntax on\nsyntax enable\nset enc=utf-8\nset fenc=utf-8\nset fencs=ucs-bom,utf-8,cp936,gb18030,gb2312,gbk,big5,euc-jp,euc-kr,shift-jis,latin1\nset termencoding=utf-8\n' > .vimrc
# 配置静态 IP
tip "CONFIG STATIC IP ADDRESS"
# 设置默认的 IP,这里只是给个格式示例,没有什么特别的含义
ipv4="192.168.0.3/24"
gateway="192.168.0.1"
dns="45.14.107.16,180.76.76.76,8.8.8.8"
# 配置静态 IP 地址,最好就是该虚拟机在DHCP下被分配的IP地址,避免IP冲突
read -p "set ipv4 address(default: ${ipv4}): " tmp
if [ -n "${tmp}" ]; then
echo "use user input."
ipv4=${tmp}
else
echo "use default."
fi
echo "ipv4: ${ipv4}"
# 配置网关, 默认是 IP 地址的最后一段取 1,请和宿主机的保持一致
read -p "set gatway(default: ${gateway}): " tmp
if [ -n "${tmp}" ]; then
echo "use user input."
gateway=${tmp}
else
echo "use default."
fi
echo "gateway: ${gateway}"
# 配置 DNS 服务器地址
read -p "set DNS servers, sep by comma(default: ${dns}): " tmp
if [ -n "${tmp}" ]; then
echo "use user input."
dns=${tmp}
else
echo "use default."
fi
echo "dns: ${dns}"
# 选择网卡
echo "next to chose a network interface, you can view them by using command \`ip link show\` or \`ip a\`"
interfaces=($(ip link show | awk '/^[0-9]+:/ {print substr($2, 1, length($2)-1)}'))
# 使用 select 命令生成菜单
select network in "${interfaces[@]}"; do
if [[ -n "${network}" ]]; then
echo "use user's choice: ${network}"
break
else
echo "invalid option."
fi
done
# 输出选中的网卡名称
echo "network interface: ${network}"
# 修改关于网络的配置文件, 注意版本的对应, Ubuntu24.04中配置文件是 /etc/netplan/50-cloud-init.yaml
netplan_path="/etc/netplan/"
netplan_filename="50-cloud-init.yaml"
cd ${netplan_path}
# 首先备份原始的配置文件
sudo cp -f ${netplan_filename} "${netplan_filename}.backup"
# 暂时放开权限
sudo chmod 777 ${netplan_filename}
echo -e "network:\n renderer: networkd\n ethernets:\n # your real network interface name\n ${network}:\n # close DHCP\n dhcp4: false\n dhcp6: false\n # static ip and subnet\n addresses: [${ipv4}]\n # gateway\n routes:\n - to: default\n via: ${gateway}\n # DNS \n nameservers:\n addresses: [${dns}]\n version: 2" > ${netplan_filename}
# 恢复原有的权限, 原有权限为 -rw------- 即 600
sudo chmod 600 ${netplan_filename}
# 根据配置文件中的注释说明, 这个配置文件中的配置会在重启之后被重置
# 如果不想被重置的话, 就在 /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg 文件中写入内容 network: {config: disabled}
cfg_path="/etc/cloud/cloud.cfg.d/"
cfg_file="99-disable-network-config.cfg"
# 文件默认是不存在的
cd ${cfg_path}
# 先创建, 默认权限是 644
sudo touch ${cfg_file}
# 暂时放开权限
sudo chmod 777 ${cfg_file}
# 写入内容
echo "network: {config: disabled}" > ${cfg_file}
# 恢复权限
sudo chmod 644 ${cfg_file}
# 调整时区
profile_path="/etc/profile"
# 备份文件
sudo cp -f "${profile_path}" "${profile_path}.backup"
sudo chmod 777 "${profile_path}"
echo -e '\n#Time Zone config\nTZ=Asia/Shanghai\nexport TZ' >> "${profile_path}"
sudo chmod 644 "${profile_path}"
source "${profile_path}"
# 到此为止, 总共做了三个基本配置, 一个是配置用户 sudo 免密, 一个是配置静态 IP, 一个是调整时区
# 下面安装基本的环境软件等
tip "INSTALL COMMON SOFTWARE"
sudo apt install -y build-essential net-tools zip unzip
# 刷新网络,注意这一步不能在安装软件之前,否则网络连接状态是NAT且IP是静态IP,会连不上网
sudo netplan apply
echo -e "${GREEN}The basic system environment has been configured. Now, please change the virtual machine's network connection mode to bridged mode.${RESET}"
# 以上, Ubuntu 基本环境就配置好了
在脚本执行成功后请切换虚拟机的网络连接模式为桥接网卡
,执行这个脚本需要你自己输入静态IP,网关,和DNS等,不过在脚本的执行过程中只有一次机会,如果输错了可以Ctrl+C
退出,再次执行即可。还需要注意的是,脚本执行过程中设置的静态IP
和宿主机的网络有关,千万注意!!在cmd
窗口中输入如下命令查看即可。
ipconfig
当然,用的哪个网卡看具体的,笔者用的Wifi
。你在虚拟机中配置的静态IP
需要和你的宿主机处于同一局域网,网关也要和宿主机的一致(如果使用桥接网卡
模式)。
执行完后有什么影响:
- 文件
/etc/netplan/50-cloud-init.yaml
产生了一个备份文件/etc/netplan/50-cloud-init.yaml.backup
,其内容被修改了; - 新生成了三个文件
/etc/sudoers.d/${USER}
,/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
,~/.vimrc
- 备份并修改了文件
/etc/profile
如果想恢复到脚本执行之前的环境,只需要将脚本修改的内容恢复回去即可(不过没必要把安装的软件卸载掉),下面给出恢复脚本:
#!/bin/bash
# 删除.vimrc
cd ~
rm -rf .vimrc
# 恢复网络配置文件
netplan_path="/etc/netplan/"
netplan_filename="50-cloud-init.yaml"
cd ${netplan_path}
sudo cp -f "${netplan_filename}.backup" ${netplan_filename}
# 删除配置文件
cfg_path="/etc/cloud/cloud.cfg.d/"
cfg_file="99-disable-network-config.cfg"
sudo rm -rf "${cfg_path}${cfg_file}"
# 恢复对profile的修改
profile_path="/etc/profile"
# 恢复文件
sudo cp -f "${profile_path}.backup" "${profile_path}"
source "${profile_path}"
# 刷新网络
sudo netplan apply
# 恢复对sudo免密的设置,只需要删除文件即可
sudo rm -rf "/etc/sudoers.d/${USER}"
# 注意执行完脚本后将网络连接模式修改为NAT
注意这个时候虚拟机还不是一个“独立”的服务器,还需要手动将网络连接模式修改为桥接网卡
,此时虚拟机的状态为静态IP + 桥接网卡
,而且可以联网,并且可以用远程连接工具Termius
连接使用
5 总结
这篇博客介绍了如何使用VirtualBox
安装黑窗口版的Ubuntu24.04
,并给出了“一键配置”服务器基本环境的脚本,安装时可以参考。