根据 lfs 制作了个小巧的发行版 "200M linux", 4.9 内核, 默认开启 bbr, 可 U 盘启动也可安装也可 vmware 启动

2016-12-26 19:07:20 +08:00
 jarell
根据 lfs 制作了一个小巧的发行版 200M linux, 可 U 盘启动也可安装, 欢迎试用
下载地址 https://sf.net/projects/lfsp200/files/

特色是小巧, live 启动模式能根据不同机器保存不同配置, 用来维护很方便的, 支持 EFI 和 BIOS 启动

可以 qemu 方式启动,参数如下:
sudo qemu -cpu host -enable-kvm -machine accel=kvm -vnc 0:0 -net nic,model=virtio -net bridge -drive file=200M,format=raw,if=virtio
可以直接用 vmware 启动
也可以通过以下 dd 写入 u 盘启动,注意不要写到硬盘里面去,不然会造成无法挽回的数据丢失
dd if=200M of=/dev/sd<X> bs=4M oflag=direct status=progress

有两个 grub 启动条目,默认第一个就可以的,第二个后面说

启动后就能通过 ssh 登录了, user: live_ pass: _live_p123
所以可以不接显示其和键盘
本地 root 无密码登陆, 建议更改一下

只有字符界面, 但我自己常用的开发软件都有了,打算有空的时候再弄个 wayland 桌面上去,初步目标是能跑 chrome

启动完成后就可以拔掉 U 盘了, 如果想把一些设置保存下来就先不要拔掉 U 盘(也可等要保存的时候插上)

建议的设置有:

更改机器名
echo "newhostname" > /etc/hostname

如果要改静态 ip 更改 /etc/systemd/network/lan.network 如下
[Match]
Name=en*

[Network]
Address=192.168.1.2/24
Gateway=192.168.1.1
DNS=192.168.1.1
然后执行 systemctl restart systemd-networkd

新建帐户后删除默认 live_帐户
userdel live_
让 sshd 自动启动 (第一次启动会自动, 但保存设置后就不是了)
systemctl enable sshd
当然还有把 ssh 改成只允许密约登陆什么的

这些设置还都是在内存里保存着的, 下次启动就会失效, 如果要针对当前的启动的机器做持久保存要执行下面的命令
注意 U 盘拔掉的这时要插回去, 命令执行完可以再拔掉, 也就是可以在多台机器来回跑
_liveuser live_sync
这样就把当前设置就保存到 U 盘了, 下次启动会自动加载, 但在其它的机器启动则不会
如果有的设置是删除了某些文件, 执行上面的命令是不会删除 U 盘上的文件的
如果要删除 U 盘上存在但系统里已经不存在的文件执行下面的命令
_liveuser live_sync del

镜像比较小, 写入 U 盘的话会有很大的未分区空间, 可扩展已有分区
在未挂载的情况下(默认系统启动完后没有挂载 U 盘) 先用 parted 的 resizepart 命令把分区扩大
再用 resize_reiserfs 把文件系统扩大就行了
或者干脆新建分区

当然也能安装到硬盘, (注意压缩包包含的 vmware 也是相当 live 模式启动的)
安装到硬盘后就不需要 _liveuser live_sync 了, 也不会起作用了
其实也可以把 U 盘当作硬盘来用的, 这里的安装严格来说是把 live 方式启动的镜像解压出来用正常方式启动

解压根分区的文件到目标分区
unsquashfs root.squashfs -d /<目标分区挂载的路经>
把内核和 initrd 复制过去

安装 grub ,配置一个这样的启动条目就行了,目标分区 uuid 用 blkid 查看
menuentry "lfs 4.9.0" {
set kver=4.9.0
set uuid=<目标分区 uuid>
search.fs_uuid ${uuid} root
linux /boot/vmlinuz-${kver} root=uuid/${uuid} [liveuser=用户名:密码]
initrd /boot/initrd.img-${kver}.xz
}
liveuser 参数可以不用. 可在无显示器的情况下使用这个参数
该参数会在第一次启动的时候添加一个可 sudo 的用户, 并启动 sshd, 配置动态获取 IP
再重启后 ip 还会启动获取, 帐户也还存在, 但 sshd 就不会启动了, 除非 systemctl enable sshd
密码可以明文也可以用 openssl passwd -1 生成

光盘就不支持了, 就不要尝试刻盘了, 肯定启动不了的

内核选的驱动不多,主要是针对我这有的机器通用的
网卡驱动:
vmxnet3 vmware
virtio_net qemu
e1000e Intel pci-e 千兆网卡
iwl3945 无线网卡

显卡驱动, kms 自动设置分辨率:
intel 集成显卡
ati 显卡

如果有有硬件没能驱动可重新编译安装内核, 注意在 32 位系统上无法编译生成 64 位内核, live 模式下无法安装内核,需要正常启动模式才能进行下面的操作
1. 从 https://www.kernel.org/ 下载内核源码,解压并进入该目录
2. 从 https://sourceforge.net/projects/lfsp200/files/ 下载内核配置文件并重命名为 .config
3. 执行 make menuconfig 做相应的更改
4. 执行 make -j$(nproc --all) 进行编译
5. 安装内核模块 sudo XZ_OPT='-T0' make modules_install
6. 安装内核 sudo cp -v arch/x86/boot/bzImage /boot/vmlinuz-$(make -s kernelrelease)
7. 重新生成 initrd sudo /usr/sbin/mkinitramfs --force
8. 重启前可能需要编辑 /boot/grub/grub.cfg 增加修改启动条目,如内核名称未变则不需要

如果想要解压里面的文件,可进行如下操作
sudo losetup -P /dev/loop5 200M
sudo mount /dev/loop5p3 /media
所需要的文件在就在 /media 下面了
完成所需后进行如下清理
sudo umount /media
sudo losetup -d /dev/loop5
4605 次点击
所在节点    Linux
25 条回复
jarell
2017-02-13 17:49:28 +08:00
@iamfredng 为什么你会说没有那几个包呢? 你是不是没启动进入系统啊,卡在 initrd 里面了?
iamfredng
2017-02-13 20:19:50 +08:00
@jarell 进入系统了。可是看到里面 /bin 、/usr/bin 下都没有对应的命令
我是 VMWARE 弄的

另外那个脚本,我意思是第一次进入系统的时候询问下需要设置的 ip ,主机名这些。直接输入就设置好。不用手动去设置
jarell
2017-02-13 20:37:31 +08:00
@iamfredng 你指的是什么命令呢? /sbin /usr/sbin 下有么?
初始设置这些写个简单脚本就行,直接编辑对应文件也不是啥难事,用这个系统都会简单的 vim 吧
开始想过用 ncurses 做个简单的初始设置界面的,但是觉得没啥用。尤其是对经常用 linux 的人来说不如去直接改对应文件来的直接,不用因为不同发新版去学新的东西了。因为系统有非常多的地方可以设置,搞全的话工作量非常大,弄少量又覆盖不全,会出现需要同时用配置工具去配置文件和去直接编译文件两种情况,会造成覆盖误修改等让人恼火的问题,所以现在干脆直接留给大家亲自去修改(愿意手动的手动,愿意用脚本的去用脚本),原汁原味,我认为是比较恰当的做法了。
iamfredng
2017-02-13 20:41:19 +08:00
@jarell 设置脚本那个确实如你所说,用这系统的人基本都对 linux 比较熟悉了。

缺少指令应该是我这边 vmware 的问题。
jarell
2017-02-13 20:43:10 +08:00
@iamfredng 为什么会缺少指令呢? 贴一下 cat /proc/mounts 的输出

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/330321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX