Skip to content

Commit

Permalink
slackwareloong: chapter_03
Browse files Browse the repository at this point in the history
  • Loading branch information
Shi Pujin committed Jun 8, 2023
1 parent 6fb7b93 commit c1c214f
Show file tree
Hide file tree
Showing 10 changed files with 166 additions and 129 deletions.
4 changes: 3 additions & 1 deletion SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
- [Configure](chapter_02/The_setup_Program/Configure.md)
- [引导](chapter_03/README.md)
- [mkinitrd](chapter_03/mkinitrd.md)
- [LILO](chapter_03/LILO.md)
- [引导器](chapter_03/Boot_loader/README.md)
- [LILO](chapter_03/Boot_loader/LILO.md)
- [GRUB2](chapter_03/Boot_loader/GRUB2.md)
- [多重引导](chapter_03/Dual_Booting/README.md)
- [引导多个分区](chapter_03/Dual_Booting/Dual_Booting_with_Partitions.md)
- [引导多个硬盘](chapter_03/Dual_Booting/Dual_Booting_from_Hard_Drives.md)
Expand Down
96 changes: 96 additions & 0 deletions chapter_03/Boot_loader/GRUB2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
### GRUB2

GRUB2 是一种 Linux 引导器,并且目前是 LoongArch Slackware 的默认引导器。

UEFI (Unified Extensible Firmware Interface) 固件只支持 GPT (GUID Partition Table) 分区,所以在安装系统分区时需要把磁盘分区格式设置为 GPT 格式。

#### GRUB2 的grub.cfg

grub.cfg 的功能简单来讲可以分为两部分:启动界面的设置、启动项的配置。下面介绍下通过修改哪些配置文件,来进行定制 grub.cfg:

* 启动界面的设置:`/etc/default/grub` 是 grub 全局配置文件,文件中定义了 grub 的全局宏,主要包含了启动界面的设置,比如默认启动项的设置、等待用户选择启动项时间设置、加载的字体等。
* 启动项的配置:`/etc/grub.d/` 目录下是 grub 的配置脚本,在定制系统启动时可以修改全局配置文件和配置脚本。

可以使用 grub-mkconfig 生成 grub2 配置文件 grub.cfg,执行:

```
grub-mkconfig -o /boot/grub/grub.cfg
```

新生成的grub.cfg里启动项大致如下:

```
.... many more lines ommitted ....
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Slackware-15.0+ GNU/Linux' --class slackware_15_0_ --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-555b5454-296c-499b-ac88-219d17c7e5b9' {
load_video
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 c15c4ceb-7c1b-4ad5-a646-217e0b575d95
else
search --no-floppy --fs-uuid --set=root c15c4ceb-7c1b-4ad5-a646-217e0b575d95
fi
echo 'Loading Linux 6.3.0 ...'
linux /vmlinuz-generic-6.3.0 root=UUID=555b5454-296c-499b-ac88-219d17c7e5b9 ro
echo 'Loading initial ramdisk ...'
initrd /initrd-6.3.0.img
}
.... many more lines ommitted ....
```

在 Slackware 里的启动条目例子里,menuentry 是显示的启动条目,下面是 GRUB2 加载的 grub 模块,linux 后面跟要启动的内核是 `vmlinuz-generic-6.3.0` ,根的 UUID是 `555b5454-296c-499b-ac88-219d17c7e5b9`, initrd 后面跟加载的 initrd 是 `initrd-6.3.0.img` ,因为加载了 initrd,所以系统可以解析 UUID ,若你的系统没有 initd,那就不能使用UUID,需要指定设备号。

#### GRUB2 的 EFI 程序

EFI 程序存放环境设置
* 在 GPT 分区下,创建 EFI 系统分区(ESP分区,又叫 esp 分区),文件系统格式为 VFAT 分区。

生成更新 EFI 程序

```
cat >> grub.cfg << EOL
set root=',gpt2'
set prefix=($root)'/grub'
configfile $prefix/grub.cfg
EOL
GRUB_MODS="acpi adler32 affs afs all_video archelp bfs bitmap bitmap_scale \
blocklist boot bswap_test btrfs bufio cat cbfs chain cmdline_cat_test cmp \
cmp_test configfile cpio_be cpio crc64 cryptodisk crypto ctz_test datehook \
date datetime diskfilter disk div div_test dm_nv echo efifwsetup efi_gop \
efinet elf eval exfat exfctest ext2 extcmd fat file font fshelp \
functional_test gcry_arcfour gcry_blowfish gcry_camellia gcry_cast5 \
gcry_crc gcry_des gcry_dsa gcry_idea gcry_md4 gcry_md5 gcry_rfc2268 \
gcry_rijndael gcry_rmd160 gcry_rsa gcry_seed gcry_serpent gcry_sha1 \
gcry_sha256 gcry_sha512 gcry_tiger gcry_twofish gcry_whirlpool geli \
gettext gfxmenu gfxterm_background gfxterm_menu gfxterm gptsync gzio halt \
hashsum hello help hexdump hfs hfspluscomp hfsplus http iso9660 jfs jpeg \
keystatus ldm linux loadenv loopback lsacpi lsefimmap lsefi lsefisystab \
lsmmap ls lssal luks lvm lzopio macbless macho mdraid09_be mdraid09 \
mdraid1x memdisk memrw minicmd minix2_be minix2 minix3_be minix3 minix_be \
minix mmap mpi msdospart mul_test net newc nilfs2 normal ntfscomp ntfs odc \
offsetio part_acorn part_amiga part_apple part_bsd part_dfly part_dvh \
part_gpt part_msdos part_plan part_sun part_sunpc parttool password \
password_pbkdf2 pbkdf2 pbkdf2_test png priority_queue probe procfs \
progress raid5rec raid6rec read reboot regexp reiserfs romfs scsi \
search_fs_file search_fs_uuid search_label search serial setjmp \
setjmp_test sfs shift_test signature_test sleep sleep_test squash4 \
syslinuxcfg tar terminal terminfo test_blockarg testload test testspeed \
tftp tga time trig tr true udf ufs1_be ufs1 ufs2 video_colors video_fb \
videoinfo video videotest_checksum videotest xfs xnu_uuid xnu_uuid_test \
xzio zfscrypt zfsinfo zfs"
grub-mkimage -p /boot/efi/EFI/BOOT/ --format=loongarch64-efi \
-c `pwd`/grub.cfg --output=/boot/efi/EFI/BOOT/BOOTLOONGARCH64.EFI \
$GRUB_MODS
# 有少量机型的固件可能会识别BOOTLOONGARCH.EFI,基于实际情况制作
# 参数含义
-p 设置偏好文件夹,cfg文件中会调
--format或-d 表示指定查找模块目录
-c 表示指定配置文件,这个配置文件会集成到efi文件内,就是我们刚刚编写的grub.cfg
--output或-o 表示生成的目标文件
```
9 changes: 9 additions & 0 deletions chapter_03/Boot_loader/LILO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
### LILO

> 因为 LoongArch 平台不支持 LILO ,只支持 GRUB2,为了避免用户阅读误解,减少用户安装问题,这里只简单介绍下 LILO 工具,不再展开讲 LILO 的使用。
LILO 是一种 Linux 引导器,并且目前是 Slackware (X86平台)的默认引导器。如果你之前用过其他 Linux 发行版,你应该听说过 GRUB。如果你更喜欢 GRUB 的话。前往 Slackware CD 的 `/extra` 就能找到它。由于 LILO 是 Slackware 的默认引导器,在此我们还是得重点研讨它。

> 若对 LILO 内容感兴趣的可以去阅读[slackbook BOOTING-LILO 章节](http://slackbook.org/html/booting.html#BOOTING-LILO)
> 译者注:当前版本的 Slackware 提供的确切来说是 GRUB2,同时由于 LILO 已经停止开发,通常认为 GRUB2 是一个更棒的选择。
3 changes: 3 additions & 0 deletions chapter_03/Boot_loader/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
### 引导器

引导程序是一个非常灵活的东西,因为它的存在只是为了确定要启动分区中的哪一个硬盘,分区,甚至内核。我们很自然就能推出,安装了多系统的用户一定是一个 GRUB 或 LILO 用户。
2 changes: 1 addition & 1 deletion chapter_03/Dual_Booting/Dual_Booting_from_Hard_Drives.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

不同的硬盘驱动器之间的多引导往往比多分区的引导简单,因为计算机的 BIOS 或 EFI 几乎无一例外地都有一个引导设备选择器,使您可以在 POST 后立即中断引导过程并选择优先引导的设备。

最大的困难是不同品牌的主板,进入启动选则器的方式不同。参考主板说明书或者机器启动画面来找出你的电脑需要的操作。典型的按键是 `F1``F12``DEL` 。对于苹果电脑,它始终是 `Option``Alt`)键
最大的困难是不同品牌的主板,进入启动选则器的方式不同。参考主板说明书或者机器启动画面来找出你的电脑需要的操作。LoongArch 平台机器典型的按键是 `F2``DEL`

如果您通过 BIOS 或 EFI 管理引导优先级,那么每个硬盘驱动器上的引导加载程序只会考虑自己所在设备而不考虑其他。这与引导装载程序的设计目的相反,但如果电脑上的闭源系统不顾用户喜好,坚持要成为唯一操作系统的话,这是个很有效的解决方案。

Expand Down
39 changes: 15 additions & 24 deletions chapter_03/Dual_Booting/Dual_Booting_with_Partitions.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,40 +4,31 @@

> ##### 注意
>
> 如果你搭建的是两个 Linux 的双系统,我们不推荐两个系统共用 `/home`。虽然这在技术上可行,但因为不同的桌面环境和软件版本,会增加你的个人配置文件损坏几率。
> 如果你搭建的是两个 Linux 的双系统,我们不推荐两个系统共用/home。虽然这在技术上可行,但因为不同的桌面环境和软件版本,会增加你的个人配置文件损坏几率。
>
> 但共用交换分区是安全的。
你应该至少给硬盘划分三个分区
你应该至少给硬盘分五个区

- 一个为 Slackware 准备的分区。
- 一个为其他系统准备的分区。
- 一个交换分区。
- ESP 分区
- /boot 分区 (以防文件系统损坏,可以用/boot 下的initrd来救活系统)
- 交换分区
- Slackware 一个分区
- 第二系统一个分区

首先,按照“[第二章、安装](../../chapter_02/README.md)”所述,把 Slackware 安装到第一个分区。

安装好,启动好,一切正常之后,重启进入第二系统。第二系统总会想要占用整个驱动器,你显然**不希望**这样做,所以它限制为仅第二个分区。此外,该操作系统将尝试把引导器安装到硬盘驱动器的开头,覆盖 LILO。
首先,按照“[第二章、安装](../../chapter_02/README.md)”所述,把 Slackware 安装到第四个分区。

安装好,启动好,一切正常之后,重启,把第二系统装到第五分区。

有关引导器,可采取如下做法:

##### 可能的启动引导器方案

###### 一、如果第二系统是 Linux,禁止它安装启动管理器

如果双启动进入另一 Linux 发行版,该发行版的安装程序通常会询问是否安装启动引导程序。你当然可以不安装引导程序,手动管理 LILO 来启动 Slackware 和另一发行版。

取决于另一发行版,比起只安装 Slackware 时你可能会更频繁地修改 LILO 配置。有些发行版因为频繁更新内核而臭名远扬,这就意味着每次更新你都要修改 LILO 配置。但如果你不想时时修改配置文件,你就不会选择 Slackware 了。

###### 二、如果第二系统是 Linux,让它用 GRUB 来替换 LILO

如果双启动进入另一 Linux 发行版,你完全可以用 GRUB 来替换 LILO,或最后安装 Slackware 并都使用 LILO。LILO 和 GRUB 都有自动检测的特性,所以不管最后安装的是谁都要探测其他发行版的存在并为它创建一个启动条目。

由于其他的发行版往往会自动更新他们的 GRUB 菜单,总有可能出点差错然后就无法启动 Slackware 了。发生这种情况,不要惊慌,进入其它 Linux 的分区,手动修改 GRUB 菜单的 Slackware 条目使之指向正确的分区,内核和 initrd(如果适用的话)。

##### 三、让第二系统替换掉 LILO 并在之后重新安装并配置 LILO

这个选择也是可行的,尤其是第二系统是 Windows 的时候。经常 Windows 更新之后会重写 MBR, 这时候就要手动重新安装 LILO 了。
##### 如果第二系统是 Linux,让它用 GRUB 来配置系统启动项

要在其他系统抹除 LILO 之后修复,启动 Slackware 安装介质进入配置阶段。**不要**重新分区或重新安装 Slackware,直接跳到“[配置](../../chapter_02/The_setup_Program/Configure.md)”部分。
<div style="margin-left: 0.5in; margin-right: 0.5in;">
<p>如果双系统进入另一Linux发行版,你完全可以用GRUB来配置创建系统启动项。</p>
<p>由于其他的发行版往往会自动更新他们的GRUB菜单,总有可能出点差错然后就无法启动Slackware了。发生这种情况,不要惊慌,进入其它Linux的分区,手动修改GRUB菜单的Slackware条目使之指向正确的分区,内核和initrd(如果适用的话)。</p>
</div>

使用简单模式 LILO 的时候,它也会自动探测并创建启动菜单。如果失败了,那么就需要手动创建条目了。
2 changes: 1 addition & 1 deletion chapter_03/Dual_Booting/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
### 多重引导

引导程序(比如 LILO)是一个非常灵活的东西,因为它的存在只是为了确定要启动分区中的哪一个硬盘,分区,甚至内核。我们很自然就能推出,安装了多系统的用户一定是一个 LILOGRUB 用户。
引导程序(比如 GRUB)是一个非常灵活的东西,因为它的存在只是为了确定要启动分区中的哪一个硬盘,分区,甚至内核。我们很自然就能推出,安装了多系统的用户一定是一个 GRUBLILO 用户。

出于各种原因,人们需要“多启动”:一些人希望在在某个分区或驱动器有一个稳定的 Slackware 系统,并在另一位置有个开发用沙盒,其他人可能想同时体验 Slackware 和其他 Linux 或 BSD 发行版,还有一些人一个分区装 Slackware,另一分区装闭源系统(为了工作或某些 Linux 没有的程序)。

Expand Down
72 changes: 0 additions & 72 deletions chapter_03/LILO.md

This file was deleted.

4 changes: 3 additions & 1 deletion chapter_03/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
### 本章目录

- [mkinitrd](mkinitrd.md)
- [LILO](LILO.md)
- [引导器](chapter_03/Boot_loader/README.md)
- [LILO](chapter_03/Boot_loader/LILO.md)
- [GRUB2](chapter_03/Boot_loader/GRUB2.md)
- [多重引导](Dual_Booting/README.md)
- [引导多个分区](Dual_Booting/Dual_Booting_with_Partitions.md)
- [引导多个硬盘](Dual_Booting/Dual_Booting_from_Hard_Drives.md)
Expand Down
Loading

0 comments on commit c1c214f

Please sign in to comment.