1. 我要做什么
2. 我怎么做的
3. 一些生成的报告
我的目标是搞一个能够运行w3m的linux, 可以放到一个分区,也可以放到一个做好的liveusb上面。
但怎么做比较好玩呢? 我决定就用当前系统已有的文件,堆砌一个上面说的linux。
堆砌的原理就是把复制二进制包和配置文件。具体来说:
过两个脚本计算软件包依赖并复制文件到 **新系统** 。在这个过程中,还会额外生成三个文件.
* dependlist 相关软件包的列表
* decfile 相关软件包的简单描述
* etclist 各个软件包相关的配置文件
通过这些文件可以帮我了解: 系统主要的软件包和相关的配置文件都是那些。
计算依赖的脚本
代码: 全选
#!/bin/bash
cachedir=/tmp/customlinux
cachelist="$cachedir/dependlist"
desclist="$cachedir/descfile"
mkdir -p $cachedir
function countdepend(){
dependlist=`pactree -ul $1 | cut -d" " -f1`
[ -a $cachelist ] || echo > $cachelist
for item in $dependlist ; do
grep -q -e "^$item$" "$cachelist"
if [[ $? != 0 ]] ; then
# 打印软件包名,记录到文件
echo $item | tee -a $cachelist
# 以两行的形式记录软件包的名字和描述,记录到文件里
pacman -Qi $item | grep Desc | sed -e "s/\(Description\s*\):\(.*\)/$item\n\t\2/" >> $desclist
fi
done
}
for pkg in $@ ; do
countdepend $pkg
done
代码: 全选
targetdir=/media/customlinux
cachedir=/tmp/customlinux
cachelist="$cachedir/dependlist"
desclist="$cachedir/descfile"
cachelist="$cachedir"/dependlist
installedlist="$cachedir"/installedlist
etclist="$cachedir"/etclist
mkdir -p $cachedir
function cpkg(){
grep -q -e "$1$" $installedlist
[ $? == 0 ] && return
for f in `pacman -Ql $1 | cut -d" " -f2 `; do
[ -d $f ] && mkdir -p "$targetdir"$f || cp -v $f "$targetdir"$f
# 记录软件相关的配置文件
[ ${f:1:3} == "etc" ] && echo "$1 --- $f" >> $etclist
done
echo $1 >> $installedlist
}
for pkg in \`cat $cachelist\` ; do
cpkg $pkg
done
堆砌过程
挂一个无用的分区,作为新系统的根目录
代码: 全选
mkdir /media/customlinux
mount /dev/sda10 /media/customlinux
>>> countdependence.sh w3m
w3m
openssl
perl
gdbm
glibc
linux-api-headers
tzdata
bash
readline
ncurses
db
gcc-libs
coreutils
pam
cracklib
zlib
libtirpc
libgssglue
pambase
acl
attr
gmp
libcap
gc
计算init程序sysvinit的依赖
>>> countdependence.sh sysvinit
sysvinit
util-linux
gawk
>>> countdependence.sh initscripts
initscripts
systemd-tools
glib2
pcre
libffi
libsystemd
xz
kmod
hwids
kbd
iproute2
findutils
计算ip配置工具的依赖
>>> countdependence.sh iputils
iputils
sysfsutils
>>> countdependence.sh dhcpcd
dhcpcd
计算linux内核的依赖
>>> countdependence.sh linux
linux
linux-firmware
mkinitcpio
mkinitcpio-busybox
libarchive
bzip2
expat
grep
filesystem
iana-etc
file
gzip
根据依赖复制文件
>>> cpkg.sh
复制内核和内存盘
>>> cp /boot/vmlinuz-linux boot
>>> cp /boot/initramfs-linux.img boot
配置
-------
archlinux下面的lib其实已经空掉了,为了兼容,需要软链到usr/lib
>>> cd /media/customlinux
>>> rmdir lib
>>> ln -s usr/lib lib
chroot到这个环境,看看有无问题
>>> env -i PATH=/bin:/usr/bin /usr/sbin/chroot /media/customlinux bash
>>> exit
调整挂载点
>>> cd etc
>>> vi fstab
当前系统默认的shell是zsh,新系统还原成bash
>>> vi sheel
>>> vi passwd
清空mtab,要不然会新系统会挂错分区
>>> vi mtab
去掉不必要daemon,保留network
>>> vi rc.conf
重启
------------
>>> /boot/grub grub-mkconfig -o /boot/grub/grub.cfg
>>> reboot
附:脚本生成的附加文件
软件包描述
w3m
Text-based Web browser, as well as pager
openssl
The Open Source toolkit for Secure Sockets Layer and Transport Layer Security
perl
A highly capable, feature-rich programming language
gdbm
GNU database library
glibc
GNU C Library
linux-api-headers
Kernel headers sanitized for use in userspace
tzdata
Sources for time zone and daylight saving time data
bash
The GNU Bourne Again shell
readline
GNU readline library
ncurses
System V Release 4.0 curses emulation library
db
The Berkeley DB embedded database system
gcc-libs
Runtime libraries shipped by GCC
coreutils
The basic file, shell and text manipulation utilities of the GNU operating system
pam
PAM (Pluggable Authentication Modules) library
cracklib
Password Checking Library
zlib
Compression library implementing the deflate compression method found in gzip and PKZIP
libtirpc
Transport Independent RPC library (SunRPC replacement)
libgssglue
Exports a gssapi interface which calls other random gssapi libraries
pambase
Base PAM configuration for services
acl
Access control list utilities, libraries and headers
attr
Extended attribute support library for ACL support
gmp
A free library for arbitrary precision arithmetic
libcap
POSIX 1003.1e capabilities
gc
A garbage collector for C and C++
linux
The Linux Kernel and modules
linux-firmware
Firmware files for Linux
kmod
Linux kernel module handling
mkinitcpio
Modular initramfs image creation utility
gawk
GNU version of awk
mkinitcpio-busybox
base initramfs tools
util-linux
Miscellaneous system utilities for Linux
libarchive
library that can create and read several streaming archive formats
bzip2
A high-quality data compression program
xz
Library and command line tools for XZ and LZMA compressed files
expat
An XML parser library
findutils
GNU utilities to locate files
grep
A string search utility
pcre
A library that implements Perl 5-style regular expressions
filesystem
Base filesystem
iana-etc
/etc/protocols and /etc/services provided by IANA
file
File type identification utility
gzip
GNU compression utility
systemd-tools
standalone tools from systemd
glib2
Common C routines used by GTK+ and other libs
libffi
A portable, high level programming interface to various calling conventions
libsystemd
systemd client libraries
hwids
hardware identification databases
kbd
Keytable files and keyboard utilities
iputils
IP Configuration Utilities (and Ping)
sysfsutils
System Utilities Based on Sysfs
sysvinit
Linux System V Init
initscripts
System initialization/bootup scripts
iproute2
IP Routing Utilities
软件包配置文件
openssl --- /etc/ssl/misc/CA.pl
openssl --- /etc/ssl/misc/CA.sh
openssl --- /etc/ssl/misc/c_hash
openssl --- /etc/ssl/misc/c_info
openssl --- /etc/ssl/misc/c_issuer
openssl --- /etc/ssl/misc/c_name
openssl --- /etc/ssl/misc/tsget
openssl --- /etc/ssl/openssl.cnf
perl --- /etc/profile.d/perlbin.csh
perl --- /etc/profile.d/perlbin.sh
glibc --- /etc/gai.conf
glibc --- /etc/locale.gen
glibc --- /etc/nscd.conf
glibc --- /etc/rc.d/nscd
glibc --- /etc/rpc
bash --- /etc/bash.bash_logout
bash --- /etc/bash.bashrc
bash --- /etc/skel/.bash_logout
bash --- /etc/skel/.bash_profile
bash --- /etc/skel/.bashrc
readline --- /etc/inputrc
coreutils --- /etc/pam.d/su
pam --- /etc/default/passwd
pam --- /etc/environment
pam --- /etc/security/access.conf
pam --- /etc/security/group.conf
pam --- /etc/security/limits.conf
pam --- /etc/security/namespace.conf
pam --- /etc/security/namespace.init
pam --- /etc/security/pam_env.conf
pam --- /etc/security/time.conf
libtirpc --- /etc/netconfig
libgssglue --- /etc/gssapi_mech.conf
pambase --- /etc/pam.d/other
pambase --- /etc/pam.d/system-auth
pambase --- /etc/pam.d/system-local-login
pambase --- /etc/pam.d/system-login
pambase --- /etc/pam.d/system-remote-login
pambase --- /etc/pam.d/system-services
linux --- /etc/mkinitcpio.d/linux.preset
mkinitcpio --- /etc/mkinitcpio.conf
mkinitcpio --- /etc/mkinitcpio.d/example.preset
util-linux --- /etc/pam.d/chfn
util-linux --- /etc/pam.d/chsh
util-linux --- /etc/pam.d/login
filesystem --- /etc/arch-release
filesystem --- /etc/crypttab
filesystem --- /etc/fstab
filesystem --- /etc/group
filesystem --- /etc/gshadow
filesystem --- /etc/host.conf
filesystem --- /etc/hosts
filesystem --- /etc/issue
filesystem --- /etc/ld.so.conf
filesystem --- /etc/motd
filesystem --- /etc/mtab
filesystem --- /etc/nsswitch.conf
filesystem --- /etc/os-release
filesystem --- /etc/passwd
filesystem --- /etc/profile
filesystem --- /etc/resolv.conf
filesystem --- /etc/securetty
filesystem --- /etc/shadow
filesystem --- /etc/shells
iana-etc --- /etc/protocols
iana-etc --- /etc/services
systemd-tools --- /etc/udev/udev.conf
glib2 --- /etc/profile.d/glib2.csh
glib2 --- /etc/profile.d/glib2.sh
iputils --- /etc/xinetd.d/tftp
initscripts --- /etc/inittab
initscripts --- /etc/logrotate.d/bootlog
initscripts --- /etc/profile.d/locale.sh
initscripts --- /etc/rc.conf
initscripts --- /etc/rc.d/functions
initscripts --- /etc/rc.d/hwclock
initscripts --- /etc/rc.d/netfs
initscripts --- /etc/rc.d/network
initscripts --- /etc/rc.local
initscripts --- /etc/rc.local.shutdown
initscripts --- /etc/rc.multi
initscripts --- /etc/rc.shutdown
initscripts --- /etc/rc.single
initscripts --- /etc/rc.sysinit
iproute2 --- /etc/iproute2/ematch_map
iproute2 --- /etc/iproute2/group
iproute2 --- /etc/iproute2/rt_dsfield
iproute2 --- /etc/iproute2/rt_protos
iproute2 --- /etc/iproute2/rt_realms
iproute2 --- /etc/iproute2/rt_scopes
iproute2 --- /etc/iproute2/rt_tables