# 安装Linux操作系统

这里以 ubuntu-24.04 为例,在虚拟机上安装 ubuntu-24.04.1-live-server-amd64 服务器版,安装过程略,但有几点需要注意的地方:

# 1. 虚拟机设置

1)虚拟机设置中的网络配置,建议将网络连接设置为:桥接模式。注:桥接模式将宿主Windows系统同属于一个网络

2)虚拟机设置中的显示器,将3D图像中的 加速 3D 图形(3) 前的✓去掉。如果不去掉✓,会影响系统稳定。

3)安装完成操作系统后,把虚拟机设置中的 CD/DVD(SATA) 设置状态的 启动时连接 前的✓去掉。如果不去掉✓,将会启动不了系统。

# 2. 启用 root 用户

    默认 root 用户没有启用,需要通过设置root用户密码来启用root:

kedao@kedao:~$ sudo passwd root
[sudo] password for kedao: 
New password: 
Retype new password: 
passwd: password updated successfully;
1
2
3
4
5

# 3. 设置 sudo 免密

    切换到root用户,修改文件 /etc/sudoers,文件默认为只读,需设置编辑权限,然后编辑 /etc/sudoers 文件

kedao@kedao:~$ su - root
root@kedao:~# chmod u+w /etc/sudoers
root@kedao:~# vi /etc/sudoers
1
2
3

    在文件末尾并增加一行(注:kedao 为你的用户名):

kedao ALL=(ALL) NOPASSWD: ALL
1

修改完成,切换回 kedao 用户

root@kedao:~# su - kedao
1

# 4. 设置静态ip

    检查 NetworkManager 服务状态,查看是否已安装:

kedao@kedao:~$ sudo systemctl status NetworkManager
1

    如果没有安装,则执行命令 sudo apt install network-manager 进行安装:

kedao@kedao:~$ sudo apt install network-manager
1

    编辑 netplan 配置文件,这个文件位于 /etc/netplan/ 目录下

kedao@kedao:~$ ls /etc/netplan/
50-cloud-init.yaml
1
2

查看网络接口:

kedao@kedao:/$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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 noprefixroute 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:0d:ca:59 brd ff:ff:ff:ff:ff:ff
    altname enp2s0
    inet 192.168.43.5/24 metric 100 brd 192.168.43.255 scope global dynamic ens32
       valid_lft 2602sec preferred_lft 2602sec
    inet6 fe80::20c:29ff:fe0d:ca59/64 scope link 
       valid_lft forever preferred_lft forever
1
2
3
4
5
6
7
8
9
10
11
12
13
14

    网络接口名称为:ens32     编辑 50-cloud-init.yaml 文件

kedao@kedao:~$ sudo vi /etc/netplan/50-cloud-init.yaml
1

    在 50-cloud-init.yaml 文件中配置静态IP

network:
  version: 2
  renderer: networkd
  ethernets:
    ens32:
      dhcp4: no
      addresses:
        - 192.168.43.30/24
      routes:
        - to: default
          via: 192.168.43.1
      nameservers:
        addresses:
          - 192.168.43.1
          - 8.8.8.8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

    应用Netplan配置及验证配置:

kedao@kedao:~$ sudo netplan apply
kedao@kedao:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> 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 noprefixroute 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:0d:ca:59 brd ff:ff:ff:ff:ff:ff
    altname enp2s0
    inet 192.168.43.30/24 brd 192.168.43.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe0d:ca59/64 scope link 
       valid_lft forever preferred_lft forever
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 5. 调整系统内核参数

    编辑文件 /etc/sysctl.conf:

kedao@kedao-dev:~$ sudo vi /etc/sysctl.conf
1

    写入如下参数:

kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 50100 64128000 50100 1280
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.file-max = 7672460
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=8192
1
2
3
4
5
6
7
8
9
10
11
12

    执行命令生效

kedao@kedao-dev:~$ sudo sysctl -p
1

    编辑文件 /etc/security/limits.conf:

kedao@kedao-dev:~$ sudo vi /etc/security/limits.conf
1

    写入如下参数:

*       soft    nofile  131072
*       hard    nofile  131072
*       soft    nproc   131072
*       hard    nproc   131072
*       soft    core    unlimited
*       hard    core    unlimited
*       soft    memlock 50000000
*       hard    memlock 50000000
1
2
3
4
5
6
7
8

    修改完成,重启系统使参数生效。

kedao@kedao-dev:~$ sudo reboot
1

# 6. 设置时区

    查看系统默认设置的时区,执行命令 timedatectl

kedao@kedao:/opt/kedao/bin$ timedatectl
               Local time: Sun 2025-04-27 00:53:27 UTC
           Universal time: Sun 2025-04-27 00:53:27 UTC
                 RTC time: Sun 2025-04-27 00:53:26
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
1
2
3
4
5
6
7
8

    如果不是北京时间,则修改时区为北京时间,执行命令 timedatectl set-timezone Asia/Shanghai,修改后再次执行命令 timedatectl 查看修改结果

kedao@kedao:/opt/kedao/bin$ sudo timedatectl set-timezone Asia/Shanghai
kedao@kedao:/opt/kedao/bin$ timedatectl
               Local time: Sun 2025-04-27 08:53:40 CST
           Universal time: Sun 2025-04-27 00:53:40 UTC
                 RTC time: Sun 2025-04-27 00:53:40
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
1
2
3
4
5
6
7
8
9

# 开发环境设置

# 1. 安装 g++ gcc

    查看 g++、gcc 的版本,如果已安装,则跳过该步:

kedao@kedao:~$ gcc --version
Command 'gcc' not found, but can be installed with:
sudo apt install gcc
kedao@kedao:~$ g++ --version
Command 'g++' not found, but can be installed with:
sudo apt install g++
1
2
3
4
5
6

    安装 build-essential,build-essential包含了g++和gcc,以及其他一些编译工具,如make

kedao@kedao:~$ sudo apt update
kedao@kedao:~$ sudo apt install build-essential
1
2

# 2. 安装 GDB

    查看 GDB 的版本,如果没有安装,则进行安装,操作如下:

kedao@kedao:~$ gdb --version
Command 'gdb' not found, but can be installed with:
sudo apt install gdb
kedao@kedao:~$ sudo apt install gdb
1
2
3
4

# 3. 安装 JDK

    检查是否安装了 JDK :

kedao@kedao:~$ javac -version
Command 'javac' not found, but can be installed with:
sudo apt install openjdk-17-jdk-headless  # version 17.0.14+7-1~24.04, or
sudo apt install openjdk-21-jdk-headless  # version 21.0.6+7-1~24.04.1
sudo apt install default-jdk              # version 2:1.17-75
sudo apt install openjdk-11-jdk-headless  # version 11.0.26+4-1ubuntu1~24.04
sudo apt install openjdk-8-jdk-headless   # version 8u442-b06~us1-0ubuntu1~24.04
sudo apt install ecj                      # version 3.32.0+eclipse4.26-2
sudo apt install openjdk-19-jdk-headless  # version 19.0.2+7-4
sudo apt install openjdk-20-jdk-headless  # version 20.0.2+9-1
sudo apt install openjdk-22-jdk-headless  # version 22~22ea-1
1
2
3
4
5
6
7
8
9
10
11

    如果没有安装,执行 sudo apt install default-jdk 进行安装,操作如下:

kedao@kedao:~$ sudo apt install default-jdk
1

    查看JDK的版本

kedao@kedao:~$ javac -version
javac 21.0.6
kedao@kedao:~$ java -version
openjdk version "21.0.6" 2025-01-21
OpenJDK Runtime Environment (build 21.0.6+7-Ubuntu-124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.6+7-Ubuntu-124.04.1, mixed mode, sharing)
1
2
3
4
5
6

    查看JDK的安装路径:

kedao@kedao:~$ sudo update-alternatives --config java
There is 1 choice for the alternative java (providing /usr/bin/java).

  Selection    Path                                         Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111      auto mode
  1            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111      manual mode

Press <enter> to keep the current choice[*], or type selection number:
1
2
3
4
5
6
7
8
9

    可以看到安装路径是:/usr/lib/jvm/java-21-openjdk-amd64     设置环境变量 JAVA_HOME,可以在 /etc/environment 文件中添加环境变量,或者在 /etc/profile/etc/profile.d/ 目录下的脚本文件中添加。例如,编辑 /etc/environment 文件:

kedao@kedao:~$ sudo vi /etc/environment
1

    在 /etc/environment 文件中添加 JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64",如下:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
1
2

    使环境变量生效

kedao@kedao:~$ source /etc/environment
1

# 4. 安装 Maven

    查看 Maven 的版本,如果没有安装,则 执行 sudo apt install maven 进行安装:

kedao@kedao:~$ mvn -v
Command 'mvn' not found, but can be installed with:
sudo apt install maven
kedao@kedao:~$ sudo apt install maven
1
2
3
4

    查看 Maven 的版本,如下:

kedao@kedao:~$ mvn -v
Apache Maven 3.8.7
Maven home: /usr/share/maven
Java version: 21.0.6, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.8.0-58-generic", arch: "amd64", family: "unix"
1
2
3
4
5
6

    设置环境变量,Maven 的安装路径为:/usr/share/maven

kedao@kedao:~$ sudo vi /etc/environment
1

    在 /etc/environment 文件中添加 MAVEN_HOME="/usr/share/maven",如下:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
MAVEN_HOME="/usr/share/maven"
1
2
3

    使环境变量生效

kedao@kedao:~$ source /etc/environment
1

# 5. 安装 Python3 和 pip3

    查看 Python3 和 pip3 的版本,如果已经安装则不用再安装:

kedao@kedao:~$ python3 --version
Python 3.12.3
kedao@kedao:~$ pip3 --version
Command 'pip3' not found, but can be installed with:
sudo apt install python3-pip
kedao@kedao:~$ 
kedao@kedao:~$ sudo apt install python3-pip
1
2
3
4
5
6
7

# 6. 安装 Node.js

    查看版本,执行命令 node -v 和 npm -v:     如没有安装,不推荐执行命令 sudo apt install nodejs 安装(这样安装的版本比较旧),使用 NodeSource Node.js 二进制发行版进行

kedao@kedao:~$ node -v
Command 'node' not found, but can be installed with:
sudo apt install nodejs
kedao@kedao:~$ npm -v
Command 'npm' not found, but can be installed with:
sudo apt install npm
1
2
3
4
5
6

安装     更新包管理器和安装依赖

kedao@kedao:~$ sudo apt update
kedao@kedao:~$ sudo apt install curl software-properties-common
1
2

    添加NodeSource Node.js PPA

kedao@kedao:~$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
1

    安装Node.js:

kedao@kedao:~$ sudo apt install nodejs
1

# 7. 安装 UnixODBC

    查看 UnixODBC 的版本,如没安装,执行命令 sudo apt install unixodbc odbcinst unixodbc-dev 进行安装:

kedao@kedao:~$ sudo apt install unixodbc odbcinst unixodbc-dev
1

# 8. 安装数据库驱动

    这里使用的是 PostgreSQL 16,所以安装 PostgreSQL 对应的驱动程序     安装系统依赖:

kedao@kedao:~$ sudo apt install -y systemtap-sdt-dev libicu-dev libreadline-dev zlib1g-dev libssl-dev libpam0g-dev libxml2-dev libxslt1-dev  libldap-dev libsystemd-dev  gettext tcl-dev libpython3-dev libperl-dev
1

    设置自动存储库:

kedao@kedao:~$ sudo apt install curl ca-certificates
kedao@kedao:~$ sudo install -d /usr/share/postgresql-common/pgdg
kedao@kedao:~$ sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
kedao@kedao:~$ sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
1
2
3
4

    安装 PostgreSQL 的驱动程序:

kedao@kedao:~$ sudo apt update
kedao@kedao:~$ sudo apt install odbc-postgresql libpq-dev 
1
2

# 9. 配置ODBC

    查看odbc的驱动信息:

kedao@kedao:~$ cat /etc/odbcinst.ini
[PostgreSQL ANSI]
Description=PostgreSQL ODBC driver (ANSI version)
Driver=psqlodbca.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1

[PostgreSQL Unicode]
Description=PostgreSQL ODBC driver (Unicode version)
Driver=psqlodbcw.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

    有两个驱动 PostgreSQL ANSIPostgreSQL Unicode,在配置 /etc/odbc.ini 时,使用 PostgreSQL ANSI,编辑 /etc/odbc.ini

kedao@kedao:~$ sudo vi /etc/odbc.ini
1

    增加节点 [ myPgDB ],内容如下:

[myPgDB]
Description = link to pg
Driver = PostgreSQL ANSI
Database = asv_db
Servername = 192.168.43.135
UserName = postgres
Password = postgres
Port = 5432
ReadOnly = 0
ConnSettings = set client_encoding to UTF8
1
2
3
4
5
6
7
8
9
10

    执行命令 sudo odbcinst -i -d -f /etc/odbc.ini 刷新配置:

kedao@kedao:~$ sudo odbcinst -i -d -f /etc/odbc.ini
odbcinst: Driver installed. Usage count increased to 1. 
    Target directory is /etc
1
2
3

    测试连接,执行 isql -v myPgDB,如:

kedao@kedao:~$ isql -v myPgDB
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| echo [string]                         |
| quit                                  |
|                                       |
+---------------------------------------+
1
2
3
4
5
6
7
8
9
10

至此,开发服务器的必要工具配置完成。