Ubuntu Server 18.04 系统代号为 bionic,可以通过 'lsb_release -c'
命令查看,这是一个长期支持版本。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
目录:
1. 下载
2. 创建 U 盘安装盘
3. 安装 Ubuntu Server
3.1. 在第一个安装界面 "Language" 中选择默认的 English 选项进行安装
3.2. 在安装菜单界面选择 "Install Ubuntu Server"
3.3. 在 "Welcome" 语言选择界面也同样选择 English
3.4. 在 "Keyboard configuration" 配置键盘布局
3.5. 在 "Network connections" 配置网络连接
3.6. 在 "Configure proxy" 配置网络代理
3.7. 在 "Configure Ubuntu archive mirror" 更换为国内镜像源
3.8. 在 "Filesystem setup" 界面选择默认的全盘自动分区方案
3.9. 在 "Profile setup" 设置登陆账号和主机名
3.10. 在 "SSH Setup" 选择安装 SSH
3.11. 确认并等待安装完成
3.12. 查看磁盘分区信息
3.13. 安装后系统默认编码是 en_US.UTF-8
3.14. 更改系统默认时区为国内时区
3.15. 设置固定 IP
3.16. 系统更新
1. 下载
- 官网下载:http://releases.ubuntu.com - 国内下载速度慢
- 阿里镜像:https://mirrors.aliyun.com/ubuntu-releases - 国内下载速度快
当前(2020-03-16)的最新 LTS 版为:ubuntu-18.04.4-live-server-amd64.iso。
2. 创建 U 盘安装盘
官方文档:https://help.ubuntu.com/community/Installation/FromUSBStick
官方指引:
- Windows 下使用 Rufus
- MacOS 下使用 UNetbootin for Mac OS X
打开 UNetBootin 前先自行将 U 盘用主引导记录方式格式化为 FAT32 格式,否则 UNetBootin 检测不到 U 盘
- Ubuntu 桌面系统使用自带的
Ubuntu Startup Disk Creator
- 其它 Linux 系统使用 UNetbootin 或者 mkusb
以下为 MacOS 下使用 UNetBootin 的 U 盘制作截图:
- 点选 "光盘镜像" 然后选择下载好的 Ubuntu ISO 文件,驱动器选择对应的 U 盘:
- 点击确定开始制作:
- 制作完成,点击退出,就可使用此 U 盘启动 Ubuntu Server 的安装:
3. 安装 Ubuntu Server
以下安装步骤既适用于 U 盘启动盘的安装,也适合于使用光盘启动的安装。
3.1. 在第一个安装界面 "Language" 中选择默认的 English 选项进行安装
由于安装的是 Server 版,是没有 GUI 的,一般都是通过远程 ssh 连接进服务器维护,故推荐直接安装 English,不推荐使用其它语言。
3.2. 在安装菜单界面选择 "Install Ubuntu Server"
3.3. 在 "Welcome" 语言选择界面也同样选择 English
3.4. 在 "Keyboard configuration" 配置键盘布局
使用默认配置即可:
3.5. 在 "Network connections" 配置网络连接
默认自动 IP 配置,也可以手动指定为固定 IP。推荐安装完毕后再重新设置固定 IP,因此这里使用默认配置:
3.6. 在 "Configure proxy" 配置网络代理
这里使用默认的无代理配置:
3.7. 在 "Configure Ubuntu archive mirror" 更换为国内镜像源
在 "Configure Ubuntu archive mirror" 安装界面记得更换为国内镜像源地址,否则默认自动连接到 Ubuntu 的官方源 https://cn.archive.ubuntu.com/ubuntu,在后续的 "Installing system" 安装界面因为会联网下载很多包,速度将非常慢。
国内镜像源推荐使用阿里的:http://mirrors.aliyun.com/ubuntu
系统安装后可以看到
/etc/apt/sources.list
文件已更改为使用阿里源,Ubuntu 原始的源配置会自动备份在文件/etc/apt/sources.list.curtin.old
。
3.8. 在 "Filesystem setup" 界面选择默认的全盘自动分区方案
这里可以对硬盘进行分区,可自动分区也可自行手动分区。这里选择全盘自动分区方案,即在 "Filesystem setup" 界面选择第一个选项 "Use An Entire Disk",确认后会自动分区及格式化整个磁盘为 ext4 格式:
3.9. 在 "Profile setup" 设置登陆账号和主机名
相关信息按需设置,如:
- Your name 设置为 gftaxi
- server'name 设置为 ubuntu-test-server
- username 设置为 gftaxi
- password 设置为 gftaxi20200101
3.10. 在 "SSH Setup" 选择安装 SSH
在 "SSH Setup" 界面选择 "Install OpenSSH server",默认是没有勾选的:
安装 "Install OpenSSH server" 后才可以在安装完毕后通过 ssh 客户端远程连接。
3.11. 确认并等待安装完成
"SSH Setup" 界面确认后,就耐心等待过程完成:
安装完毕后需手动点击上面的 "Reboot" 重启,重启后就可以看到成功的登陆界面了:
首次登陆后的终端界面如下:
3.12. 查看磁盘分区信息
此次是使用 32GB 的虚拟磁盘执行的虚拟机安装。分别使用 parted、fdisk、lsblk 查询分区信息如下:
$ sudo parted -l
Model: ATA Ubuntu18.04-0 SS (scsi)
Disk /dev/sda: 34.4GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 34.4GB 34.4GB ext4
$ sudo fdisk -l
Disk /dev/loop0: 89.1 MiB, 93417472 bytes, 182456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 55DD2D05-4575-4B21-90DE-FC9CAA535098
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 67106815 67102720 32G Linux filesystem
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89.1M 1 loop /snap/core/8268
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 1M 0 part
└─sda2 8:2 0 32G 0 part /
sr0 11:0 1 1024M 0 rom
由此可见 Ubuntu 默认全盘分区结果是:
- GPT 分区
- 没有独立的 swap 分区(经检测是在根分区下创建一个大小为内存两倍的 swap.img 的文件,可以通过 swapon -s 命令查看交换分区的使用情况)
$ swapon -s Filename Type Size Used Priority /swap.img file 2006012 0 -2
作为参考,执行 'df -h'
结果为:
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 460M 0 460M 0% /dev
tmpfs 98M 1.1M 97M 2% /run
/dev/sda2 32G 4.3G 26G 15% /
tmpfs 490M 0 490M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/loop0 90M 90M 0 100% /snap/core/8268
tmpfs 98M 0 98M 0% /run/user/1000
3.13. 安装后系统默认编码是 en_US.UTF-8
# 查看系统当前编码
$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
$ cat /etc/default/locale
LANG=en_US.UTF-8
对于服务器而言,UTF-8 编码足尔,默认值已满足常规使用需求,无需修改。如果需要修改,直接编辑文件 /etc/default/locale
然后重启即可。
3.14. 更改系统默认时区为国内时区
安装后默认是 UTC 时区,要更改为国内时区:
# 查看当前时区信息
$ date
Sat Mar 21 05:02:37 UTC 2020
$ date -R
Sat, 21 Mar 2020 05:02:42 +0000
$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 Feb 3 18:23 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
$ ls -l /usr/share/zoneinfo/Asia/Shanghai
lrwxrwxrwx 1 root root 6 Sep 20 2019 /usr/share/zoneinfo/Asia/Shanghai -> ../PRC
# 修改为国内时区
$ sudo rm /etc/localtime
$ sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 查看修改后的时区结果
$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 Mar 21 13:05 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
$ date
Sat Mar 21 13:06:16 CST 2020
$ date -R
Sat, 21 Mar 2020 13:06:20 +0800
系统支持的时区信息在 /usr/share/zoneinfo/
目录下,修改 /etc/localtime
软链接到相应的时区即可,上述命令就是查看和将系统 /etc/localtime
默认软链接到的 /usr/share/zoneinfo/Etc/UTC
更改为 /usr/share/zoneinfo/Asia/Shanghai
,这样修改的是系统的全局默认时区。
如果特定用户想使用不同的时区,只要在此特定用户下创建一个环境变量 TZ
,将其值设定为相应的时区值即可,如:export TZ='Asia/Shanghai'
。不同时区的 TZ
值可以通过执行 tzselect
命令一步一步的指引你得到:
$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#? 4
Please select a country whose clocks agree with yours.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Selected time is now: Mon Mar 16 19:48:25 CST 2020.
Universal Time is now: Mon Mar 16 11:48:25 UTC 2020.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
3.15. 设置固定 IP
Ubuntu 从 17.10 开始引入了新的工具 netplan 来设置网络,不再推荐使用以前的 /etc/network/interfaces
配置文件。netplan 的默认描述文件在 /etc/netplan/*.yaml
里。对于 Ubuntu 18.04 Server 这个文件的名称是 /etc/netplan/50-cloud-init.yaml
。
查看当前的网络配置:
$ ls -l /etc/network
total 12
drwxr-xr-x 2 root root 4096 Mar 16 16:34 if-pre-up.d
drwxr-xr-x 2 root root 4096 Mar 16 16:35 if-up.d
-rw-r--r-- 1 root root 190 Feb 4 02:22 interfaces
$ cat /etc/network/interfaces
# ifupdown has been replaced by netplan(5) on this system. See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
# sudo apt install ifupdown
$ ls -l /etc/netplan
total 4
-rw-r--r-- 1 root root 391 Mar 16 16:40 50-cloud-init.yaml
$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp0s5:
dhcp4: true
version: 2
$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s5: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:1c:42:0b:cc:0c brd ff:ff:ff:ff:ff:ff
inet 10.211.55.9/24 brd 10.211.55.255 scope global dynamic enp0s5
valid_lft 1247sec preferred_lft 1247sec
inet6 fdb2:2c26:f4e4:0:21c:42ff:fe0b:cc0c/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591718sec preferred_lft 604518sec
inet6 fe80::21c:42ff:fe0b:cc0c/64 scope link
valid_lft forever preferred_lft forever
从上述文件 /etc/netplan/50-cloud-init.yaml
的内容可以看到,仅设置了 network.ethernets.enp0s5.dhcp4=true
,即自动 IP 配置。如下修改 enp0s5 节点的值来设置固定 IP:
$ sudo vi /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
enp0s5:
dhcp4: false
dhcp6: false
# 可同时设多个,对于 IP4 每个值为 "IP地址/掩码长度"
addresses: [192.168.0.60/24, 'fe80:0:0:0:0:0:c0a8:64d3']
# 网关
gateway4: 192.168.0.1
# 设置 DNS
nameservers:
addresses: [192.168.0.1]
# 完成修改后执行下面的命令使配置生效
$ sudo netplan apply
注意 yaml 文件的缩进务必使用空格而不是 tab 键。
支持的配置属性:
属性名 | 值类型 | 说明 |
---|---|---|
enp0s5 | string | 指定需配置网络接口的名称 |
dhcp4 | boolean | 是否打开 IPv4 的 dhcp,值为 true 或 false |
dhcp6 | boolean | 是否打开 IPv6 的 dhcp,值为 true 或 false |
addresses | array | 设置静态 IP 地址,如 192.168.0.100 |
gateway4 | string | 设置默认网关的 IPv4 地址,如 192.168.0.1 |
nameservers | {addresses, ...} | 指定域名服务器的 IP 地址 |
netplan 官方配置例子可以参考 《Netplan configuration examples》。
3.16. 系统更新
更新软件列表:
$ sudo apt-get update
这个命令会访问源列表(
/etc/apt/sources/list
)里的每个网址,并读取软件列表,然后保存在本地电脑。软件包管理器里看到的软件列表,都是通过 update 命令更新的。
更新软件包:
$ sudo apt-get upgrade
这个命令会把本地已安装的软件,与刚下载的软件列表里对应软件进行对比,如果发现已安装的软件版本太低,就提示更新。