如何打造自己的 Linux 发行版

如何打造自己的 Linux 发行版,第1张

LFS 中文版手册发布:如何打造自己的 Linux 发行版

您是否想过打造您自己的 Linux 发行版?每个 Linux 用户在他们使用 Linux 的过程中都想过做一个他们自己的发行版,至少一次。我也不例外,作为一个 Linux 菜鸟,我也考虑过开发一个自己的 Linux 发行版。从头开发一个 Linux 发行版这件事情被称作 Linux From Scratch (LFS)。

在开始之前,我总结了一些有关 LFS 的内容,如下:

1. 那些想要打造他们自己的 Linux 发行版的人应该了解打造一个 Linux 发行版(打造意味着从头开始)与配置一个已有的 Linux 发行版的不同

如果您只是想调整下启动屏幕、定制登录页面以及拥有更好的外观和使用体验。您可以选择任何一个 Linux 发行版并且按照您的喜好进行个性化配置。此外,有许多配置工具可以帮助您。

如果您想打包所有必须的文件、引导加载器和内核,并选择什么该被包括进来,然后依靠自己编译这一切东西。那么您需要的就是 Linux From Scratch (LFS)。

注意:如果您只想要定制 Linux 系统的外表和体验,这个指南并不适合您。但如果您真的想打造一个 Linux 发行版,并且向了解怎么开始以及一些其他的信息,那么这个指南正是为您而写。

2. 打造一个 Linux 发行版(LFS)的好处

您将了解 Linux 系统的内部工作机制

您将开发一个灵活的适应您需求的系统

您开发的系统(LFS)将会非常紧凑,因为您对该包含/不该包含什么拥有绝对的掌控

您开发的系统(LFS)在安全性上会更好

3. 打造一个Linux发行版(LFS)的坏处

打造一个 Linux 系统意味着将所有需要的东西放在一起并且编译之。这需要许多查阅、耐心和时间。而且您需要一个可用的 Linux 系统和足够的磁盘空间来打造 LFS。

4. 有趣的是,Gentoo/GNU Linux 在某种意义上最接近于 LFS。Gentoo 和 LFS 都是完全从源码编译的定制的 Linux 系统

5. 您应该是一个有经验的Linux用户,对编译包、解决依赖有相当的了解,并且是个 shell 脚本的专家。

了解一门编程语言(最好是 C 语言)将会使事情变得容易些。但哪怕您是一个新手,只要您是一个优秀的学习者,可以很快的掌握知识,您也可以开始。最重要的是不要在 LFS 过程中丢失您的热情。

如果您不够坚定,恐怕会在 LFS 进行到一半时放弃。

**6. 现在您需要一步一步的指导来打造一个 Linux 。LFS 手册是打造 LFS 的官方指南。我们的合作站点 tradepub 也为我们的读者制作了 LFS 的指南,这同样是免费的。 ###

您可以从下面的链接下载 Linux From Scratch 的电子书:

下载: Linux From Scratch

7. 当前 LFS 的版本是 7.7,分为 systemd 版本和非 systemd 版本。

LFS 的官方网站是: http://www.linuxfromscratch.org/

您可以在官网在线浏览 LFS 以及类似 BLFS 这样的相关项目的手册,也可以下载不同格式的版本。

LFS (非 systemd 版本):

PDF 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.pdf

单一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7-NOCHUNKS.html

打包的多页 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.tar.bz2

LFS (systemd 版本):

PDF 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.pdf

单一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd-NOCHUNKS.html

打包的多页 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.tar.bz2

8. Linux 中国/LCTT 翻译了一份 LFS 手册(7.7,systemd 版本)

经过 LCTT 成员的努力,我们终于完成了对 LFS 7.7 systemd 版本手册的翻译。

手册在线访问地址:https://linux.cn/lfs/LFS-BOOK-7.7-systemd/index.html 。

其它格式的版本稍后推出。

感谢参与翻译的成员: wxy, ictlyh, dongfengweixiao, zpl1025, H-mudcup, Yuking-net, kevinSJ 。

关于:Linux From Scratch

这本手册是由 LFS 的项目领头人 Gerard Beekmans 创作的, Matthew Burgess 和 Bruse Dubbs 参与编辑,两人都是LFS 项目的联合领导人。这本书内容很广泛,有 338 页之多。

手册中内容包括:介绍 LFS、准备构建、构建 LFS、建立启动脚本、使 LFS 可以引导,以及附录。其中涵盖了您想知道的 LFS 项目中的所有东西。

这本手册还给出了编译一个包的预估时间。预估的时间以编译第一个包的时间作为参考。所有的东西都以易于理解的方式呈现,甚至对于新手来说也是这样。

如果您有充裕的时间并且真正对构建自己的 Linux 发行版感兴趣,那么您绝对不会错过下载这个电子书(免费下载)的机会。您需要做的,便是照着这本手册在一个工作的 Linux 系统(任何 Linux 发行版,足够的磁盘空间即可)中开始构建您自己的 Linux 系统,付出时间和热情。

如果 Linux 使您着迷,如果您想自己动手构建一个自己的 Linux 发行版,这便是现阶段您应该知道的全部了,其他的信息您可以参考上面链接的手册中的内容。

请让我了解您阅读/使用这本手册的经历,这本详尽的 LFS 指南的使用是否足够简单?如果您已经构建了一个 LFS 并且想给我们的读者一些建议,欢迎留言和反馈。

BLFS阶段,startx后firefox等程序中文全部乱码问题的解决 http://www.linuxidc.com/Linux/2007-05/3789.htm

用LFS从零开始构建完整Linux系统 http://www.linuxidc.com/Linux/2011-08/40706.htm

基于Ubuntu 10.10 构建LFS 6.7[图文] http://www.linuxidc.com/Linux/2011-02/32545.htm

via: http://www.tecmint.com/create-custom-linux-distribution-from-scratch/

作者:Avishek Kumar 译者:wwy-hust 校对:wxy

本文由 LCTT 原创翻译

先建脚本:clearspace.sh

给脚本添加执行权限 chmod +x clearspace.sh   

编辑脚本内容:

     

       touch tmpFile   # 建临时文件

      sed 's/\ //g' $1 >temFile  #sed s命令 将空格替换 重定向到临时文件

      cat temFile >$1  #覆盖原文件

      rm -f temFile   #删除临时文件

      echo 'OK,DONE!'

     

执行脚本 ./clearspace.sh souceFile

实例:

执行前:

查看原文件:cat source.txt

sfd as as da la as las j8

890asfd f22

2 23rf a 23rfa

asdf9293 22 sdf

234 23r4 sdk

, . '  ds

sadf wow

sa s  sd

执行

./clearspace.sh source.txt

OK,DONE!

执行之后查看结果:cat source.txt

sfdasasdalaaslasj8

890asfdf22

223rfa23rfa

asdf929322sdf

23423r4sdk

,.'ds

sadfwow

sassd

登录流程

密钥登录比密码登录安全,主要是因为他使用了非对称加密,登录过程中需要用到 密钥对 。整个登录流程如下:

远程服务器持有公钥,当有用户进行登录,服务器就会随机生成一串字符串,然后发送给正在进行登录的用户。

用户收到远程服务器发来的字符串,使用与 远程服务器公钥配对的私钥 对字符串进行加密,再发送给远程服务器。

服务器使用公钥对用户发来的加密字符串进行解密,得到的解密字符串如果与第一步中发送给客户端的随机字符串一样,那么判断为登录成功。

整个登录的流程就是这么简单,但是在实际使用 ssh 登录中还会碰到一些小细节,这里演示一遍 ssh 远程登录来展示下这些细节问题。

生成密钥对

使用ssh-keygen就可以直接生成登录需要的密钥对。ssh-keygen是 Linux 下的命令,不添加任何参数就可以生成密钥对。

➜  ~ ssh-keygenGenerating public/private rsa key pair.Enter fileinwhichto save the key (/home/jaychen/.ssh/id_rsa):#1Enter passphrase (emptyforno passphrase):#2Enter same passphrase again:#3

执行ssh-keygen会出现如上的提示,在#1处这里提示用户输入生成的私钥的名称,如果不填,默认私钥保存在/home/jaychen/.ssh/id_rsa文件中。这里要注意两点:

生成的密钥,会放在 执行ssh-keygen命令的用户的家目录 下的.ssh文件夹中。即$HOME/.ssh/目录下。

生成的公钥的文件名,通常是私钥的文件名后面加.pub的后缀。

#2处,提示输入密码,注意这里的密码是用来保证私钥的安全的。如果填写了密码,那么在使用密钥进行登录的时候,会让你输入密码,这样子保证了如果私钥丢失了不至于被恶意使用。 话是这么说,但是平时使用这里我都是直接略过。

#3是重复#2输入的密码,这里就不废话了。

生成密钥之后,就可以在/home/jaychen/.ssh/下看到两个文件了(我这里会放在/home/jaychen下是因为我使用 jaychen 用户来执行ssh-keygen命令)

➜  .ssh ls

total 16K

drwx------ 2 jaychen jaychen 4.0K 12月  7 17:57 .

drwx------ 9 jaychen jaychen 4.0K 12月  7 18:14 ..

-rw------- 1 jaychen jaychen 1.7K 12月  7 17:57 id_rsa.github

-rw-r--r-- 1 jaychen jaychen 390 12月  7 17:57 id_rsa.github.pub

生成的私钥还要注意一点: 私钥的权限应该为rw-------,如果私钥的权限过大,那么私钥任何人都可以读写就会变得不安全。ssh 登录就会失败。

首次 ssh 登录

登录远程服务器的命令是

ssh 登录用户@服务器ip

这里开始要注意两个用户的概念:

本地执行这条命令的用户,即当前登录用户,我这里演示的用户名称是 jaychen。

要登录到远程服务器的用户。

在开始登录之前,我们要首先要把生成 公钥 上传到服务器。

公钥的内容要保存到 要登录的用户的家目录下的.ssh/authorized_keys 文件中。假设你之后要使用 root 用户登录远程服务器,那么公钥的内容应该是保存在/root/.ssh/authorized_keys中。注意authorized_keys文件是可以保存多个公钥信息的,每个公钥以换行分开。

上传完毕之后,执行

ssh root@远程服务器ip

这个时候,如上面说的,远程服务器会发送一段随机字符串回来,这个时候需要使用私钥对字符串进行加密。而这个私钥会去 执行该命令的用户的家目录下的.ssh目录 读取私钥文件,默认私钥文件为id_rsa文件。即$HOME/.ssh/id_rsa文件。假设在生成密钥的时候对私钥进行了加密,那么这个时候就需要输入密码。

上面的流程用户登录的时候是不会感知的,ssh 在背后完成了所有的校验 *** 作,如果密钥匹配的话,那么用户就可以直接登录到远程服务器,但是如果是 首次登录 的话,会出现类似下面的提示:

➜  .ssh ssh root@192.168.1.1The authenticityofhost'192.168.1.1 (192.168.1.1)' can't be established.ECDSAkeyfingerprintisSHA256:61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZg.Are you sure you wanttocontinueconnecting (yes/no)?

这句话的意思是,远程服务器的真实身份无法校验,只知道公钥指纹(公钥的 MD5 值)为61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZg,是否真的要建立连接。出现上面的提示是因为避免存在 中间人攻击 。

中间人攻击

中间人攻击的前提是,你第一次登录一台远程服务器,你除了用户名、用户名对应的公钥私钥以及服务器 ip 之外,对远程服务器丝毫不了解的情况下。假设你 ssh 远程登录 192.168.1.1 的远程主机,在连接过程中被第三者拦截,第三者假冒自己为 192.168.1.1 的主机,那么你就会直接连接到其他人的服务器上。这就是中间人攻击。

为了避免中间人攻击,ssh 在首次登录的时候会返回公钥指纹,用户需要自己手动去 比对你要登录的远程服务器的公钥的公钥指纹和 ssh 返回的公钥指纹是否一样 。

经过比较公钥指纹,确认该服务器就是你要登录的服务器,输入yes之后就可以成功登录。整个登录流程结束。

known_hosts 文件

第一次登录之后,在本机的$HOME/.ssh/目录下就会生成一个known_hosts的文件,内容类似下面

➜  .ssh cat known_hosts192.168.1.1ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOPKYWolOYTDevvBR6GV0rFcI0z/DHZizN5l/ajApsgx+UcOOh51liuyBRRCIyF+BR56Le0lP0Pn6nzvLjbqMqg=

这个文件记录了远程主机 ip 和远程主机对应的公钥指纹,那么在下次登录的时候,远程主机发送过来的公钥指纹,直接和known_hosts文件中对应 ip 的公钥指纹比较即可。

config 配置

很多时候,我们开发可能需要连接多台远程服务器,并且需要配置 git 服务器的私钥。那么这么多的服务器不能共用一套私钥,不同的服务器应该使用不同的私钥。但是我们从上面的连接流程可以看到,ssh 默认是去读取$HOME/.ssh/id_rsa文件作为私钥登录的。如果想要不同的服务器使用不同的私钥进行登录,那么需要在.ssh目录下编写config文件来进行配置。

config的配置很简单,只要指明哪个用户登录哪台远程服务器需要使用哪个私钥即可。下面给出一个配置示例。

Host github.com

           User jaychen

            IdentityFile ~/.ssh/id_rsa.github

Host 192.168.1.1

             User ubuntu

IdentityFile ~/.ssh/id_rsa.xxx

上面config文件字段含义如下:

Host 指明了远程主机的 ip,除了使用 ip 地址,也可以直接使用网址。

User 指的是登录远程主机的用户。

IdentityFile 指明使用哪个私钥文件。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7147613.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-02
下一篇2023-04-02

发表评论

登录后才能评论

评论列表(0条)

    保存