-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathsorter.sh
More file actions
executable file
·171 lines (132 loc) · 5.65 KB
/
sorter.sh
File metadata and controls
executable file
·171 lines (132 loc) · 5.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/bin/bash -e
#
# Sorts out all built modules to module extensions, and a tarball for what goes in the base.
#
# Before running, do a "make INSTALL_MOD_PATH=/tmp/somewhere/usr/local modules_install" and
# any other preprocessing, like gzipping the modules and removing generated files in
# lib/modules/KERNELVER.
# Things will happen in the current directory.
#
#
# Usage: ./sorter.sh KERNELVER PATH
# Example: ./sorter.sh 2.6.33-tinycore /tmp/somewhere
#
packup() {
cd $BASEPATH
OLDDIR=$OLDPWD
TARBALL=$1
shift
rm -rf /tmp/xtra
> /tmp/list
for i in $@; do
find usr/local/lib/modules/$KERNEL/kernel/${i} -type f >> /tmp/list
done
tar -cvzf ${OLDDIR}/${TARBALL}.tgz -T /tmp/list
for g in `cat /tmp/list`; do rm $g; done
mkdir /tmp/xtra
tar -C /tmp/xtra -xf ${OLDDIR}/${TARBALL}.tgz
cd /tmp
mksquashfs xtra ${TARBALL}.tcz
md5sum ${TARBALL}.tcz > $OLDDIR/${TARBALL}.tcz.md5.txt
zsyncmake -u ${TARBALL}.tcz ${TARBALL}.tcz
mv ${TARBALL}.tcz* $OLDDIR
find xtra -type f -exec modinfo '{}' \; >> ${OLDDIR}/${TARBALL}.moddeps
grep depends: ${OLDDIR}/${TARBALL}.moddeps | cut -d: -f2 | sed -e 's@^[ ]*@@' -e '/^$/d' -e 's@,@\n@g' |
sort | uniq > /tmp/tmpdeps
mv /tmp/tmpdeps ${OLDDIR}/${TARBALL}.moddeps
cd xtra
find -type f > ${OLDDIR}/${TARBALL}.tcz.list
rm ${OLDDIR}/${TARBALL}.tgz
cd $OLDDIR
# Clean the moddeps up a bit, remove everything in the same file
for i in `cat ${TARBALL}.moddeps`; do
grep -q "${i}.ko" ${TARBALL}.tcz.list && sed -i "/^${i}$/d" ${TARBALL}.moddeps
done
[ -s ${TARBALL}.moddeps ] || rm ${TARBALL}.moddeps
}
# Main
[ $# -ne 2 ] && echo "Usage: $0 KERNELVER PATH" && exit 1
KERNEL=$1
BASEPATH=$2
echo Sorting $KERNEL modules from $BASEPATH
[ ! -e ${BASEPATH}/usr/local/lib/modules/${KERNEL} ] && echo Some param wrong && exit 1
# Packing up
packup kvm-$KERNEL arch/x86/kvm/*
packup alsa-modules-$KERNEL sound
packup bluetooth-$KERNEL net/bluetooth drivers/bluetooth
#packup irda-$KERNEL net/irda drivers/net/irda drivers/usb/serial/ir-usb*
packup net-bridging-$KERNEL net/bridge
packup net-sched-$KERNEL net/sched
packup ipv6-netfilter-$KERNEL net/ipv6 net/ipv4 net/netfilter
packup wireless-$KERNEL net/mac80211 net/wireless drivers/net/wireless
# Needs to go to the base.
mv ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/gpu/drm/drm.ko* /tmp
mv ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/video/backlight/backlight.ko* /tmp
mv ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/char/agp/agpgart.ko* /tmp
packup nouveau-$KERNEL drivers/gpu/drm/nouveau
packup graphics-$KERNEL drivers/char/agp drivers/gpu drivers/usb/misc/sisusbvga
packup firewire-$KERNEL drivers/firewire
packup hwmon-$KERNEL drivers/hwmon
packup i2c-$KERNEL drivers/i2c
packup raid-dm-$KERNEL drivers/md lib/raid*
packup input-joystick-$KERNEL drivers/input/joy* drivers/input/gameport
packup input-tablet-touchscreen-$KERNEL drivers/input/tablet drivers/input/touchscreen
packup mtd-$KERNEL drivers/mtd
packup usb-serial-$KERNEL drivers/usb/misc/uss* drivers/usb/serial
packup leds-$KERNEL drivers/leds
#packup wimax-$KERNEL net/wimax drivers/net/wimax
packup pci-hotplug-$KERNEL drivers/pci/hotplug
packup thinkpad-acpi-$KERNEL drivers/platform/x86/thinkpad_acpi*
packup watchdog-$KERNEL drivers/watchdog
packup ax25-$KERNEL net/ax25 net/rose net/netrom drivers/net/hamradio
# Needs to go to the base.
mv ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/scsi/hv_* /tmp
mv ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/scsi/scsi_transport_fc* /tmp
mv ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/media/cec/core/cec.ko* /tmp
mv ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/fs/exfat* /tmp
packup scsi-$KERNEL drivers/scsi drivers/message
packup l2tp-$KERNEL net/l2tp
packup sctp-$KERNEL net/sctp
packup v4l-dvb-$KERNEL drivers/media drivers/usb/misc/isight*
packup filesystems-$KERNEL fs/[bcehjmrux]*/* fs/nfsd/* fs/nfs fs/nilfs2
# Meta-extension for original modules
EMPTYD=`mktemp -d`
mkdir -p ${EMPTYD}/lib
ls *.tcz > original-modules-$KERNEL.tcz.dep
mksquashfs $EMPTYD original-modules-$KERNEL.tcz
md5sum original-modules-$KERNEL.tcz > original-modules-$KERNEL.tcz.md5.txt
zsyncmake -u original-modules-$KERNEL.tcz original-modules-$KERNEL.tcz
rm -rf $EMPTYD
# The rest goes to the base.
# Put the ones moved manually back
mv /tmp/drm.ko* ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/gpu/drm/
mv /tmp/backlight.ko* ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/video/backlight/
mv /tmp/agpgart.ko* ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/char/agp/
mv /tmp/hv_* /tmp/scsi_transport_fc* ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/scsi/
mv /tmp/cec.ko* ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/drivers/media/cec/core/
mv /tmp/exfat* ${BASEPATH}/usr/local/lib/modules/${KERNEL}/kernel/fs/
cd ${BASEPATH}/usr/local
ln -sf /usr/local/lib/modules/${KERNEL}/kernel/ lib/modules/${KERNEL}/kernel.tclocal
mkdir -p usr/local/lib/modules/${KERNEL}/kernel/
find lib/modules ! -type d > /tmp/list
echo usr/local/lib/modules/${KERNEL}/kernel/ >> /tmp/list
tar cvzf ${OLDPWD}/base_modules.tgz -T /tmp/list
cd -
cp /tmp/list base_modules.tgz.list
# Is it 64-bit?
is64=
case $KERNEL in *64) is64=64 ;; esac
# Also convert it to the cpio initrd format
mkdir tmp
cd tmp
tar xf ../base_modules.tgz
depmod -a -b . ${KERNEL}
rm -f lib/modules/${KERNEL}/*map
rm lib/modules/${KERNEL}/modules.symbols
find lib usr | cpio -o -H newc | gzip -9 > ../modules${is64}.gz
cd ..
rm -rf tmp
# Some final moddeps cleanup
for i in `grep gz base_modules.tgz.list | sed -e 's@.*/@@' -e 's@.ko.gz@@'`; do sed "/^$i\$/d" *moddeps -i; done
for i in *moddeps; do [ -s $i ] || rm $i; done
echo -e "\n\n"'Done!'