安装linux系统的方法

1,855 阅读9分钟

本次所有的安装包已经放到了百度网盘:链接:pan.baidu.com/s/1btlHio5p…
提取码:1234

背景

公司有一台闲置的电脑主机,所以想要将其windows系统重装为纯linux系统试一试。

本来想使用老毛桃之类的U盘安装系统工具,使用PE桌面安装,这需要我们将U盘格式化。经过测试,只有格式化FAT格式的时候,PE桌面模拟安装选项才能成功;而FAT格式又要求文件传送不能超过4G,所以我找了个不到4G的CentOS mini镜像。

终于一切准备就绪,模拟安装显示也能够成功,开启了正式安装,但是mini镜像又显示识别不了。

这通折腾基本全部宣告失败,网上的文档也查了不少,但是也都没能解决我的问题,最后使用将U盘做启动盘,即不存在PE桌面工具的情况,达到直接使用U盘系统就能进入linux安装界面的目的。

步骤

1、制作U盘系统安装盘

随便在网上找个U盘系统制作工具,本次找了一个镜像文件写入U盘工具,这个过程没有什么难度;附上一张我的工具的截图:这个工具已经放到文章开头的百度网盘分享链接里。

image.png

当我们写入成功的时候我们将U盘插在电脑上,进入电脑的BIOS模式,选择U盘系统启动,然后我们就会进入熟悉的linux安装界面,就像测试时VMware起虚拟机一样的安装界面。选择第一个安装选项,回车,但是安装过程到后面会卡住失败。

我猜测的原因是我们选择了BIOS模式启动U盘系统,这个时候可能还是windows系统在做主导角色,随着linux系统开始慢慢安装成功,linux系统将变为主导角色。但是linux系统明显是无法直接识别U盘的,就会导致安装中断。这个想法大概不准确,但是姑且这么理解这个逻辑吧。

2、确定U盘标签

上面的步骤虽然会失败,但是我们不要手动中断耐心等待,直到提示说安装失败,并且会引导我们进入linux的抢救模式(emergency),这个时候我们就可以查看一下 /dev 下面的文件,查看我们的U盘1的标签是什么。

查看方法:/dev 下面会有我们主机的所有磁盘,命名规则就是 sd+一个字母+数字 ,即sd后面是从a到z的一个字母,再往后是一个数字。我们的U盘肯定就是sd+最靠后的字母+1。

例如 /dev 下面有 sda sda1 sda2 sda3 sdb sdb1 sdc sdc1,那我们的U盘标签就是sdc1。

3、指定U盘启动盘

当我们知道U盘标签是哪个之后,我们就可以执行reboot重启命令了,再次来到安装界面:

  1. 按键盘 e键
  2. 在第二行这最长行的末尾将 =: 之后,最后一个单词(quiet还是什么的)之前的内容全部替换为 /dev/sdn1 (sdn1就是U盘的标签)。也就是说将 “=: label: ... ... quiet” 中黑色加粗的内容替换掉。
  3. 按 ctrl+x

4、执行安装

执行完3之后,我们再次来到安装界面,并且可以顺利的安装下去,但是到下面这个界面,可以注意到下面所指的网卡设备是空的(截图上有ens33,是我后面截的图用来在次说明),但是我们仍然执行安装完毕。

image.png

image.png

5、确认无网卡驱动

这时候我们安装完成之后,顺利进入了命令行,看着一切正常,但是电脑主机插着网线也上不了网,使用 ip address show、nmtui、ifconfig、nmcli connection之类的命令,包括复制网络配置文件都没用,看不到ens33或者eth0,只能看到lo回环网卡,这就需要我们安装我们的网卡对应的linux驱动了。

但是安装网卡驱动之前需要知道我们的网卡的型号,如果知道,可以直接开始执行第8步百度下载对应的驱动,如果不知道,就需要使用pciutils工具来查询。而安装 pciutils 需要用到 gcc 和 make 工具,make 一般系统自带,gcc 需要安装,下面开始安装 gcc。

6、安装gcc及依赖

安装网卡之前首先我们要安装gcc,gcc在有网络的情况下安装十分简单,但是像现在这样没有网络的时候就需要我们使用U盘将安装包拷贝到该服务器上,然后进行安装。 gcc安装包已经放到文章开头的百度网盘分享链接里。

将这些安装包用U盘拷贝到服务器上,拷贝方法: 首先我们使用windows服务器将七个包拷贝到一个U盘里面,这个时候如果将这个U盘插到linux服务器上,我们也是不能用的;我们要像第三步一样,先打开 /dev 目录,然后插上U盘确认新增的sdnX,得知U盘是哪个之后,使用mount命令将其挂载到某个目录,这时候我们就可以把这些文件拷贝出来使用了。
当我们需要拔下来的时候最好先umount,然后再拔,并且拔掉之后删除U盘的/dev/sdxn方便我们下次使用,否则下次可能会出现挂载失败的情况。这里注意我们最好把U盘格式化FAT格式,这样linux更加支持。

将这些安装包复制放到一个目录下,然后在该目录执行下面的命令:

rpm -ivh *.rpm --nodeps --force   # 使用该命令可以直接安装gcc
gcc -v   # 输出gcc版本就说明安装正确

或者可以按照下面的顺序逐个进行安装,安装完成之后使用 gcc -v 验证:

  1. rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm
  2. rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm
  3. rpm -ivh kernel-headers-3.10.0-862.el7.x86_64.rpm
  4. rpm -ivh glibc-headers-2.17-222.el7.x86_64.rpm
  5. rpm -ivh glibc-devel-2.17-222.el7.x86_64.rpm
  6. rpm -ivh cpp-4.8.5-28.el7.x86_64.rpm
  7. rpm -ivh gcc-4.8.5-28.el7.x86_64.rpm

7、安装pciutils确认网卡类型

pciutils是一个查看系统中所有PCI总线以及连接到该总线上的设备的工具,这是该工具的github的地址:github.com/pciutils/pc…

该tar包也已经放到文章开头的百度网盘分享链接里。 下载tar包,将其解压,就可以使用 lscpi 命令。

[root@localhost ~]# tar -xf pciutils-3.7.0.tar.gz
[root@localhost ~]# lspci | grep -i ethernet
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 04)

可以看到这里我的服务器的网卡是 RTL8125 2.5Gigabit Ethernet。

8、根据自己的网卡类型下载对应的linux网卡驱动

我们获取到自己的网卡的型号之后我们就可以在网上搜索对应的linux网卡驱动了,本次我的驱动的地址:www.realtek.com/en/componen…,下载其中的:

image.png 本次已经将我的网卡驱动放到开头的百度网盘链接里面,r8125-9.006.04.tar.bz2

9、下载网卡驱动并将其拷贝到linux机器

然后我们就可以使用U盘拷贝的方法将其拷贝到linux机器上,接下来就要安装该驱动。但是这里这个网卡驱动是bzip2格式,需要我们安装同名安装包,安装bzip2安装包之后再安装网卡驱动。bzip2的安装包也已经放到文章开头的百度网盘分享链接里。

10、解压网卡驱动文件并进行安装(第一次报错)

在我们用U盘将网卡驱动文件拷贝到linux机器上之后,我们先解压,解压之后进入目录,可以看到有一个脚本autorun.sh,执行这个脚本就可以执行安装。
但是我们现在执行一般是成功不了的,这次我出现了报错,说: /lib/modules/3.10.xxxxxxxxxx/build 找不到,其实我们这个文件是有的,报这个错是因为这个文件是个软连接,但是连接源不存在,我们查看他的源地址,/usr/src/kernels/3.10.0-1160.el7.x86_64,这个时候我们如果打开这个源发现不存在,这就是问题所在。

image.png

11、寻找自己内核版本安装包,并安装内核包的依赖包perl

在安装kernel之前,我们是需要先安装依赖的,kernel的依赖是要安装perl的,我们要先下载安装包,然后源码编译安装。perl安装包已经放到文章开头的百度网盘分享链接里。

tar zxvf perl-5.12.2.tar.gz
mkdir /usr/local/perl   #创建安装目录
./Configure -des -Dprefix=/usr/local/perl -Dusethreads -Uversiononly
make
make install
cd /usr/bin
mv perl perl.old   #把旧的版本的perl更名为perl.old
ln -s /usr/local/perl/bin/perl /usr/bin/perl  #做一个软连接
perl -version  #查看版本,确认安装成功

12、安装自己版本的内核包

下载地址:centos.pkgs.org/7/centos-x8…

本次我查看自己的内核之后下载的 kernel-devel-3.10.0-1160.el7.x86_64.rpm ,该包也在文章开头的百度网盘分享链接里,但是未必和你适用,所以要确认自己对应的版本,将其下载下来,同样用U盘将其拷贝到根目录下,然后执行:

rpm2cpio kernel-devel-3.10.0-1160.el7.x86_64.rpm | cpio -div
# 这时候就会产生/usr/src/kernels/3.10.0-1160.el7.x86_64这个目录,上面找不到的软连接也就找到了
ln -sv /usr/src/kernels/3.10.0-1160.el7.x86_64/ /lib/modules/3.10.0-1160.el7.x86_64/build
# 新建软连接,其实这步不新建也可以,做个拓展

13、再次执行安装网卡驱动脚本(脚本文件需要修改,第二次报错)

我们再次执行网卡驱动安装 ./autorun.sh,这个时候还会报错:

image.png 对于三个error,首先我们可以看到前面有指出文件和对应的行数:

第一个error,错误提示:/src/r8125.h:69:20 error: redefinition of 'ether_addr_copy' static inline void ether_addr_copy。我们就需要在网卡解压后的目录下的src/r8125.h的69行,将:

#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)
//改为
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)

第二个error,错误提示:r8125_n.c:11777:9 error :unknown field 'ndo_change_mtu' specified in initializer。

vi /usr/src/kernels/3.10.0-1160.el7.x86_64/include/linux/netdevice.h
# 在全篇查询ndo_change_mtu,我这里查到的是ndo_change_mtu_rh74,然后我们编辑/src/r8125_n.c:
vi r8125_n.c
# 在11777行,将键值对的键后面补充上rh74,这是官方承认的bug

第三个errorr,错误提示8125_n.c:14588:28 error 'struct net_device' has no member named 'last_rx'

同样的我们打开src/8125_n.c,在14588行,这个是内核的版本问题,我们用"//"直接注释掉就可以了。

14、再次执行安装网卡驱动脚本

这次我们执行成功了,ifconfig就可以看到有了网卡,怎么添加ip这里就不再赘述。

最后

本次重装踩的坑不少,但是总的来说做成了,但是也要谨慎。
因为其中像找linux版本的网卡驱动这样的事,最好提前找找看看,防止到时候找不到半途而废。
而且系统出问题重装也比较麻烦,不像windows那么简单,所以我认为还是用windows系统装虚拟机,或者有什么双系统的方法更稳妥一些。

本文有什么错误需要改正或者改进的地方欢迎指出。