无聊,堆了一个archlinux.... [重排]

其他Linux/Unix/BSD/OSX等发行版讨论
回复
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

无聊,堆了一个archlinux.... [重排]

#1

帖子 riptide2012 » 2012-08-20 16:26

比较长,分三部分。

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
计算w3m依赖

>>> 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
上次由 riptide2012 在 2012-08-20 17:14,总共编辑 4 次。
头像
phoenixlzx
帖子: 2245
注册时间: 2009-07-29 20:11
系统: Arch Linux
来自: Gensokyo
联系:

Re: 无聊,堆了一个archlinux....

#2

帖子 phoenixlzx » 2012-08-20 16:28

:em20
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 无聊,堆了一个archlinux....

#3

帖子 枫叶饭团 » 2012-08-20 16:29

没看懂.exe
头像
qy117121
论坛版主
帖子: 50587
注册时间: 2007-12-14 13:40
系统: Winbuntu
来自: 志虚国乌由市
联系:

Re: 无聊,堆了一个archlinux....

#4

帖子 qy117121 » 2012-08-20 16:34

枫叶饭团 写了:没看懂.exe
渠月 · QY   
本人只会灌水,不负责回答问题
无聊可以点一下→ http://u.nu/ubuntu

邮箱 chuan@ubuntu.org.cn
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 无聊,堆了一个archlinux.... [重排]

#5

帖子 枫叶饭团 » 2012-08-20 17:49

好吧,就和官方安装脚本一样的哦。。
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 无聊,堆了一个archlinux.... [重排]

#6

帖子 YeLee » 2012-08-20 17:51

单纯为了w3m?
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: 无聊,堆了一个archlinux.... [重排]

#7

帖子 riptide2012 » 2012-08-20 18:03

枫叶饭团 写了:好吧,就和官方安装脚本一样的哦。。
步骤是差不多拉 :em06 ,但东西比安装base组的要小的。那个要装100多个包呢

其实复制是幌子,主要是为了列出一个基本运行的linux所用到的软件包的描述和这些软件包对应的配置文件是什么。

恩,现在玩瘦身了... :em11
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: 无聊,堆了一个archlinux.... [重排]

#8

帖子 riptide2012 » 2012-09-15 10:57

YeLee 写了:单纯为了w3m?
主要是通过w3m算出联接网络需要的依赖
回复