1. 安装Ubuntu
1.1 下载镜像
操作系统是ubuntu20.04server版本,可以在该镜像地址下载。
1.2 制作启动盘
U盘启动盘工具rufus下载地址:rufus
Rufus制作启动盘的步骤如下:
设备一栏选择的是我们准备要用的U盘
选择,引导类型选型,找到所选系统的iso文件
其他默认即可,点击开始安装
rufus在开始安装之后,会弹出对话框询问是采用”ISO Image”还是”DD”模式,”DD”模式安装成功率更高,但是制作的启动盘不能被window系统所识别;后面会询问是否需要”格式化磁盘”,这一步会擦除U盘上的所有数据。
2. 安装驱动
如果需要用USB无线网卡则需要下载几个支持的工具: http://ports.ubuntu.com/pool/main/w/wpa/wpasupplicant_2.9-1ubuntu4_arm64.deb http://ports.ubuntu.com/pool/main/libn/libnl3/libnl-route-3-200_3.4.0-1_arm64.deb http://ports.ubuntu.com/pool/main/p/pcsc-lite/libpcsclite1_1.8.26-3_arm64.deb
3. 安装后的配置
对于ubuntu 20.04,初次安装的grub有问题,无法显示启动菜单,需要修改配置让grub以文本模式运行,显示倒计时,编辑Grub的配置文件/etc/default/grub ,去掉下面一行最前面的注释字符“#”:
如果您想使用磁盘上剩余的空间,可以在磁盘上创建一个新的分区,并将其挂载到文件系统中
4. 设置网络
4.1 驱动安装
4.1.1 使用飞腾CPU自带网卡
支持飞腾CPU的内核可以完成飞腾自带网卡的驱动, 这种内核一般是在其它机器上编译完内核后打包成的* .deb格式的安装文件,分成内核和内核头文件两个包 。用优盘将两个安装包拷贝到系统中,然后执行dpkg命令安装:
dpkg -i linux-headers-4.19.6-phy_arm64.deb
dpkg -i linux-image-4.19.6-phy_arm64.deb
然后重启设备,在grub菜单中选择”Advance option…” , -> “ubuntu, with linux 4.19.6-phy”,等待启动,由于这个内核包含的驱动较少,所以启动时会显示很多内容不支持,甚至可能会卡住数十秒不动。
4.1.2 免驱动网卡
先用ip link show功能查看系统内现有的网卡,一般只有一个名为“lo”环回接口。然后插入上述网卡(虽然USB口网卡支持热插拔,为稳妥起见,建议重启设备),然后用上述命令再次查看网络接口,如果有新增的,即说明网口驱动成功。
4.1.3 无线网卡驱动安装
无线网卡由于有一个与无线路由器之间的鉴权机制,所以还需要一个叫作wpa_supplicant的软件包支持。需要从网上下载以下文件并用优盘拷贝到本设备安装。
dpkg -i ./libnl-route-3-200_3.4.0-1_arm64.deb
dpkg -i ./libpcsclite1_1.8.26-3_arm64.deb
dpkg -i ./wpasupplicant_2.9-1ubuntu4_arm64.deb
4.2 网卡设置IP地址
各类型网卡驱动成功后,就需要配置IP地址,可以先临时配置一个IP地址,先ping一下网关看是否通,然后再配置正式的地址。输入ip link show命令查看,如果除了lo环回网卡外,还能看到其它序号从2开始的其它网卡,说明网卡驱动成功了。这里以飞腾CPU自带网卡为例,看到的内容如下,网卡名称为enaphyt4i0和enaphyt4i1。
4.2.1 临时动态IP地址
dhclient enaphyt4i0
dhclient enaphyt4i1
4.2.2 静态IP地址设置
使用netplan固定IP。
5 docker安装
sudo apt-get install ca-certificates curl gnupg lsb-release
安装docker
apt-get install -y docker.io
启动服务:
systemctl start docker
设置开机启动docker
systemctl enable docker
安装arm架构的ubuntu
Getting started with Docker for Arm on Linux
Install Docker Engine on Ubuntu
卸载旧的版本:
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
curl -fsSL test.docker.com -o get-docker.sh && sh get-docker.sh
-o get-docker.sh 指定输出文件名为get-docker.sh
&& sh get-docker.sh 执行get-docker.sh
启动docker
systemctl enable docker
#启动Docker服务:
systemctl start docker
6. 编译内核
安装编译必须的程序和库
apt install build-essential libncurses5-dev bison flex libssl-dev
解压缩内核源码
tar -zxvf linux-4.19.tar.gz
打补丁
cd linux-4.19
patch -p1 < ../patch-phytium-4.19.11
patch-phytium-4.19.11.rar文件的解压缩如下:
sudo apt-get install rar
sudo apt-get install unrar
unrar x patch-phytium-4.19.11.rar
内核的配置选项极多,内核补丁给内核添加了几个适合飞腾CPU的缺省的配置文件,可以使用修改好的config_d2000_linux-4.19-example进行缺省配置:
cp ../config_d2000_linux-4.19-example .config
make oldconfig
如果当前内核的版本与以前配置的内容有差异,会提示用户输入差异的处理方式,是编译或者不编译,所以这种方法适合参考的配置文件与当前内核版本差别小的情况,否则手工输入大量的差异将是很繁琐的事情。
然后运行如下命令:
make menuconfig
make -j8 # lscpu查看cpu核心数
这段代码含义是:编译内核,使用8个线程,编译内核模块,编译完成后安装内核模块,安装内核模块的路径为/lib/modules/4.19.11,安装内核的路径为/boot/vmlinuz-4.19.11,安装内核的配置文件为/boot/config-4.19.11,安装内核的系统映像文件为/boot/System.map-4.19.11,安装内核的头文件为/usr/include/linux-4.19.11。
编译完成之后安装驱动模块:
make modules_install
安装内核:
make install
修改启动项
vim /etc/default/grub
新编译的内核会自动加入grub启动菜单,下次启动时可手工选择新编译的内核,如果没有启动成功,还可以选择缺省的旧内核。如果启动成功,可以修改grub的配置文件/etc/default/grub,找到下面一行 GRUB_DEFAULT=0 把最后的数字0改为欲启动的选项的编号,例如1。修改完后执行update-grub更新启动配置。
7. 问题
netplan问题
** (generate:5165): WARNING **: 06:56:46.538: Problem encountered while validating default route consistency.Please set up multiple routing tables and use `routing-policy` instead.
Error: Conflicting default route declarations for IPv4 (table: main, metric: default), first declared in enaphyt4i1 but also in enaphyt4i0
** (process:5163): WARNING **: 06:56:47.013: Problem encountered while validating default route consistency.Please set up multiple routing tables and use `routing-policy` instead.
Error: Conflicting default route declarations for IPv4 (table: main, metric: default), first declared in enaphyt4i1 but also in enaphyt4i0
配置文件如下:
# This is the network config written by 'subiquity'
network:
version: 2
renderer: networkd
ethernets:
enaphyt4i0:
optional: yes
dhcp4: no
addresses: [192.168.1.101/24]
gateway4: 192.168.1.1
nameservers:
addresses: [114.114.114.114,8.8.8.8]
enaphyt4i1:
optional: yes
dhcp4: no
addresses: [192.168.1.102/24]
gateway4: 192.168.1.1
nameservers:
addresses: [114.114.114.114,8.8.8.8]
解决方法:
们为每个接口指定了唯一的路由表和默认路由。请注意 routes 和 routing-policy 部分。routes 部分指定了默认路由表和默认路由。routing-policy 部分指定了从哪个子网访问路由表。在这个例子中,我们使用了不同的路由表编号(101 和 102),并且为每个接口指定了唯一的路由策略。
# This is the network config written by 'subiquity'
network:
version: 2
renderer: networkd
ethernets:
enaphyt4i0:
optional: yes
dhcp4: no
addresses: [192.168.1.101/24]
routes:
- to: 0.0.0.0/0
via: 192.168.1.0
table: 101
routing-policy:
- from: 192.168.1.0/24
table: 101
nameservers:
addresses: [114.114.114.114,8.8.8.8]
enaphyt4i1:
optional: yes
dhcp4: no
addresses: [192.168.1.102/24]
routes:
- to: 0.0.0.0/0
via: 192.168.1.0
table: 102
routing-policy:
- from: 192.168.1.0/24
table: 102
nameservers:
addresses: [114.114.114.114,8.8.8.8]
但是这样配置之后,没办法访问外网,ping不通外网。
无法启动
其中一台机器安装了4.19的内核之后启动不了:
其中一台启动之后出现企鹅排队的画面,等待一段时间可以进入系统(显示屏变成白色,等待一段时间之后可以看到登录界面)。
但是,另外一台机器启动之后现企鹅排队的画面,等待一段时间之后显示屏变成白色,但是无法进入系统。(手册显示可能会卡住数十秒不动;但是我的这台机器可能卡住很久都不动)。在grub菜单中选择”Advance option…” , -> “ubuntu, with linux 4.19.6-phy”,还是”ubuntu, with linux 4.19.0”,都无法进入系统。
是installing virtual address map出错吗?
ssh连接不上
假设工控机两个网口地址为192.168.1.100和192.168.1.103,使用远程机器ssh连接有时候连接不上(ssh test01@192.168.1.103),但是ping 192.168.1.103可以ping通。
显示信息如下:
kex_exchange_identification: read: Connection reset by peer
Connection reset by 192.168.1.103 port 22
可能原因:服务器禁止了我这个IP进行连接,所以把这个IP删除就可以。 解决办法如下:
vi /etc/hosts.deny
如果这个文件中存在你的电脑IP的话,把那个IP从这个文件中删除就可以,然后安ESC退出,:q进行保存即可。 hosts.deny文件中没有内容。
解决方法二:
ssh-keygen -R XXX.XXX.XXX.XXX // XXX.XXX.XXX.XXX 为要登陆主机的IP地址
还是不行,显示
cannot start /root/.ssh/known_hosts: No such file or directory
解决方法三:
https://www.cnblogs.com/lfri/p/15257145.html
vim /etc/hosts.allow # 添加ssh:ALL
重启ssh服务
service sshd restart
可能原因二:
https://help.aliyun.com/document_detail/41485.html
可能原因三: 端口没有对外开放
sudo ufw allow 22
或者
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
可能解决方法:
ssh -vvv test01@192.168.1.103
这将在终端中显示 SSH 连接的详细日志信息,包括连接过程中发送和接收的所有消息。根据日志信息,你可以更好地了解连接失败的原因,并采取相应的措施来解决问题。
使用 telnet 命令测试目标主机的 SSH 端口是否可用:
telnet 192.168.1.103 22
如果你使用了 SSH 密钥对进行身份验证,请确保你的公钥已经添加到目标主机的授权文件中。
ssh-copy-id -i ~/.ssh/id_rsa.pub test01@192.168.1.103
两个网口只能ssh其中一个
编译好内核之后apt install任何包裹都报错
libnl-route-3-200 : Depends: libnl-3-200 (= 3.4.0-1) but 3.4.0-1ubuntu0.1 is to be installed
固定了IP地址之后,无法访问外网,但是可以访问内网。
例如,安装docker失败:(包括apt upgrade) libnl-route-3-200?
解决方法: 先安装docker再配置内核?
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
docker.io : Depends: containerd (>= 1.2.6-0ubuntu1~) but it is not going to be installed
Recommends: pigz but it is not going to be installed
Recommends: ubuntu-fan but it is not going to be installed
libnl-route-3-200 : Depends: libnl-3-200 (= 3.4.0-1) but 3.4.0-1ubuntu0.1 is to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
例如,wpasupplicant安装失败,报错提示如下:
libnl-route-3-200: arm64is not configured yet
解决方法:
下载libnl-route-3-200_3.4.0-1ubuntu0.1_arm64.deb
还有这个:
libnl-3-200_3.4.0-1ubuntu0.1_arm64.deb
然后安装:
dpkg -i libnl-route-3-200_3.4.0-1ubuntu0.1_arm64.deb
网口不能自动启动
每次都需要dhclient来启动网口。
卸载docker
apt remove docker.io
网络配置好之后过一段时间无法ping通外网
dhclient -r
dhclient