Huge commit; moved a lot of stuff around; added code for install.img
This commit is contained in:
parent
3325611694
commit
87f9575d8f
@ -1,94 +1,84 @@
|
|||||||
#
|
|
||||||
# Kernel modules for the initrd.img boot image
|
|
||||||
# One module per line. Lorax will use module-init-utils to resolve
|
|
||||||
# dependencies and make sure the modules specified here have all of
|
|
||||||
# the required modules in order to load.
|
|
||||||
#
|
|
||||||
|
|
||||||
=net
|
|
||||||
=scsi
|
|
||||||
aes_generic
|
|
||||||
appletouch
|
|
||||||
arc4
|
|
||||||
cbc
|
|
||||||
cifs
|
|
||||||
cramfs
|
|
||||||
crc32c
|
|
||||||
crypto_blkcipher
|
|
||||||
dm-crypt
|
|
||||||
dm-emc
|
|
||||||
dm-mirror
|
|
||||||
dm-mod
|
|
||||||
dm-multipath
|
|
||||||
dm-round-robin
|
|
||||||
dm-snapshot
|
|
||||||
dm-zero
|
|
||||||
drm
|
|
||||||
ecb
|
|
||||||
edd
|
|
||||||
ehci-hcd
|
|
||||||
ext2
|
|
||||||
ext3
|
|
||||||
ext4dev
|
|
||||||
fat
|
fat
|
||||||
firewire-ohci
|
vfat
|
||||||
firewire-sbp2
|
nfs
|
||||||
|
sunrpc
|
||||||
|
lockd
|
||||||
floppy
|
floppy
|
||||||
|
cramfs
|
||||||
|
loop
|
||||||
|
edd
|
||||||
|
pcspkr
|
||||||
|
squashfs
|
||||||
|
ipv6
|
||||||
|
virtio_pci
|
||||||
|
ohci-hcd
|
||||||
|
uhci-hcd
|
||||||
|
ehci-hcd
|
||||||
|
usbhid
|
||||||
|
mousedev
|
||||||
|
usb-storage
|
||||||
|
sd_mod
|
||||||
|
sr_mod
|
||||||
|
ub
|
||||||
|
appletouch
|
||||||
|
ohci1394
|
||||||
|
sbp2
|
||||||
fw-ohci
|
fw-ohci
|
||||||
fw-sbp2
|
fw-sbp2
|
||||||
gfs2
|
firewire-sbp2
|
||||||
hid
|
firewire-ohci
|
||||||
i810
|
mmc-block
|
||||||
i82365
|
sdhci
|
||||||
i830
|
sdhci-pci
|
||||||
i915
|
|
||||||
ide-cd
|
ide-cd
|
||||||
ide-cd_mod
|
ide-cd_mod
|
||||||
ipv6
|
sr_mod
|
||||||
|
sg
|
||||||
|
st
|
||||||
|
sd_mod
|
||||||
|
scsi_mod
|
||||||
iscsi_tcp
|
iscsi_tcp
|
||||||
jfs
|
iscsi_ibft
|
||||||
linear
|
fat
|
||||||
lock_nolock
|
|
||||||
lockd
|
|
||||||
loop
|
|
||||||
lrw
|
|
||||||
mga
|
|
||||||
mousedev
|
|
||||||
msdos
|
msdos
|
||||||
nfs
|
vfat
|
||||||
nouveau
|
ext2
|
||||||
ohci-hcd
|
ext3
|
||||||
ohci1394
|
ext4
|
||||||
pcmcia
|
reiserfs
|
||||||
pcspkr
|
jfs
|
||||||
r128
|
xfs
|
||||||
radeon
|
gfs2
|
||||||
|
cifs
|
||||||
|
fuse
|
||||||
|
btrfs
|
||||||
|
dm-mod
|
||||||
|
dm-zero
|
||||||
|
dm-snapshot
|
||||||
|
dm-mirror
|
||||||
|
dm-multipath
|
||||||
|
dm-round-robin
|
||||||
|
dm-crypt
|
||||||
raid0
|
raid0
|
||||||
raid1
|
raid1
|
||||||
raid10
|
|
||||||
raid456
|
|
||||||
raid5
|
raid5
|
||||||
raid6
|
raid6
|
||||||
reiserfs
|
raid456
|
||||||
savage
|
raid10
|
||||||
sbp2
|
linear
|
||||||
scsi_mod
|
|
||||||
sd_mod
|
|
||||||
sg
|
|
||||||
sha256_generic
|
sha256_generic
|
||||||
sis
|
cbc
|
||||||
squashfs
|
|
||||||
sr_mod
|
|
||||||
st
|
|
||||||
sunrpc
|
|
||||||
tcic
|
|
||||||
tdfx
|
|
||||||
ub
|
|
||||||
uhci-hcd
|
|
||||||
usb-storage
|
|
||||||
vfat
|
|
||||||
via
|
|
||||||
virtio_pci
|
|
||||||
xfs
|
|
||||||
xts
|
xts
|
||||||
|
lrw
|
||||||
|
aes_generic
|
||||||
|
crypto_blkcipher
|
||||||
|
crc32c
|
||||||
|
ecb
|
||||||
|
arc4
|
||||||
yenta_socket
|
yenta_socket
|
||||||
|
i82365
|
||||||
|
tcic
|
||||||
|
pcmcia
|
||||||
|
=scsi
|
||||||
|
=net
|
||||||
|
=drm
|
||||||
|
@ -1,22 +1,9 @@
|
|||||||
#
|
|
||||||
# List of packages or files required to build boot and install images.
|
|
||||||
# One package or filename per line. Dependencies resovled by yum.
|
|
||||||
#
|
|
||||||
# Packages may be excluded by prefixing them with a minus (-) sign.
|
|
||||||
#
|
|
||||||
# Per-architecture packages can be specified in packages.ARCH files.
|
|
||||||
# These are added to this list to form the final package set for that
|
|
||||||
# platform.
|
|
||||||
#
|
|
||||||
|
|
||||||
/etc/gtk-2.0/gtkrc
|
|
||||||
GConf2
|
GConf2
|
||||||
NetworkManager
|
NetworkManager
|
||||||
ORBit2
|
ORBit2
|
||||||
PolicyKit
|
PolicyKit
|
||||||
VLGothic-fonts
|
|
||||||
acl
|
acl
|
||||||
anaconda
|
#anaconda
|
||||||
anaconda-yum-plugins
|
anaconda-yum-plugins
|
||||||
at-spi
|
at-spi
|
||||||
atk
|
atk
|
||||||
@ -24,73 +11,57 @@ attr
|
|||||||
audit-libs
|
audit-libs
|
||||||
bash
|
bash
|
||||||
bitmap-fonts-cjk
|
bitmap-fonts-cjk
|
||||||
booty
|
btrfs-progs
|
||||||
busybox-anaconda
|
|
||||||
bzip2
|
bzip2
|
||||||
bzip2-libs
|
bzip2-libs
|
||||||
cairo
|
cairo
|
||||||
cjkunifonts-ukai
|
cjkuni-uming-fonts
|
||||||
comps-extras
|
comps-extras
|
||||||
coreutils
|
coreutils
|
||||||
cpio
|
cpio
|
||||||
|
cracklib
|
||||||
cracklib-dicts
|
cracklib-dicts
|
||||||
cracklib-python
|
cracklib-python
|
||||||
cryptsetup-luks
|
cryptsetup-luks
|
||||||
db4
|
db4
|
||||||
dbus
|
dbus
|
||||||
dbus-python
|
dbus-python
|
||||||
dejavu-fonts
|
dejavu-sans-fonts
|
||||||
|
dejavu-sans-mono-fonts
|
||||||
device-mapper
|
device-mapper
|
||||||
device-mapper-libs
|
device-mapper-libs
|
||||||
dhclient
|
dhclient
|
||||||
dhcpv6-client
|
dhcpv6-client
|
||||||
dmapi
|
|
||||||
dmraid
|
dmraid
|
||||||
dmraid-libs
|
dmraid-libs
|
||||||
dogtail
|
dogtail
|
||||||
dosfstools
|
dosfstools
|
||||||
dump
|
|
||||||
e2fsprogs
|
e2fsprogs
|
||||||
e2fsprogs-libs
|
e2fsprogs-libs
|
||||||
echo-icon-theme
|
echo-icon-theme
|
||||||
|
ethtool
|
||||||
elfutils-libelf
|
elfutils-libelf
|
||||||
expat
|
expat
|
||||||
findutils
|
|
||||||
firstaidkit-plugin-all
|
|
||||||
firstboot
|
firstboot
|
||||||
fontconfig
|
fontconfig
|
||||||
fonts-ISO8859-2
|
fonts-ISO8859-2
|
||||||
fonts-arabic
|
|
||||||
fonts-bengali
|
|
||||||
fonts-chinese
|
|
||||||
fonts-gujarati
|
|
||||||
fonts-hindi
|
|
||||||
fonts-indic
|
|
||||||
fonts-kannada
|
|
||||||
fonts-korean
|
|
||||||
fonts-malayalam
|
|
||||||
fonts-oriya
|
|
||||||
fonts-punjabi
|
|
||||||
fonts-sinhala
|
|
||||||
fonts-tamil
|
|
||||||
fonts-telugu
|
|
||||||
freetype
|
freetype
|
||||||
ftp
|
|
||||||
gail
|
gail
|
||||||
|
gawk
|
||||||
|
gdb-gdbserver
|
||||||
gdk-pixbuf
|
gdk-pixbuf
|
||||||
gfs2-utils
|
gfs2-utils
|
||||||
glib2
|
glib2
|
||||||
glibc
|
|
||||||
glibc-common
|
glibc-common
|
||||||
gnome-python2-canvas
|
gnome-python2-canvas
|
||||||
gnome-python2-gconf
|
gnome-python2-gconf
|
||||||
gnome-python2-gtkhtml2
|
gnome-python2-gtkhtml2
|
||||||
gnome-themes
|
gnome-themes
|
||||||
gpm
|
gpm
|
||||||
|
grep
|
||||||
gtk2
|
gtk2
|
||||||
gtk2-engines
|
gtk2-engines
|
||||||
gtkhtml2
|
gtkhtml2
|
||||||
gzip
|
|
||||||
hal
|
hal
|
||||||
hdparm
|
hdparm
|
||||||
hwdata
|
hwdata
|
||||||
@ -99,10 +70,8 @@ iproute
|
|||||||
iputils
|
iputils
|
||||||
iscsi-initiator-utils
|
iscsi-initiator-utils
|
||||||
jfsutils
|
jfsutils
|
||||||
joe
|
|
||||||
keyutils-libs
|
keyutils-libs
|
||||||
krb5-libs
|
krb5-libs
|
||||||
less
|
|
||||||
libICE
|
libICE
|
||||||
libSM
|
libSM
|
||||||
libX11
|
libX11
|
||||||
@ -130,20 +99,14 @@ libattr
|
|||||||
libbdevid
|
libbdevid
|
||||||
libbdevid-python
|
libbdevid-python
|
||||||
libbonobo
|
libbonobo
|
||||||
libdhcp
|
|
||||||
libdhcp4client
|
|
||||||
libdhcp6client
|
|
||||||
libfontenc
|
libfontenc
|
||||||
libgcc
|
libgcc
|
||||||
libgcrypt
|
|
||||||
libglade2
|
libglade2
|
||||||
libgnomecanvas
|
libgnomecanvas
|
||||||
|
libgcrypt
|
||||||
libgpg-error
|
libgpg-error
|
||||||
libidn
|
|
||||||
libjpeg
|
libjpeg
|
||||||
liblbxutil
|
|
||||||
libnl
|
libnl
|
||||||
libpixman
|
|
||||||
libpng
|
libpng
|
||||||
libselinux
|
libselinux
|
||||||
libselinux-python
|
libselinux-python
|
||||||
@ -151,7 +114,6 @@ libsemanage
|
|||||||
libsemanage-python
|
libsemanage-python
|
||||||
libsepol
|
libsepol
|
||||||
libstdc++
|
libstdc++
|
||||||
libtermcap
|
|
||||||
libthai
|
libthai
|
||||||
libuser
|
libuser
|
||||||
libuser-python
|
libuser-python
|
||||||
@ -159,16 +121,26 @@ libvolume_id
|
|||||||
libxcb
|
libxcb
|
||||||
libxkbfile
|
libxkbfile
|
||||||
libxml2
|
libxml2
|
||||||
|
lklug-fonts
|
||||||
|
lohit-assamese-fonts
|
||||||
|
lohit-bengali-fonts
|
||||||
|
lohit-gujarati-fonts
|
||||||
|
lohit-hindi-fonts
|
||||||
|
lohit-kashmiri-fonts
|
||||||
|
lohit-kannada-fonts
|
||||||
|
lohit-maithili-fonts
|
||||||
|
lohit-marathi-fonts
|
||||||
|
lohit-oriya-fonts
|
||||||
|
lohit-punjabi-fonts
|
||||||
|
lohit-sindhi-fonts
|
||||||
|
lohit-tamil-fonts
|
||||||
|
lohit-telugu-fonts
|
||||||
lvm2
|
lvm2
|
||||||
man
|
madan-fonts
|
||||||
mdadm
|
mdadm
|
||||||
mesa-dri-drivers
|
mesa-dri-drivers
|
||||||
mkinitrd
|
mkinitrd
|
||||||
module-init-tools
|
module-init-tools
|
||||||
modutils
|
|
||||||
mt-st
|
|
||||||
mtools
|
|
||||||
mtr
|
|
||||||
nash
|
nash
|
||||||
ncurses
|
ncurses
|
||||||
neon
|
neon
|
||||||
@ -178,17 +150,12 @@ newt-python
|
|||||||
nfs-utils
|
nfs-utils
|
||||||
nspr
|
nspr
|
||||||
nss
|
nss
|
||||||
ntfsprogs
|
ntfs-3g
|
||||||
open
|
|
||||||
openssh
|
|
||||||
openssh-clients
|
|
||||||
openssl
|
|
||||||
pam
|
pam
|
||||||
pango
|
pango
|
||||||
parted
|
parted
|
||||||
pciutils
|
pciutils
|
||||||
pcre
|
pcre
|
||||||
policy
|
|
||||||
policycoreutils
|
policycoreutils
|
||||||
popt
|
popt
|
||||||
prelink
|
prelink
|
||||||
@ -199,16 +166,14 @@ pygtk2
|
|||||||
pygtk2-libglade
|
pygtk2-libglade
|
||||||
pykickstart
|
pykickstart
|
||||||
pyparted
|
pyparted
|
||||||
pyspi
|
|
||||||
python
|
python
|
||||||
python-bugzilla
|
python-bugzilla
|
||||||
python-elementtree
|
python-decorator
|
||||||
python-libs
|
python-libs
|
||||||
python-pyblock
|
python-pyblock
|
||||||
python-sqlite
|
python-sqlite
|
||||||
python-urlgrabber
|
python-urlgrabber
|
||||||
pyxf86config
|
pyxf86config
|
||||||
raidtools
|
|
||||||
readline
|
readline
|
||||||
redhat-artwork
|
redhat-artwork
|
||||||
reiserfs-utils
|
reiserfs-utils
|
||||||
@ -216,67 +181,80 @@ rhpl
|
|||||||
rpm
|
rpm
|
||||||
rpm-libs
|
rpm-libs
|
||||||
rpm-python
|
rpm-python
|
||||||
rsh
|
|
||||||
rsync
|
|
||||||
samba-client
|
|
||||||
sed
|
sed
|
||||||
selinux-policy-targeted
|
selinux-policy-targeted
|
||||||
setup
|
setup
|
||||||
slang
|
slang
|
||||||
smartmontools
|
smc-meera-fonts
|
||||||
specspo
|
specspo
|
||||||
sqlite
|
sqlite
|
||||||
synaptics
|
synaptics
|
||||||
system-config-date
|
system-config-date
|
||||||
system-config-keyboard
|
system-config-keyboard
|
||||||
system-logos
|
#${brandpkgname}-logos
|
||||||
system-release
|
#${brandpkgname}-release
|
||||||
taipeifonts
|
taipeifonts
|
||||||
tar
|
|
||||||
tcp_wrappers
|
tcp_wrappers
|
||||||
traceroute
|
|
||||||
ttfonts-bn
|
|
||||||
ttfonts-gu
|
|
||||||
ttfonts-hi
|
|
||||||
ttfonts-ja
|
|
||||||
ttfonts-ko
|
|
||||||
ttfonts-pa
|
|
||||||
ttfonts-ta
|
|
||||||
ttfonts-zh_CN
|
|
||||||
ttfonts-zh_TW
|
|
||||||
tzdata
|
tzdata
|
||||||
udev
|
udev
|
||||||
|
un-core-fonts-dotum
|
||||||
urw-fonts
|
urw-fonts
|
||||||
util-linux-ng
|
util-linux-ng
|
||||||
vnc-libs
|
tigervnc-server
|
||||||
vnc-server
|
tigervnc-server-module
|
||||||
|
vlgothic-fonts
|
||||||
|
vim-minimal
|
||||||
wpa_supplicant
|
wpa_supplicant
|
||||||
|
xkeyboard-config
|
||||||
xfsdump
|
xfsdump
|
||||||
xfsprogs
|
xfsprogs
|
||||||
xkeyboard-config
|
|
||||||
xorg-x11
|
|
||||||
xorg-x11-auth
|
xorg-x11-auth
|
||||||
xorg-x11-base
|
|
||||||
xorg-x11-drivers
|
xorg-x11-drivers
|
||||||
xorg-x11-font-utils
|
xorg-x11-font-utils
|
||||||
xorg-x11-fonts-100dpi
|
|
||||||
xorg-x11-fonts-75dpi
|
|
||||||
xorg-x11-fonts-ISO8859-1-75dpi
|
|
||||||
xorg-x11-fonts-ISO8859-15-75dpi
|
|
||||||
xorg-x11-fonts-ISO8859-2-75dpi
|
|
||||||
xorg-x11-fonts-ISO8859-9-75dpi
|
|
||||||
xorg-x11-fonts-cyrillic
|
|
||||||
xorg-x11-fonts-ethiopic
|
xorg-x11-fonts-ethiopic
|
||||||
xorg-x11-fonts-misc
|
xorg-x11-fonts-misc
|
||||||
xorg-x11-libs
|
|
||||||
xorg-x11-libs-data
|
|
||||||
xorg-x11-server-Xorg
|
|
||||||
xorg-x11-server-utils
|
xorg-x11-server-utils
|
||||||
xorg-x11-xfs
|
xorg-x11-server-Xorg
|
||||||
xorg-x11-xkb-utils
|
xorg-x11-xkb-utils
|
||||||
xorg-x11-xkbdata
|
xorg-x11-xfs yum
|
||||||
yum
|
|
||||||
yum-fedorakmod
|
|
||||||
yum-metadata-parser
|
yum-metadata-parser
|
||||||
zenity
|
zenity
|
||||||
zlib
|
zlib
|
||||||
|
#/etc/gtk-2.0/gtkrc
|
||||||
|
glibc
|
||||||
|
openssl
|
||||||
|
|
||||||
|
# rescue
|
||||||
|
bzip2
|
||||||
|
bzip2-libs
|
||||||
|
dump
|
||||||
|
libidn
|
||||||
|
findutils
|
||||||
|
ftp
|
||||||
|
gzip
|
||||||
|
iputils
|
||||||
|
joe
|
||||||
|
krb5-libs
|
||||||
|
less
|
||||||
|
man
|
||||||
|
modutils
|
||||||
|
mtools
|
||||||
|
mt-st
|
||||||
|
mtr
|
||||||
|
net-tools
|
||||||
|
smartmontools
|
||||||
|
openssh
|
||||||
|
openssh-clients
|
||||||
|
pciutils
|
||||||
|
rsh
|
||||||
|
traceroute
|
||||||
|
tar
|
||||||
|
rsync
|
||||||
|
device-mapper
|
||||||
|
device-mapper-libs
|
||||||
|
dmraid
|
||||||
|
ntfsprogs
|
||||||
|
samba-client
|
||||||
|
firstaidkit
|
||||||
|
firstaidkit-plugin-all
|
||||||
|
dialog
|
@ -1,11 +1,11 @@
|
|||||||
-glibc
|
-glibc
|
||||||
-openssl
|
-openssl
|
||||||
dmidecode
|
|
||||||
efibootmgr
|
|
||||||
glibc.i386
|
glibc.i386
|
||||||
gpart
|
|
||||||
grub
|
|
||||||
memtest86+
|
|
||||||
openssl.i386
|
openssl.i386
|
||||||
pcmciautils
|
pcmciautils
|
||||||
|
grub
|
||||||
|
dmidecode
|
||||||
|
efibootmgr
|
||||||
|
gpart
|
||||||
syslinux
|
syslinux
|
||||||
|
memtest86+
|
11
etc/packages/packages.i586
Normal file
11
etc/packages/packages.i586
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
-glibc
|
||||||
|
-openssl
|
||||||
|
glibc.i586
|
||||||
|
openssl.i586
|
||||||
|
pcmciautils
|
||||||
|
grub
|
||||||
|
dmidecode
|
||||||
|
efibootmgr
|
||||||
|
gpart
|
||||||
|
syslinux
|
||||||
|
memtest86+
|
@ -1,2 +1,3 @@
|
|||||||
dmidecode
|
dmidecode
|
||||||
efibootmgr
|
efibootmgr
|
||||||
|
elilo
|
@ -1,6 +1,6 @@
|
|||||||
fbset
|
|
||||||
hfsutils
|
|
||||||
pcmciautils
|
pcmciautils
|
||||||
pdisk
|
pdisk
|
||||||
ppc64-utils
|
|
||||||
yaboot
|
yaboot
|
||||||
|
hfsutils
|
||||||
|
fbset
|
||||||
|
ppc64-utils
|
1
etc/packages/packages.ppc64
Symbolic link
1
etc/packages/packages.ppc64
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
packages.ppc
|
@ -1,21 +1,19 @@
|
|||||||
bash
|
s390utils
|
||||||
binutils
|
binutils
|
||||||
coreutils
|
|
||||||
gawk
|
|
||||||
grep
|
|
||||||
initscripts
|
|
||||||
libgcc
|
libgcc
|
||||||
login
|
tcp_wrappers
|
||||||
modutils
|
sed
|
||||||
mount
|
|
||||||
net-tools
|
net-tools
|
||||||
openssh
|
openssh
|
||||||
openssh-server
|
openssh-server
|
||||||
pam
|
coreutils
|
||||||
|
login
|
||||||
|
initscripts
|
||||||
portmap
|
portmap
|
||||||
s390utils
|
pam
|
||||||
sed
|
mount
|
||||||
|
modutils
|
||||||
|
s390utils-cmsfs
|
||||||
strace
|
strace
|
||||||
tcp_wrappers
|
|
||||||
xorg-x11-libs
|
|
||||||
xorg-x11-xauth
|
xorg-x11-xauth
|
||||||
|
xorg-x11-libs
|
1
etc/packages/packages.s390x
Symbolic link
1
etc/packages/packages.s390x
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
packages.s390
|
@ -1,2 +1,2 @@
|
|||||||
silo
|
|
||||||
tilo
|
tilo
|
||||||
|
silo
|
@ -1,7 +1,7 @@
|
|||||||
|
pcmciautils
|
||||||
|
grub
|
||||||
dmidecode
|
dmidecode
|
||||||
efibootmgr
|
efibootmgr
|
||||||
gpart
|
gpart
|
||||||
grub
|
|
||||||
memtest86+
|
|
||||||
pcmciautils
|
|
||||||
syslinux
|
syslinux
|
||||||
|
memtest86+
|
@ -1,4 +0,0 @@
|
|||||||
hfsutils
|
|
||||||
pcmciautils
|
|
||||||
pdisk
|
|
||||||
yaboot
|
|
@ -1,21 +0,0 @@
|
|||||||
bash
|
|
||||||
binutils
|
|
||||||
coreutils
|
|
||||||
gawk
|
|
||||||
grep
|
|
||||||
initscripts
|
|
||||||
libgcc
|
|
||||||
login
|
|
||||||
modutils
|
|
||||||
mount
|
|
||||||
net-tools
|
|
||||||
openssh
|
|
||||||
openssh-server
|
|
||||||
pam
|
|
||||||
portmap
|
|
||||||
s390utils
|
|
||||||
sed
|
|
||||||
strace
|
|
||||||
tcp_wrappers
|
|
||||||
xorg-x11-libs
|
|
||||||
xorg-x11-xauth
|
|
@ -3,7 +3,9 @@
|
|||||||
# create required directories
|
# create required directories
|
||||||
makedir @initrd@/modules
|
makedir @initrd@/modules
|
||||||
makedir @initrd@/firmware
|
makedir @initrd@/firmware
|
||||||
makedir @initrd@/lib/modules
|
makedir @initrd@/lib
|
||||||
|
link @initrd@/modules to @initrd@/lib/modules
|
||||||
|
link @initrd@/firmware to @initrd@/lib/firmware
|
||||||
makedir @initrd@/lib/firmware
|
makedir @initrd@/lib/firmware
|
||||||
makedir @initrd@/sbin
|
makedir @initrd@/sbin
|
||||||
makedir @initrd@/dev
|
makedir @initrd@/dev
|
||||||
@ -54,18 +56,19 @@ edit @initrd@/etc/arch text "@buildarch@"
|
|||||||
copy @instroot@/etc/passwd to @initrd@/etc mode 0644
|
copy @instroot@/etc/passwd to @initrd@/etc mode 0644
|
||||||
copy @instroot@/etc/group to @initrd@/etc mode 0644
|
copy @instroot@/etc/group to @initrd@/etc mode 0644
|
||||||
copy @instroot@/etc/nsswitch.conf to @initrd@/etc mode 0644
|
copy @instroot@/etc/nsswitch.conf to @initrd@/etc mode 0644
|
||||||
|
copy @instroot@/etc/hosts to @initrd@/etc/ mode 0644
|
||||||
|
|
||||||
# copy mount/umount
|
# copy mount/umount
|
||||||
copy @instroot@/bin/mount to @initrd@/sbin
|
copy @instroot@/bin/mount to @initrd@/sbin
|
||||||
copy @instroot@/bin/umount to @initrd@/sbin
|
copy @instroot@/bin/umount to @initrd@/sbin
|
||||||
copy @instroot@/sbin/mount.nfs to @initrd@/sbin
|
copy @instroot@/sbin/mount.* to @initrd@/sbin
|
||||||
link @initrd@/sbin/umount.nfs to mount.nfs
|
copy @instroot@/sbin/umount.* to @initrd@/sbin
|
||||||
|
|
||||||
# copy udev
|
# copy udev
|
||||||
copy @instroot@/sbin/udevd to @initrd@/sbin
|
copy @instroot@/sbin/udevd to @initrd@/sbin
|
||||||
copy @instroot@/sbin/udevadm to @initrd@/sbin
|
copy @instroot@/sbin/udevadm to @initrd@/sbin
|
||||||
link @initrd@/sbin/udevinfo to udevadm
|
copy @instroot@/sbin/udevinfo to @initrd@/sbin
|
||||||
link @initrd@/sbin/udevsettle to udevadm
|
copy @instroot@/sbin/udevsettle to @initrd@/sbin
|
||||||
|
|
||||||
# udev rules
|
# udev rules
|
||||||
copy @instroot@/etc/udev/udev.conf to @initrd@/etc/udev mode 0644
|
copy @instroot@/etc/udev/udev.conf to @initrd@/etc/udev mode 0644
|
||||||
@ -87,7 +90,15 @@ link @initrd@/etc/init.d to /etc/rc.d/init.d
|
|||||||
|
|
||||||
# dhcp and dhcpv6 client daemons and support programs
|
# dhcp and dhcpv6 client daemons and support programs
|
||||||
copy @instroot@/sbin/dhclient to @initrd@/sbin
|
copy @instroot@/sbin/dhclient to @initrd@/sbin
|
||||||
|
copy @instroot@/sbin/dhclient-script to @initrd@/sbin
|
||||||
copy @instroot@/sbin/dhcp6c to @initrd@/sbin
|
copy @instroot@/sbin/dhcp6c to @initrd@/sbin
|
||||||
|
copy @instroot@/sbin/arping to @initrd@/sbin
|
||||||
|
copy @instroot@/sbin/ifconfig to @initrd@/sbin
|
||||||
|
copy @instroot@/sbin/ip to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/ipcalc to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/hostname to @initrd@/sbin
|
||||||
|
copy @instroot@/sbin/ethtool to @initrd@/sbin
|
||||||
|
copy @instroot@/sbin/route to @initrd@/sbin
|
||||||
touch @initrd@/etc/resolv.conf
|
touch @initrd@/etc/resolv.conf
|
||||||
|
|
||||||
# hwdata
|
# hwdata
|
||||||
@ -157,6 +168,20 @@ copy @instroot@/usr/share/terminfo/x/xterm-color to @initrd@/etc/terminfo/x mode
|
|||||||
copy @instroot@/usr/share/terminfo/g/gnome to @initrd@/etc/terminfo/g mode 0644
|
copy @instroot@/usr/share/terminfo/g/gnome to @initrd@/etc/terminfo/g mode 0644
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
|
copy @instroot@/bin/awk to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/gawk to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/egrep to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/fgrep to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/grep to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/kill to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/ln to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/readlink to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/rm to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/rmdir to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/sed to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/sleep to @initrd@/sbin
|
||||||
|
copy @instroot@/bin/touch to @initrd@/sbin
|
||||||
|
|
||||||
link @initrd@/init to /sbin/init
|
link @initrd@/init to /sbin/init
|
||||||
link @initrd@/etc/mtab to /proc/mounts
|
link @initrd@/etc/mtab to /proc/mounts
|
||||||
link @initrd@/bin to sbin
|
link @initrd@/bin to sbin
|
||||||
|
@ -10,3 +10,6 @@ link @initrd@/sbin/poweroff to init
|
|||||||
|
|
||||||
# screenfont
|
# screenfont
|
||||||
copy @instroot@/usr/lib/anaconda-runtime/screenfont-@buildarch@.gz to @initrd@/etc/screenfont.gz
|
copy @instroot@/usr/lib/anaconda-runtime/screenfont-@buildarch@.gz to @initrd@/etc/screenfont.gz
|
||||||
|
|
||||||
|
# keymaps
|
||||||
|
copy @instroot@/keymaps to @initrd@/etc/keymaps.gz
|
@ -13,12 +13,15 @@ copy @instroot@/usr/bin/xauth to @initrd@/sbin
|
|||||||
copy @instroot@/usr/sbin/cmsfs* to @initrd@/sbin
|
copy @instroot@/usr/sbin/cmsfs* to @initrd@/sbin
|
||||||
|
|
||||||
copy @instroot@/@libdir@/libpam_misc.so.0.* to @initrd@/@libdir@/libpam_misc.so.0
|
copy @instroot@/@libdir@/libpam_misc.so.0.* to @initrd@/@libdir@/libpam_misc.so.0
|
||||||
|
copy @instroot@/@libdir@/libwrap*.so* to @initrd@/@libdir@
|
||||||
|
|
||||||
link @initrd@/var/state/xkb to /tmp
|
link @initrd@/var/state/xkb to /tmp
|
||||||
|
|
||||||
# loader
|
# loader
|
||||||
copy @instroot@/usr/lib/anaconda-runtime/loader/shutdown to @initrd@/sbin
|
copy @instroot@/usr/lib/anaconda-runtime/loader/shutdown to @initrd@/sbin
|
||||||
copy @instroot@/usr/lib/anaconda-runtime/loader/linuxrc.s390 to @initrd@/sbin/init
|
copy @instroot@/usr/lib/anaconda-runtime/loader/linuxrc.s390 to @initrd@/sbin/init
|
||||||
|
copy @instroot@/usr/lib/anaconda-runtime/loader/lsznet.raw to @initrd@/sbin/lsznet
|
||||||
|
copy @instroot@/usr/lib/anaconda-runtime/loader/controlunits.sh @initrd@/sbin/controlunits
|
||||||
copy @instroot@/usr/sbin/dasdfmt to @initrd@/sbin
|
copy @instroot@/usr/sbin/dasdfmt to @initrd@/sbin
|
||||||
|
|
||||||
# setup shell environment
|
# setup shell environment
|
||||||
@ -30,9 +33,9 @@ copy @instroot@/@libdir@/security/pam_unix.so to @initrd@/@libdir@/security
|
|||||||
copy @instroot@/@libdir@/security/pam_deny.so to @initrd@/@libdir@/security
|
copy @instroot@/@libdir@/security/pam_deny.so to @initrd@/@libdir@/security
|
||||||
|
|
||||||
copy @instroot@/etc/pam.d/other to @initrd@/etc/pam.d
|
copy @instroot@/etc/pam.d/other to @initrd@/etc/pam.d
|
||||||
copy @datadir@/etc/pam.d/login to @initrd@/etc/pam.d/login
|
copy @datadir@/pam.d/login to @initrd@/etc/pam.d/login
|
||||||
copy @datadir@/etc/pam.d/login to @initrd@/etc/pam.d/sshd
|
copy @datadir@/pam.d/login to @initrd@/etc/pam.d/sshd
|
||||||
copy @datadir@/etc/pam.d/login to @initrd@/etc/pam.d/remote
|
copy @datadir@/pam.d/login to @initrd@/etc/pam.d/remote
|
||||||
|
|
||||||
copy @instroot@/etc/security/limits.conf to @initrd@/etc/security
|
copy @instroot@/etc/security/limits.conf to @initrd@/etc/security
|
||||||
copy @Instroot@/etc/security/pam_env.conf to @initrd@/etc/security
|
copy @Instroot@/etc/security/pam_env.conf to @initrd@/etc/security
|
||||||
@ -43,9 +46,8 @@ genkey @initrd@/etc/ssh/ssh_host_key type rsa1
|
|||||||
genkey @initrd@/etc/ssh/ssh_host_rsa_key type rsa
|
genkey @initrd@/etc/ssh/ssh_host_rsa_key type rsa
|
||||||
genkey @initrd@/etc/ssh/ssh_host_dsa_key type dsa
|
genkey @initrd@/etc/ssh/ssh_host_dsa_key type dsa
|
||||||
|
|
||||||
copy @datadir@/etc/ssh/sshd_config to @initrd@/etc/ssh/sshd_config mode 0600
|
copy @datadir@/sshd/sshd_config to @initrd@/etc/ssh/sshd_config mode 0600
|
||||||
|
|
||||||
# copy in the binaries
|
# copy in the binaries
|
||||||
copy @instroot@/bin/login to @initrd@/sbin/login
|
copy @instroot@/bin/login to @initrd@/sbin/login
|
||||||
copy @instroot@/usr/sbin/sshd to @initrd@/sbin/sshd
|
copy @instroot@/usr/sbin/sshd to @initrd@/sbin/sshd
|
||||||
copy @instroot@/usr/bin/busybox to @initrd@/sbin/busybox
|
|
||||||
|
@ -1,199 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# mk-images.efi
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
makeefibootdisk()
|
|
||||||
{
|
|
||||||
partimg=$1
|
|
||||||
target=$2
|
|
||||||
|
|
||||||
if [ ! -f $1 ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local partsize=$(ls -l $1 | awk '{ print $5; }')
|
|
||||||
local disksize=$((17408 + $partsize + 17408))
|
|
||||||
disksize=$(($disksize + $(($disksize % 512))))
|
|
||||||
local diskimg=$(mktemp /tmp/efidisk.img.XXXXXX)
|
|
||||||
dd if=/dev/zero of=$diskimg count=1 bs=$disksize
|
|
||||||
local loop=$(losetup -v -f $diskimg | awk '{ print $4 }')
|
|
||||||
dmsetup create efiboot$$ --table "0 $(($disksize / 512)) linear $loop 0"
|
|
||||||
parted --script /dev/mapper/efiboot$$ mklabel gpt unit b mkpart '"EFI System Partition"' fat32 17408 $((17408 + $partsize)) set 1 boot on
|
|
||||||
dd if=$partimg of=/dev/mapper/efiboot$$p1
|
|
||||||
dmsetup remove /dev/mapper/efiboot$$p1
|
|
||||||
dmsetup remove /dev/mapper/efiboot$$
|
|
||||||
losetup -d $loop
|
|
||||||
|
|
||||||
mv -v $diskimg $target
|
|
||||||
chmod a+r $target
|
|
||||||
}
|
|
||||||
|
|
||||||
#makeefibootimage required for EFI bootloader dosfs image
|
|
||||||
makeefibootimage() {
|
|
||||||
MBD_FILENAME=""
|
|
||||||
KERNELFILE=""
|
|
||||||
INITRDFILE=""
|
|
||||||
grubpkg=""
|
|
||||||
MBD_TMPIMAGE=${TMPDIR:-/tmp}/makebootdisk.image.$$
|
|
||||||
MBD_BOOTTREE=${TMPDIR:-/tmp}/makebootdisk.tree.$$
|
|
||||||
MBD_BOOTTREE_TMP=$MBD_BOOTTREE'_tmp'
|
|
||||||
while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
|
|
||||||
if [ $1 = "--kernel" ]; then
|
|
||||||
KERNELFILE=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--initrd" ]; then
|
|
||||||
INITRDFILE=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--imagename" ]; then
|
|
||||||
MBD_FILENAME=$IMAGEPATH/$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--grubpkg" ]; then
|
|
||||||
grubpkg=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Unknown option passed to makebootdisk"
|
|
||||||
exit 1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$MBD_FILENAME" ]; then
|
|
||||||
echo "No imagename passed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$KERNELFILE" ]; then
|
|
||||||
echo "No kernel file passed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$INITRDFILE" ]; then
|
|
||||||
echo "No initrd file passed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
MBD_FSIMAGE="$INITRDFILE"
|
|
||||||
|
|
||||||
mkdir -p $MBD_BOOTTREE
|
|
||||||
mkdir -p $MBD_BOOTTREE_TMP
|
|
||||||
rm -rf $MBD_BOOTTREE_TMP
|
|
||||||
mkdir -p $MBD_TMPIMAGE
|
|
||||||
|
|
||||||
# provided by the mk-image.$ARCH file
|
|
||||||
prepareEfiImage
|
|
||||||
|
|
||||||
left=$(df $MBD_BOOTTREE | tail -n1)
|
|
||||||
left=$(echo $left | awk '{print $4'})
|
|
||||||
|
|
||||||
umount $MBD_BOOTTREE
|
|
||||||
|
|
||||||
if [ -n "$EXTRAKERNELPATH" ]; then
|
|
||||||
mkdir -p `dirname $EXTRAKERNELPATH`
|
|
||||||
cp -f $KERNELROOT/$KERNELDIR/${KERNELNAME}-* $EXTRAKERNELPATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p `dirname $MBD_FILENAME`
|
|
||||||
rm -rf $MBD_TMPIMAGE $MBD_MNTPOINT $MBD_BOOTTREE
|
|
||||||
if [ -z "$INITRDFILE" ]; then
|
|
||||||
rm -f $MBD_FSIMAGE
|
|
||||||
fi
|
|
||||||
|
|
||||||
chmod a+r $MBD_FILENAME
|
|
||||||
echo "Wrote $MBD_FILENAME (${left}k free)"
|
|
||||||
}
|
|
||||||
|
|
||||||
# prepare and build an efiboot.img.
|
|
||||||
prepareEfiImage() {
|
|
||||||
prepareEfiTree || return 1
|
|
||||||
|
|
||||||
# dynamically calculate the size of the dosfs
|
|
||||||
BOOTDISKSIZE=$(du -kcs $MBD_BOOTTREE_TMP | tail -n1 | awk '{print $1}')
|
|
||||||
BOOTDISKSIZE=$(expr $BOOTDISKSIZE + 100)
|
|
||||||
echo "The size of the efiboot.img dosfs is $BOOTDISKSIZE"
|
|
||||||
mkdosfs -n ANACONDA -C $MBD_FILENAME $BOOTDISKSIZE >/dev/null
|
|
||||||
mount -o loop,shortname=winnt,umask=0077 -t vfat $MBD_FILENAME $MBD_BOOTTREE
|
|
||||||
cp -R $MBD_BOOTTREE_TMP/* $MBD_BOOTTREE
|
|
||||||
}
|
|
||||||
|
|
||||||
# prepare a directory with the kernel, initrd, and various message files
|
|
||||||
# used to populate the efi boot image
|
|
||||||
prepareEfiTree() {
|
|
||||||
mkdir -p $MBD_BOOTTREE_TMP/EFI/boot
|
|
||||||
|
|
||||||
cp -a $BOOTDISKDIR/* $MBD_BOOTTREE_TMP/EFI/boot/
|
|
||||||
cp $INITRDFILE $MBD_BOOTTREE_TMP/EFI/boot/initrd.img
|
|
||||||
cp $KERNELFILE $MBD_BOOTTREE_TMP/EFI/boot/vmlinuz
|
|
||||||
|
|
||||||
sed -i "s/@PRODUCT@/$PRODUCT/g" $MBD_BOOTTREE_TMP/EFI/boot/grub.conf
|
|
||||||
sed -i "s/@VERSION@/$VERSION/g" $MBD_BOOTTREE_TMP/EFI/boot/grub.conf
|
|
||||||
|
|
||||||
yumdownloader -c $yumconf $grubpkg
|
|
||||||
rpm2cpio $grubpkg.rpm | (cd $KERNELROOT; cpio --quiet -iumd)
|
|
||||||
cp $KERNELROOT/boot/efi/EFI/redhat/grub.efi $MBD_BOOTTREE_TMP/EFI/boot/grub.efi
|
|
||||||
|
|
||||||
# The first generation Mactel machines get the bootloader name wrong
|
|
||||||
# as per the spec. Awesome, guys.
|
|
||||||
if [ "$efiarch" == "ia32" ]; then
|
|
||||||
cp $MBD_BOOTTREE_TMP/EFI/boot/grub.efi $MBD_BOOTTREE_TMP/EFI/boot/boot.efi
|
|
||||||
cp $MBD_BOOTTREE_TMP/EFI/boot/grub.conf $MBD_BOOTTREE_TMP/EFI/boot/boot.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
mv $MBD_BOOTTREE_TMP/EFI/boot/grub.efi $MBD_BOOTTREE_TMP/EFI/boot/boot${efiarch}.efi
|
|
||||||
mv $MBD_BOOTTREE_TMP/EFI/boot/grub.conf $MBD_BOOTTREE_TMP/EFI/boot/boot${efiarch}.conf
|
|
||||||
|
|
||||||
artpkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" --whatprovides system-logos | grep -v generic-logos | head -1)
|
|
||||||
|
|
||||||
if [ -z "$artpkg" ]; then
|
|
||||||
argpkg="generic-logos"
|
|
||||||
fi
|
|
||||||
|
|
||||||
yumdownloader -c $yumconf $artpkg
|
|
||||||
rpm2cpio $artpkg.rpm | (cd $KERNELROOT; cpio --quiet -iumd)
|
|
||||||
cp $KERNELROOT/boot/grub/splash.xpm.gz $MBD_BOOTTREE_TMP/EFI/boot/splash.xpm.gz
|
|
||||||
}
|
|
||||||
|
|
||||||
makeEfiImages() {
|
|
||||||
yumconf="$1"
|
|
||||||
if [ "$kernelvers" != "$kernelxen" ]; then
|
|
||||||
local grubarch=${efiarch}
|
|
||||||
case ${efiarch} in
|
|
||||||
ia32) grubarch=i386 ;;
|
|
||||||
x64) grubarch=x86_64 ;;
|
|
||||||
esac
|
|
||||||
grubpkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" -c $yumconf grub.$grubarch)
|
|
||||||
if [ -z "$grubpkg" ]; then
|
|
||||||
echo "cannot find package grub.$grubarch" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
echo "Building efiboot.img for ${efiarch}/$KERNELARCH at $TOPDESTPATH/images/efiboot.img"
|
|
||||||
|
|
||||||
makeefibootimage \
|
|
||||||
--imagename pxeboot/efiboot.img \
|
|
||||||
--kernel $TOPDESTPATH/images/pxeboot/vmlinuz \
|
|
||||||
--initrd $TOPDESTPATH/images/pxeboot/initrd.img \
|
|
||||||
--grubpkg ${grubpkg}
|
|
||||||
local ret=$?
|
|
||||||
[ $ret -eq 0 ] || return $ret
|
|
||||||
|
|
||||||
makeefibootdisk $TOPDESTPATH/images/pxeboot/efiboot.img $TOPDESTPATH/images/efidisk.img
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
@ -1,173 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# mk-images.ia64
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
#makebootdisk required for EFI bootloader dosfs image
|
|
||||||
makebootdisk() {
|
|
||||||
EXTRAKERNELPATH=""
|
|
||||||
INITRDFLAGS=""
|
|
||||||
MBD_FILENAME=""
|
|
||||||
INITRDFILE=""
|
|
||||||
MBD_TMPIMAGE=${TMPDIR:-/tmp}/makebootdisk.image.$$
|
|
||||||
MBD_BOOTTREE=${TMPDIR:-/tmp}/makebootdisk.tree.$$
|
|
||||||
MBD_BOOTTREE_TMP=$MBD_BOOTTREE'_tmp'
|
|
||||||
while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
|
|
||||||
if [ $1 = "--kernelto" ]; then
|
|
||||||
EXTRAKERNELPATH=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--initrdflags" ]; then
|
|
||||||
INITRDFLAGS=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--initrd" ]; then
|
|
||||||
INITRDFILE=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--imagename" ]; then
|
|
||||||
MBD_FILENAME=$IMAGEPATH/$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Unknown option passed to makebootdisk"
|
|
||||||
exit 1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$MBD_FILENAME" ]; then
|
|
||||||
echo "No imagename passed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$INITRDFILE" ]; then
|
|
||||||
MBD_FSIMAGE="$INITRDFILE"
|
|
||||||
elif [ -n "$INITRDFLAGS" ]; then
|
|
||||||
eval makeinitrd --keep $INITRDFLAGS
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p $MBD_BOOTTREE
|
|
||||||
mkdir -p $MBD_BOOTTREE_TMP
|
|
||||||
rm -rf $MBD_BOOTTREE_TMP
|
|
||||||
mkdir -p $MBD_TMPIMAGE
|
|
||||||
|
|
||||||
# provided by the mk-image.$ARCH file
|
|
||||||
prepareBootImage
|
|
||||||
|
|
||||||
left=$(df $MBD_BOOTTREE | tail -n1)
|
|
||||||
left=$(echo $left | awk '{print $4'})
|
|
||||||
|
|
||||||
umount $MBD_BOOTTREE
|
|
||||||
|
|
||||||
if [ -n "$EXTRAKERNELPATH" ]; then
|
|
||||||
mkdir -p `dirname $EXTRAKERNELPATH`
|
|
||||||
cp -f $KERNELROOT/$KERNELDIR/${KERNELNAME}-* $EXTRAKERNELPATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p `dirname $MBD_FILENAME`
|
|
||||||
rm -rf $MBD_TMPIMAGE $MBD_MNTPOINT $MBD_BOOTTREE
|
|
||||||
if [ -z "$INITRDFILE" ]; then
|
|
||||||
rm -f $MBD_FSIMAGE
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Wrote $MBD_FILENAME (${left}k free)"
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareBootImage() {
|
|
||||||
|
|
||||||
prepareBootTree
|
|
||||||
|
|
||||||
# dynamically calculate the size of the dosfs
|
|
||||||
BOOTDISKSIZE=$(du -kcs $MBD_BOOTTREE_TMP | tail -n1 | awk '{print $1}')
|
|
||||||
BOOTDISKSIZE=$(expr $BOOTDISKSIZE + 100)
|
|
||||||
echo "The size of the boot.img dosfs is $BOOTDISKSIZE"
|
|
||||||
mkdosfs -n ANACONDA -C $MBD_FILENAME $BOOTDISKSIZE >/dev/null
|
|
||||||
mount -o loop -t vfat $MBD_FILENAME $MBD_BOOTTREE
|
|
||||||
cp -R $MBD_BOOTTREE_TMP/* $MBD_BOOTTREE
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareBootTree() {
|
|
||||||
mkdir -p $MBD_BOOTTREE_TMP/EFI/boot
|
|
||||||
cp $MBD_FSIMAGE $MBD_BOOTTREE_TMP/EFI/boot/initrd.img
|
|
||||||
|
|
||||||
cp -a $BOOTDISKDIR/* $MBD_BOOTTREE_TMP/EFI/boot/
|
|
||||||
cp $KERNELROOT/boot/efi/EFI/redhat/vmlinuz-* $MBD_BOOTTREE_TMP/EFI/boot/vmlinuz
|
|
||||||
|
|
||||||
cp $MBD_BOOTTREE_TMP/EFI/boot/elilo.efi $MBD_BOOTTREE_TMP/EFI/boot/bootia64.efi
|
|
||||||
cat > $MBD_BOOTTREE_TMP/EFI/boot/elilo.conf << EOF
|
|
||||||
prompt
|
|
||||||
timeout=50
|
|
||||||
relocatable
|
|
||||||
|
|
||||||
image=vmlinuz
|
|
||||||
label=linux
|
|
||||||
read-only
|
|
||||||
initrd=initrd.img
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# make a copy in the root of the image
|
|
||||||
cp $MBD_BOOTTREE_TMP/EFI/boot/* $MBD_BOOTTREE_TMP
|
|
||||||
}
|
|
||||||
|
|
||||||
makeBootImages() {
|
|
||||||
# Because ia64 boxes use EFI there needs to be a boot.img dosfs.
|
|
||||||
echo "making boot.img for EFI bootloader"
|
|
||||||
makebootdisk --kernelto $TOPDESTPATH/kernels/vmlinuz \
|
|
||||||
--imagename boot.img \
|
|
||||||
--initrdflags '--initrdto $TOPDESTPATH/images/ramdisk.img \
|
|
||||||
--initrdsize 12288 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$INITRDMODS sgiioc4" '
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p $TOPDESTPATH/images/pxeboot
|
|
||||||
makeinitrd --initrdto $TOPDESTPATH/images/pxeboot/initrd.img \
|
|
||||||
--initrdsize 12288 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$INITRDMODS sgiioc4"
|
|
||||||
[ $? = 0 ] || exit 1
|
|
||||||
mv $TOPDESTPATH/kernels/vmlinuz $TOPDESTPATH/images/pxeboot/vmlinuz
|
|
||||||
rmdir $TOPDESTPATH/kernels
|
|
||||||
|
|
||||||
# make a pxe dir with kernel + initrd
|
|
||||||
cat > $TOPDESTPATH/images/pxeboot/README <<EOF
|
|
||||||
The files in this directory are useful for booting a machine via PXE.
|
|
||||||
|
|
||||||
The following files are available:
|
|
||||||
vmlinuz - the kernel used for the installer
|
|
||||||
initrd.img - an initrd with support for all install methods and
|
|
||||||
drivers supported for installation of $PRODUCT
|
|
||||||
EOF
|
|
||||||
cat << __EOT__ >> $TOPDESTPATH/.treeinfo
|
|
||||||
[images-$KERNELARCH]
|
|
||||||
kernel = images/pxeboot/vmlinuz
|
|
||||||
initrd = images/pxeboot/initrd.img
|
|
||||||
boot.img = images/boot.img
|
|
||||||
|
|
||||||
[images-xen]
|
|
||||||
kernel = images/pxeboot/vmlinuz
|
|
||||||
initrd = images/pxeboot/initrd.img
|
|
||||||
|
|
||||||
__EOT__
|
|
||||||
}
|
|
||||||
|
|
||||||
doPostImages() {
|
|
||||||
if [ -n "$BOOTISO" ]; then
|
|
||||||
mkisofs -quiet -o $TOPDESTPATH/images/$BOOTISO -b boot.img -no-emul-boot -R -J -V "$PRODUCT" -T -graft-points boot.img=$TOPDESTPATH/images/boot.img images/install.img=$TOPDESTPATH/images/install.img
|
|
||||||
implantisomd5 $TOPDESTPATH/images/$BOOTISO
|
|
||||||
fi
|
|
||||||
}
|
|
@ -1,164 +0,0 @@
|
|||||||
#
|
|
||||||
# mk-images.x86
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
SYSLINUX=$IMGPATH/usr/lib/syslinux/syslinux-nomtools
|
|
||||||
|
|
||||||
if [ ! -f $SYSLINUX ]; then
|
|
||||||
echo "Warning: nomtools syslinux doesn't exist"
|
|
||||||
SYSLINUX=$IMGPATH/usr/bin/syslinux
|
|
||||||
if [ ! -f $SYSLINUX ]; then
|
|
||||||
echo "$SYSLINUX doesn't exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# prepare a directory with the kernel, initrd, and various message files
|
|
||||||
# used to populate a boot image
|
|
||||||
prepareBootTree() {
|
|
||||||
(cd $BOOTDISKDIR; find . -maxdepth 1 ! -name "*.msg" ! -type d | cpio --quiet -p $MBD_BOOTTREE)
|
|
||||||
|
|
||||||
cp $MBD_FSIMAGE $MBD_BOOTTREE/initrd.img
|
|
||||||
cp $KERNELROOT/boot/vmlinuz-* $MBD_BOOTTREE/vmlinuz
|
|
||||||
|
|
||||||
if [ -f $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg ]; then
|
|
||||||
cp $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg $MBD_BOOTTREE/splash.jpg
|
|
||||||
cp $IMGPATH/usr/lib/syslinux/vesamenu.c32 $MBD_BOOTTREE/vesamenu.c32
|
|
||||||
sed -i s'/default linux/default vesamenu.c32/g' $MBD_BOOTTREE/syslinux.cfg
|
|
||||||
sed -i 's/prompt 1/#prompt 1/g' $MBD_BOOTTREE/syslinux.cfg
|
|
||||||
elif [ -x $IMGPATH/usr/lib/anaconda-runtime/splashtolss.sh ]; then
|
|
||||||
$IMGPATH/usr/lib/anaconda-runtime/splashtolss.sh $BOOTDISKDIR/syslinux-splash.png $BOOTDISKDIR/splash.lss
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
echo $0: Failed to create splash.lss
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
cp $BOOTDISKDIR/splash.lss $MBD_BOOTTREE/splash.lss
|
|
||||||
elif [ -f $IMGPATH/usr/lib/anaconda-runtime/splash.lss ]; then
|
|
||||||
cp $IMGPATH/usr/lib/anaconda-runtime/splash.lss $MBD_BOOTTREE/splash.lss
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f $MBD_BOOTTREE/syslinux-splash.png
|
|
||||||
sed -i "s/@PRODUCT@/$PRODUCT/g" $MBD_BOOTTREE/syslinux.cfg
|
|
||||||
sed -i "s/@VERSION@/$VERSION/g" $MBD_BOOTTREE/syslinux.cfg
|
|
||||||
|
|
||||||
rm -f $MBD_BOOTTREE/memtest*
|
|
||||||
for file in $BOOTDISKDIR/*.msg; do
|
|
||||||
filename=`basename $file`
|
|
||||||
sed -e "s/@VERSION@/$VERSION/g" $file > $MBD_BOOTTREE/$filename
|
|
||||||
done
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
echo $0: Failed to copy messages from $BOOTDISKDIR to $MBD_BOOTTREE.
|
|
||||||
umount $MBD_BOOTTREE
|
|
||||||
rm -rf $MBD_BOOTTREE $MBD_TMPIMAGE
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
mkdir -p $TOPDESTPATH/images/pxeboot
|
|
||||||
cat > $TOPDESTPATH/images/README <<EOF
|
|
||||||
This directory contains image files that can be used to create media
|
|
||||||
capable of starting the $PRODUCT installation process.
|
|
||||||
|
|
||||||
The boot.iso file is an ISO 9660 image of a bootable CD-ROM. It is useful
|
|
||||||
in cases where the CD-ROM installation method is not desired, but the
|
|
||||||
CD-ROM's boot speed would be an advantage.
|
|
||||||
|
|
||||||
To use this image file, burn the file onto CD-R (or CD-RW) media as you
|
|
||||||
normally would.
|
|
||||||
EOF
|
|
||||||
|
|
||||||
makeBootImages() {
|
|
||||||
local initrd="initrd.img"
|
|
||||||
local kernelimage="vmlinuz"
|
|
||||||
|
|
||||||
if [ "$kernelvers" = "$kernelxen" ] ; then
|
|
||||||
local tag="${kernelvers#kernel}"
|
|
||||||
if [ -n "$tag" -a "$tag" != "$kernelvers" ] ; then
|
|
||||||
initrd="initrd${tag}.img"
|
|
||||||
kernelimage="vmlinuz${tag}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Building $initrd"
|
|
||||||
makeinitrd --initrdto $TOPDESTPATH/images/pxeboot/$initrd \
|
|
||||||
--initrdsize 8192 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$INITRDMODS"
|
|
||||||
[ $? = 0 ] || exit 1
|
|
||||||
|
|
||||||
if [ "$kernelvers" != "$kernelxen" ] ; then
|
|
||||||
if [ -f $IMGPATH/usr/lib/syslinux/isolinux.bin ]; then
|
|
||||||
echo "Building isolinux directory"
|
|
||||||
MBD_BOOTTREE=$TOPDESTPATH/isolinux
|
|
||||||
MBD_FSIMAGE=$TOPDESTPATH/images/pxeboot/initrd.img
|
|
||||||
mkdir $MBD_BOOTTREE
|
|
||||||
cp $IMGPATH/usr/lib/syslinux/isolinux.bin $MBD_BOOTTREE/isolinux.bin
|
|
||||||
|
|
||||||
prepareBootTree
|
|
||||||
|
|
||||||
# isolinux needs the config file to be isolinux.cfg
|
|
||||||
mv $MBD_BOOTTREE/syslinux.cfg $MBD_BOOTTREE/isolinux.cfg
|
|
||||||
|
|
||||||
# copy in memtest if present
|
|
||||||
if [ -f $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* ]; then
|
|
||||||
cp $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* $MBD_BOOTTREE/memtest
|
|
||||||
echo -e "label memtest86\n menu label ^Memory test\n kernel memtest\n append -\n" >> $MBD_BOOTTREE/isolinux.cfg
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "No isolinux binaries. Skipping isolinux creation"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# symlink the kernel for pxe dir
|
|
||||||
ln $TOPDESTPATH/isolinux/vmlinuz $TOPDESTPATH/images/pxeboot/vmlinuz
|
|
||||||
|
|
||||||
cat > $TOPDESTPATH/images/pxeboot/README <<EOF
|
|
||||||
The files in this directory are useful for booting a machine via PXE.
|
|
||||||
|
|
||||||
The following files are available:
|
|
||||||
vmlinuz - the kernel used for the installer
|
|
||||||
initrd.img - an initrd with support for all install methods and
|
|
||||||
drivers supported for installation of $PRODUCT
|
|
||||||
EOF
|
|
||||||
cat << __EOT__ >> $TOPDESTPATH/.treeinfo
|
|
||||||
[images-$BASEARCH]
|
|
||||||
kernel = images/pxeboot/vmlinuz
|
|
||||||
initrd = images/pxeboot/initrd.img
|
|
||||||
__EOT__
|
|
||||||
if [ -n "$BOOTISO" ]; then echo "boot.iso = images/$BOOTISO" >> $TOPDESTPATH/.treeinfo ; fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# set up the boot stuff for the xen guest kernel
|
|
||||||
if [ -z "$kernelxen" -o "$kernelvers" = "$kernelxen" ] ; then
|
|
||||||
cp $KERNELROOT/boot/vmlinuz-$version $TOPDESTPATH/images/pxeboot/$kernelimage
|
|
||||||
cat << __EOT__ >> $TOPDESTPATH/.treeinfo
|
|
||||||
[images-xen]
|
|
||||||
kernel = images/pxeboot/$kernelimage
|
|
||||||
initrd = images/pxeboot/$initrd
|
|
||||||
|
|
||||||
__EOT__
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
doPostImages() {
|
|
||||||
if [ -n "$BOOTISO" ]; then
|
|
||||||
mkisofs -quiet -o $TOPDESTPATH/images/$BOOTISO -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -V "$PRODUCT" -T -graft-points isolinux=$TOPDESTPATH/isolinux images/install.img=$TOPDESTPATH/images/install.img
|
|
||||||
implantisomd5 $TOPDESTPATH/images/$BOOTISO
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
@ -1,99 +0,0 @@
|
|||||||
#
|
|
||||||
# Makefile
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
include ../Makefile.inc
|
|
||||||
|
|
||||||
ARCH := $(patsubst i%86,i386,$(shell uname -m))
|
|
||||||
ARCH := $(patsubst sparc%,sparc,$(ARCH))
|
|
||||||
|
|
||||||
ISYSLIB=isys
|
|
||||||
|
|
||||||
LOADERDIR = ../loader
|
|
||||||
LOADLIBES = -lpopt
|
|
||||||
CFLAGS += -I.. -I$(LOADERDIR) -fno-strict-aliasing
|
|
||||||
RPMCFLAGS = $(CFLAGS) -I/usr/include/rpm
|
|
||||||
|
|
||||||
UTILS = modlist snarffont mapshdr readmap
|
|
||||||
ifeq (s390, $(ARCH))
|
|
||||||
UTILS += geninitrdsz mk-s390-cdboot
|
|
||||||
endif
|
|
||||||
ifeq (s390x, $(ARCH))
|
|
||||||
UTILS += geninitrdsz mk-s390-cdboot
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq (.depend,$(wildcard .depend))
|
|
||||||
TARGET=all
|
|
||||||
else
|
|
||||||
TARGET=depend all
|
|
||||||
endif
|
|
||||||
|
|
||||||
everything: $(TARGET)
|
|
||||||
|
|
||||||
all: $(UTILS)
|
|
||||||
|
|
||||||
modlist: modlist.o moduleinfo.o
|
|
||||||
$(CC) $(LDFLAGS) -o modlist modlist.o moduleinfo.o $(LOADLIBES)
|
|
||||||
|
|
||||||
moduleinfo.o: $(LOADERDIR)/moduleinfo.c
|
|
||||||
cp $(LOADERDIR)/moduleinfo.c ./
|
|
||||||
$(CC) $(CFLAGS) -c moduleinfo.c
|
|
||||||
|
|
||||||
moduledeps.o: $(LOADERDIR)/moduledeps.c
|
|
||||||
cp $(LOADERDIR)/moduledeps.c ./
|
|
||||||
$(CC) $(CFLAGS) -c moduledeps.c
|
|
||||||
|
|
||||||
md5.o: md5.c md5.h
|
|
||||||
gcc -c -O -g md5.c -D_FORTIFY_SOURCE=2
|
|
||||||
|
|
||||||
hash.o : hash.c
|
|
||||||
$(CC) $(RPMCFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
geninitrdsz: geninitrdsz.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $<
|
|
||||||
|
|
||||||
mk-s390-cdboot: mk-s390-cdboot.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $<
|
|
||||||
|
|
||||||
depends:
|
|
||||||
|
|
||||||
install: all
|
|
||||||
mkdir -p $(DESTDIR)/usr/bin
|
|
||||||
mkdir -p $(DESTDIR)/$(RUNTIMEDIR)
|
|
||||||
install -m755 genmodinfo $(DESTDIR)/$(RUNTIMEDIR)
|
|
||||||
install -m755 trimpciids $(DESTDIR)/$(RUNTIMEDIR)
|
|
||||||
install -m755 modlist $(DESTDIR)/$(RUNTIMEDIR)
|
|
||||||
install -m755 readmap $(DESTDIR)/$(RUNTIMEDIR)
|
|
||||||
install -m755 mapshdr $(DESTDIR)/$(RUNTIMEDIR)
|
|
||||||
if [ -x geninitrdsz ]; then \
|
|
||||||
install -m755 geninitrdsz $(DESTDIR)/$(RUNTIMEDIR) ; \
|
|
||||||
fi
|
|
||||||
if [ -x mk-s390-cdboot ]; then \
|
|
||||||
install -m755 mk-s390-cdboot $(DESTDIR)/$(RUNTIMEDIR) ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f modlist snarffont mapshdr readmap geninitrdsz \
|
|
||||||
moduledeps.c moduleinfo.c .depend *.o
|
|
||||||
|
|
||||||
depend:
|
|
||||||
$(CPP) -M $(RPMCFLAGS) *.c > .depend
|
|
||||||
|
|
||||||
ifeq (.depend,$(wildcard .depend))
|
|
||||||
include .depend
|
|
||||||
endif
|
|
@ -1,792 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# mk-images
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
# Stuff that we need
|
|
||||||
TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
|
|
||||||
GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
|
|
||||||
GENINITRDSZ=$IMGPATH/usr/lib/anaconda-runtime/geninitrdsz
|
|
||||||
MKS390CDBOOT=$IMGPATH/usr/lib/anaconda-runtime/mk-s390-cdboot
|
|
||||||
GENMODINFO=$IMGPATH/usr/lib/anaconda-runtime/genmodinfo
|
|
||||||
KEYMAPS=$TMPDIR/keymaps-$BUILDARCH.$$
|
|
||||||
SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${BASEARCH}.gz
|
|
||||||
MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
|
|
||||||
MODINFO=$TMPDIR/modinfo-$BUILDARCH.$$
|
|
||||||
LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader
|
|
||||||
BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot
|
|
||||||
LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table
|
|
||||||
PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
|
|
||||||
XDRIVERS=$IMGPATH/usr/share/hwdata/videoaliases
|
|
||||||
XDRIVERDESCS=$IMGPATH/usr/share/hwdata/videodrivers
|
|
||||||
|
|
||||||
REQUIREMENTS="$TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GENMODINFO
|
|
||||||
$LANGTABLE $GETKEYMAPS"
|
|
||||||
|
|
||||||
dieLater=
|
|
||||||
for n in $REQUIREMENTS; do
|
|
||||||
if [ ! -f $n ]; then
|
|
||||||
echo "$n doesn't exist"
|
|
||||||
dieLater=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for n in $BOOTDISKDIR; do
|
|
||||||
if [ ! -d $n ]; then
|
|
||||||
echo "$n doesn't exist"
|
|
||||||
dieLater=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$dieLater" ]; then exit 1; fi
|
|
||||||
|
|
||||||
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
|
|
||||||
# go ahead and create the keymaps so we only have to do it once
|
|
||||||
if [ -f $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH ]; then
|
|
||||||
echo "Found keymap override, using it"
|
|
||||||
cp $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH $KEYMAPS
|
|
||||||
else
|
|
||||||
echo "Running: $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH"
|
|
||||||
$GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
echo "Unable to create keymaps and thus can't create initrd."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
findPackage() {
|
|
||||||
name=$1
|
|
||||||
|
|
||||||
pkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" -c $yumconf --archlist=$KERNELARCH $name.$KERNELARCH)
|
|
||||||
if [ -n "$pkg" ]; then
|
|
||||||
echo $pkg
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
echo "cannot find package $name" >&2
|
|
||||||
}
|
|
||||||
|
|
||||||
rundepmod () {
|
|
||||||
where=$1
|
|
||||||
|
|
||||||
$FAKEARCH /sbin/depmod -a -F $KERNELROOT/boot/System.map-$version \
|
|
||||||
-b $where $version
|
|
||||||
}
|
|
||||||
|
|
||||||
# This loops to make sure it resolves dependencies of dependencies of...
|
|
||||||
resdeps () {
|
|
||||||
items="$*"
|
|
||||||
|
|
||||||
deplist=""
|
|
||||||
for item in $items ; do
|
|
||||||
deps=$(awk -F ':' "/$item.ko: / { print gensub(\".*/$item.ko: \",\"\",\"g\") }" $KERNELROOT/lib/modules/$version/modules.dep)
|
|
||||||
for dep in $deps ; do
|
|
||||||
depfile=${dep##*/}
|
|
||||||
depname=${dep%%.ko}
|
|
||||||
deplist="$deplist $depname"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
items=$(for n in $items $deplist; do echo $n; done | sort -u)
|
|
||||||
echo $items
|
|
||||||
}
|
|
||||||
|
|
||||||
expandModuleSet() {
|
|
||||||
SET=""
|
|
||||||
for name in $1; do
|
|
||||||
char=$(echo $name | cut -c1)
|
|
||||||
if [ $char = '=' ]; then
|
|
||||||
NAME=$(echo $name | cut -c2-)
|
|
||||||
SET="$SET $($MODLIST --modinfo-file $MODINFO $NAME)"
|
|
||||||
else
|
|
||||||
SET="$SET $name"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo $SET
|
|
||||||
}
|
|
||||||
|
|
||||||
makemoduletree() {
|
|
||||||
MMB_DIR=$1
|
|
||||||
MMB_MODULESET=$(resdeps $2)
|
|
||||||
|
|
||||||
mkdir -p $MMB_DIR/lib
|
|
||||||
mkdir -p $MMB_DIR/modules
|
|
||||||
mkdir -p $MMB_DIR/firmware
|
|
||||||
ln -snf ../modules $MMB_DIR/lib/modules
|
|
||||||
ln -snf ../firmware $MMB_DIR/lib/firmware
|
|
||||||
|
|
||||||
echo "Copying kernel modules..."
|
|
||||||
cp -a $KERNELROOT/lib/modules/* $MMB_DIR/lib/modules/
|
|
||||||
echo "Removing extraneous modules..."
|
|
||||||
find $MMB_DIR/lib/modules/ -name *.ko | while read module ; do
|
|
||||||
m=${module##*/}
|
|
||||||
modname=${m%%.ko}
|
|
||||||
echo $MMB_MODULESET | grep -wq $modname || {
|
|
||||||
rm -f $module
|
|
||||||
}
|
|
||||||
done
|
|
||||||
|
|
||||||
# Copy in driver firmware we want during installation. NOTE: This isn't
|
|
||||||
# the ideal solution, but we'll do this for now. What we really want is
|
|
||||||
# for the kernel modules to include a modinfo field that names the firmware
|
|
||||||
# file we should have. If we can get that it would make it even easier to
|
|
||||||
# push the kernel people to depend on the firmware packages in the kernel,
|
|
||||||
# but we have to take small steps first.
|
|
||||||
for module in $MODSET ; do
|
|
||||||
case $module in
|
|
||||||
ipw2100)
|
|
||||||
cp $KERNELROOT/lib/firmware/ipw2100* $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
ipw2200)
|
|
||||||
cp $KERNELROOT/lib/firmware/ipw2200* $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
iwl3945)
|
|
||||||
cp $KERNELROOT/lib/firmware/iwlwifi-3945* $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
iwl4965)
|
|
||||||
cp $KERNELROOT/lib/firmware/iwlwifi-4965* $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
atmel)
|
|
||||||
cp $KERNELROOT/lib/firmware/atmel_*.bin $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
zd1211rw)
|
|
||||||
cp -r $KERNELROOT/lib/firmware/zd1211 $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
qla2xxx)
|
|
||||||
cp $KERNELROOT/lib/firmware/ql* $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# clean up leftover cruft
|
|
||||||
find -H $MMB_DIR/lib/modules -type d -exec rmdir -f {} \; 2>/dev/null
|
|
||||||
$MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \
|
|
||||||
$MMB_MODULESET > $MMB_DIR/lib/modules/module-info
|
|
||||||
# compress modules
|
|
||||||
find -H $MMB_DIR/lib/modules -type f -name *.ko -exec gzip -9 {} \;
|
|
||||||
rundepmod $MMB_DIR
|
|
||||||
rm -f $MMB_DIR/lib/modules/*/modules.*map
|
|
||||||
rm -f $MMB_DIR/lib/modules/*/{build,source}
|
|
||||||
|
|
||||||
# create the pci.ids, from modules.alias and the X driver aliases
|
|
||||||
awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff Illegal Vendor ID") nextfile; }' < $PCIIDS | \
|
|
||||||
$TRIMPCIIDS $MMB_DIR/lib/modules/*/modules.alias $XDRIVERS/* > ../pci.ids
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
makeproductfile() {
|
|
||||||
root=$1
|
|
||||||
|
|
||||||
rm -f $root/.buildstamp
|
|
||||||
echo $IMAGEUUID > $root/.buildstamp
|
|
||||||
echo $PRODUCT >> $root/.buildstamp
|
|
||||||
echo $VERSION >> $root/.buildstamp
|
|
||||||
if [ -n "$BUGURL" ]; then
|
|
||||||
echo $BUGURL >> $root/.buildstamp
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
instbin() {
|
|
||||||
ROOT=$1
|
|
||||||
BIN=$2
|
|
||||||
DIR=$3
|
|
||||||
DEST=$4
|
|
||||||
|
|
||||||
install -s -m 755 $ROOT/$BIN $DIR/$DEST
|
|
||||||
get_dso_deps $ROOT "$BIN"
|
|
||||||
local DEPS="$DSO_DEPS"
|
|
||||||
mkdir -p $DIR/$LIBDIR
|
|
||||||
for x in $DEPS ; do
|
|
||||||
cp -Lfp $ROOT/$x $DIR/$LIBDIR
|
|
||||||
done
|
|
||||||
|
|
||||||
pushd $DIR/$LIBDIR
|
|
||||||
if [ -f ld-linux.so.2 ]; then
|
|
||||||
rm -f ld-linux.so.2
|
|
||||||
linker="$(ls -1 ld-*.*.*.so)"
|
|
||||||
found=$(echo $linker | wc -l)
|
|
||||||
if [ $found -ne 1 ]; then
|
|
||||||
echo "Found too many dynamic linkers:" >&2
|
|
||||||
echo $linker >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
ln -s $linker ld-linux.so.2
|
|
||||||
fi
|
|
||||||
popd
|
|
||||||
}
|
|
||||||
|
|
||||||
setupShellEnvironment() {
|
|
||||||
echo "tcp 6 TCP" > $MBD_DIR/etc/protocols
|
|
||||||
|
|
||||||
# PAM configuration
|
|
||||||
for i in pam_limits.so pam_env.so pam_unix.so pam_deny.so; do
|
|
||||||
cp -f $IMGPATH/$LIBDIR/security/$i $MBD_DIR/$LIBDIR/security
|
|
||||||
done
|
|
||||||
|
|
||||||
cp -f $IMGPATH/etc/pam.d/other $MBD_DIR/etc/pam.d
|
|
||||||
cat > $MBD_DIR/etc/pam.d/login << EOF
|
|
||||||
#%PAM-1.0
|
|
||||||
auth required pam_env.so
|
|
||||||
auth sufficient pam_unix.so likeauth nullok
|
|
||||||
auth required pam_deny.so
|
|
||||||
account required pam_unix.so
|
|
||||||
password sufficient pam_unix.so nullok use_authtok md5 shadow
|
|
||||||
password required pam_deny.so
|
|
||||||
session required pam_limits.so
|
|
||||||
session required pam_unix.so
|
|
||||||
EOF
|
|
||||||
cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/sshd
|
|
||||||
cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/remote
|
|
||||||
|
|
||||||
cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/
|
|
||||||
|
|
||||||
# key generation takes ages on s390, you really don't want this for every
|
|
||||||
# installation attempt. These are NOT the keys of the installed system!
|
|
||||||
mkdir -m 0700 -p $MBD_DIR/etc/ssh
|
|
||||||
echo -n "Generating SSH1 RSA host key: "
|
|
||||||
/usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \
|
|
||||||
-C '' -N '' >&/dev/null
|
|
||||||
echo
|
|
||||||
echo -n "Generating SSH2 RSA host key: "
|
|
||||||
/usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \
|
|
||||||
-C '' -N '' >&/dev/null
|
|
||||||
echo
|
|
||||||
echo -n "Generating SSH2 DSA host key: "
|
|
||||||
/usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \
|
|
||||||
-C '' -N '' >&/dev/null
|
|
||||||
echo
|
|
||||||
(cd $MBD_DIR/etc/ssh; \
|
|
||||||
chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
|
|
||||||
chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
|
|
||||||
|
|
||||||
|
|
||||||
cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
|
|
||||||
Port 22
|
|
||||||
HostKey /etc/ssh/ssh_host_key
|
|
||||||
HostKey /etc/ssh/ssh_host_rsa_key
|
|
||||||
HostKey /etc/ssh/ssh_host_dsa_key
|
|
||||||
PermitRootLogin yes
|
|
||||||
IgnoreRhosts yes
|
|
||||||
StrictModes yes
|
|
||||||
X11Forwarding yes
|
|
||||||
X11DisplayOffset 10
|
|
||||||
PrintMotd yes
|
|
||||||
XAuthLocation /sbin/xauth
|
|
||||||
KeepAlive yes
|
|
||||||
SyslogFacility AUTHPRIV
|
|
||||||
RSAAuthentication yes
|
|
||||||
PasswordAuthentication yes
|
|
||||||
PermitEmptyPasswords yes
|
|
||||||
PermitUserEnvironment yes
|
|
||||||
EOF
|
|
||||||
chmod 600 $MBD_DIR/etc/ssh/sshd_config
|
|
||||||
|
|
||||||
# copy in the binaries
|
|
||||||
instbin $IMGPATH /usr/bin/login $MBD_DIR /sbin/login
|
|
||||||
instbin $IMGPATH /usr/sbin/sshd $MBD_DIR /sbin/sshd
|
|
||||||
instbin $IMGPATH /usr/bin/busybox $MBD_DIR /sbin/busybox
|
|
||||||
|
|
||||||
# make some symlinks
|
|
||||||
(cd $MBD_DIR/sbin;
|
|
||||||
set $(./busybox 2>&1| awk '/^\t([[:alnum:]_\.\[]+,)+/' | sed 's/,//g' | sed 's/ +//');
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
if [ $1 != "busybox" -a $1 != "sh" ]; then
|
|
||||||
# if file doesnt already exist, link to busybox
|
|
||||||
if [ ! -f "$1" ]; then
|
|
||||||
ln -sf ./busybox $1
|
|
||||||
else
|
|
||||||
[ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done )
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
makeinitrd() {
|
|
||||||
EXTRAINITRDPATH=""
|
|
||||||
INITRDSIZE=""
|
|
||||||
KEEP=""
|
|
||||||
PADSIZE=""
|
|
||||||
LOADERBIN=""
|
|
||||||
INITRDMODULES=""
|
|
||||||
MYLANGTABLE=$LANGTABLE
|
|
||||||
MYLOADERTR=loader.tr
|
|
||||||
while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
|
|
||||||
if [ $1 = "--initrdto" ]; then
|
|
||||||
EXTRAINITRDPATH=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--keep" ]; then
|
|
||||||
KEEP=yes
|
|
||||||
shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--initrdsize" ]; then
|
|
||||||
INITRDSIZE=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--loaderbin" ]; then
|
|
||||||
LOADERBIN=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--modules" ]; then
|
|
||||||
INITRDMODULES=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Unknown option passed to makeinitrd"
|
|
||||||
exit 1
|
|
||||||
done
|
|
||||||
if [ -z "$LOADERBIN" ]; then
|
|
||||||
echo "no loader binary specified!" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -z "$INITRDMODULES" ]; then
|
|
||||||
echo "warning: no loader modules specified!" >&2
|
|
||||||
fi
|
|
||||||
if [ -z "$INITRDSIZE" ]; then
|
|
||||||
echo "I don't know how big to make the initrd image!" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
MBD_DIR=$TMPDIR/makebootdisk.dir.$$
|
|
||||||
MBD_FSIMAGE=$TMPDIR/makebootdisk.initrdimage.$$
|
|
||||||
MBD_BOOTTREE=$TMPDIR/makebootdisk.tree.$$
|
|
||||||
|
|
||||||
rm -rf $MBD_DIR $MBD_FSIMAGE
|
|
||||||
mkdir -p $MBD_DIR/modules
|
|
||||||
mkdir -p $MBD_DIR/sbin
|
|
||||||
mkdir -p $MBD_DIR/dev
|
|
||||||
mkdir -p $MBD_DIR/etc
|
|
||||||
mkdir -p $MBD_DIR/etc/udev/rules.d
|
|
||||||
mkdir -p $MBD_DIR/lib/udev/rules.d
|
|
||||||
mkdir -p $MBD_DIR/proc
|
|
||||||
mkdir -p $MBD_DIR/selinux
|
|
||||||
mkdir -p $MBD_DIR/sys
|
|
||||||
mkdir -p $MBD_DIR/etc/terminfo/{a,b,d,l,s,v,x}
|
|
||||||
mkdir -p $MBD_DIR/tmp
|
|
||||||
mkdir -p $MBD_DIR/usr/libexec
|
|
||||||
mkdir -p $MBD_DIR/usr/$LIBDIR/NetworkManager
|
|
||||||
mkdir -p $MBD_DIR/usr/share/dbus-1/system-services
|
|
||||||
mkdir -p $MBD_DIR/var/cache/hald
|
|
||||||
mkdir -p $MBD_DIR/var/lib/dbus
|
|
||||||
mkdir -p $MBD_DIR/var/lib/dhclient
|
|
||||||
mkdir -p $MBD_DIR/var/lock/rpm
|
|
||||||
mkdir -p $MBD_DIR/var/run
|
|
||||||
mkdir -p $MBD_DIR/var/run/dbus
|
|
||||||
mkdir -p $MBD_DIR/var/run/hald
|
|
||||||
mkdir -p $MBD_DIR/var/run/NetworkManager
|
|
||||||
mkdir -p $MBD_DIR/etc/dbus-1/system.d
|
|
||||||
mkdir -p $MBD_DIR/etc/modprobe.d
|
|
||||||
mkdir -p $MBD_DIR/etc/NetworkManager/dispatcher.d
|
|
||||||
mkdir -p $MBD_DIR/$LIBDIR/dbus-1
|
|
||||||
mkdir -p $MBD_DIR/etc/sysconfig/network-scripts
|
|
||||||
mkdir -p $MBD_DIR/usr/share/PolicyKit/policy
|
|
||||||
mkdir -p $MBD_DIR/etc/PolicyKit
|
|
||||||
mkdir -p $MBD_DIR/var/lib/misc
|
|
||||||
mkdir -p $MBD_DIR/etc/hal/fdi
|
|
||||||
mkdir -p $MBD_DIR/usr/share/hal/fdi
|
|
||||||
mkdir -p $MBD_DIR/usr/share/hwdata
|
|
||||||
mkdir -p $MBD_DIR/etc/rc.d/init.d
|
|
||||||
mkdir -p $MBD_DIR/usr/sbin
|
|
||||||
mkdir -p $MBD_DIR/var/run/wpa_supplicant
|
|
||||||
|
|
||||||
if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
|
|
||||||
mkdir -m 111 -p $MBD_DIR/var/empty/sshd
|
|
||||||
mkdir -p $MBD_DIR/etc/{pam.d,security}
|
|
||||||
mkdir -p $MBD_DIR/$LIBDIR/security
|
|
||||||
cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
|
|
||||||
ln -s /tmp $MBD_DIR/var/state/xkb
|
|
||||||
cp $IMGPATH/usr/bin/xauth $MBD_DIR/sbin/xauth
|
|
||||||
cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$INITRDMODULES" ]; then
|
|
||||||
MODSET=`expandModuleSet "$INITRDMODULES"`
|
|
||||||
makemoduletree $MBD_DIR "$MODSET"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# set up the arch bits
|
|
||||||
echo $arch > $MBD_DIR/etc/arch
|
|
||||||
|
|
||||||
echo "Setting up arch bits"
|
|
||||||
instbin $IMGPATH ${LOADERBINDIR##$IMGPATH}/$LOADERBIN $MBD_DIR /sbin/loader
|
|
||||||
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
|
|
||||||
instbin $IMGPATH ${LOADERBINDIR##$IMGPATH}/init $MBD_DIR /sbin/init
|
|
||||||
ln -s ./init $MBD_DIR/sbin/reboot
|
|
||||||
ln -s ./init $MBD_DIR/sbin/halt
|
|
||||||
ln -s ./init $MBD_DIR/sbin/poweroff
|
|
||||||
else
|
|
||||||
instbin $IMGPATH ${LOADERBINDIR##IMGPATH}/shutdown $MBD_DIR /sbin/shutdown
|
|
||||||
instbin $IMGPATH /usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR /sbin/init
|
|
||||||
instbin $IMGPATH /usr/sbin/dasdfmt $MBD_DIR /sbin/dasdfmt
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
|
|
||||||
install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz
|
|
||||||
install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz
|
|
||||||
fi
|
|
||||||
install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
|
|
||||||
install -m 644 $IMGPATH/etc/passwd $MBD_DIR/etc/passwd
|
|
||||||
install -m 644 $IMGPATH/etc/group $MBD_DIR/etc/group
|
|
||||||
install -m 644 $IMGPATH/etc/nsswitch.conf $MBD_DIR/etc/nsswitch.conf
|
|
||||||
|
|
||||||
instbin $IMGPATH /usr/bin/mount $MBD_DIR /sbin/mount
|
|
||||||
instbin $IMGPATH /usr/sbin/mount.nfs $MBD_DIR /sbin/mount.nfs
|
|
||||||
instbin $IMGPATH /usr/bin/umount $MBD_DIR /sbin/umount
|
|
||||||
ln -s mount.nfs $MBD_DIR/sbin/umount.nfs
|
|
||||||
|
|
||||||
instbin $IMGPATH /usr/sbin/udevd $MBD_DIR /sbin/udevd
|
|
||||||
instbin $IMGPATH /usr/sbin/udevadm $MBD_DIR /sbin/udevadm
|
|
||||||
instbin $IMGPATH /usr/bin/udevinfo $MBD_DIR /sbin/udevinfo
|
|
||||||
ln -s udevadm $MBD_DIR/sbin/udevsettle
|
|
||||||
|
|
||||||
instbin $IMGPATH /usr/bin/bash $MBD_DIR /sbin/bash
|
|
||||||
( cd $MBD_DIR/sbin ; ln -sf bash sh )
|
|
||||||
instbin $IMGPATH /usr/sbin/consoletype $MBD_DIR /sbin/consoletype
|
|
||||||
instbin $IMGPATH /usr/bin/logger $MBD_DIR /sbin/logger
|
|
||||||
|
|
||||||
( cd $IMGPATH/etc/rc.d/init.d
|
|
||||||
cp -a functions $MBD_DIR/etc/rc.d/init.d
|
|
||||||
)
|
|
||||||
|
|
||||||
( cd $IMGPATH/etc/sysconfig/network-scripts
|
|
||||||
cp -a network-functions $MBD_DIR/etc/sysconfig/network-scripts
|
|
||||||
cp -a network-functions-ipv6 $MBD_DIR/etc/sysconfig/network-scripts
|
|
||||||
)
|
|
||||||
|
|
||||||
( cd $MBD_DIR/etc ; ln -sf /etc/rc.d/init.d init.d )
|
|
||||||
|
|
||||||
# DHCP and DHCPv6 client daemons and support programs
|
|
||||||
instbin $IMGPATH /usr/sbin/dhclient $MBD_DIR /sbin/dhclient
|
|
||||||
cp -a $IMGPATH/usr/sbin/dhclient-script $MBD_DIR/sbin/dhclient-script
|
|
||||||
chmod 0755 $MBD_DIR/sbin/dhclient-script
|
|
||||||
instbin $IMGPATH /usr/sbin/dhcp6c $MBD_DIR /sbin/dhcp6c
|
|
||||||
instbin $IMGPATH /usr/sbin/arping $MBD_DIR /sbin/arping
|
|
||||||
instbin $IMGPATH /usr/sbin/ifconfig $MBD_DIR /sbin/ifconfig
|
|
||||||
instbin $IMGPATH /usr/sbin/ip $MBD_DIR /sbin/ip
|
|
||||||
touch $MBD_DIR/etc/resolv.conf
|
|
||||||
|
|
||||||
# hwdata
|
|
||||||
cp -a $IMGPATH/usr/share/hwdata/pci.ids $MBD_DIR/usr/share/hwdata/pci.ids
|
|
||||||
cp -a $IMGPATH/usr/share/hwdata/usb.ids $MBD_DIR/usr/share/hwdata/usb.ids
|
|
||||||
|
|
||||||
# hal
|
|
||||||
instbin $IMGPATH /usr/sbin/hald $MBD_DIR /sbin/hald
|
|
||||||
( cd $IMGPATH/usr/libexec
|
|
||||||
for f in hald-runner hald-generate-fdi-cache hal*storage* ; do
|
|
||||||
instbin $IMGPATH /usr/libexec/$f $MBD_DIR /usr/libexec/$f
|
|
||||||
done
|
|
||||||
)
|
|
||||||
touch $MBD_DIR/var/run/hald.acl-list
|
|
||||||
cp -a $IMGPATH/usr/share/hal/fdi/* $MBD_DIR/usr/share/hal/fdi
|
|
||||||
cp -a $IMGPATH/etc/hal/fdi/* $MBD_DIR/etc/hal/fdi
|
|
||||||
cp -a $IMGPATH/etc/dbus-1/system.d/hal.conf $MBD_DIR/etc/dbus-1/system.d
|
|
||||||
|
|
||||||
# PolicyKit
|
|
||||||
( cd $IMGPATH/etc/PolicyKit
|
|
||||||
cp -a PolicyKit.conf $MBD_DIR/etc/PolicyKit
|
|
||||||
)
|
|
||||||
( cd $IMGPATH/usr/share/dbus-1/system-services
|
|
||||||
cp -a org.freedesktop.PolicyKit.service $MBD_DIR/usr/share/dbus-1/system-services
|
|
||||||
)
|
|
||||||
( cd $IMGPATH/usr/share/PolicyKit/policy
|
|
||||||
cp -a org.freedesktop.policykit.policy $MBD_DIR/usr/share/PolicyKit/policy
|
|
||||||
)
|
|
||||||
( cd $IMGPATH/var/lib/misc
|
|
||||||
cp -a PolicyKit.reload $MBD_DIR/var/lib/misc
|
|
||||||
)
|
|
||||||
|
|
||||||
# dbus
|
|
||||||
instbin $IMGPATH /usr/bin/dbus-uuidgen $MBD_DIR /sbin/dbus-uuidgen
|
|
||||||
instbin $IMGPATH /usr/bin/dbus-daemon $MBD_DIR /sbin/dbus-daemon
|
|
||||||
cp -a $IMGPATH/etc/dbus-1/system.conf $MBD_DIR/etc/dbus-1/system.conf
|
|
||||||
cp -a $IMGPATH/$LIBDIR/dbus-1/dbus-daemon-launch-helper $MBD_DIR/$LIBDIR/dbus-1
|
|
||||||
chown root:dbus $MBD_DIR/$LIBDIR/dbus-1/dbus-daemon-launch-helper
|
|
||||||
chmod 04750 $MBD_DIR/$LIBDIR/dbus-1/dbus-daemon-launch-helper
|
|
||||||
|
|
||||||
# wpa_supplicant
|
|
||||||
instbin $IMGPATH /usr/sbin/wpa_passphrase $MBD_DIR /usr/sbin/wpa_passphrase
|
|
||||||
instbin $IMGPATH /usr/sbin/wpa_supplicant $MBD_DIR /usr/sbin/wpa_supplicant
|
|
||||||
cp -a $IMGPATH/etc/dbus-1/system.d/wpa_supplicant.conf $MBD_DIR/etc/dbus-1/system.d
|
|
||||||
cp -a $IMGPATH/etc/wpa_supplicant/wpa_supplicant.conf $MBD_DIR/etc/wpa_supplicant
|
|
||||||
( cd $IMGPATH/usr/share/dbus-1/system-services
|
|
||||||
cp -a fi.epitest.hostap.WPASupplicant.service $MBD_DIR/usr/share/dbus-1/system-services
|
|
||||||
)
|
|
||||||
|
|
||||||
# NetworkManager
|
|
||||||
instbin $IMGPATH /usr/sbin/NetworkManager $MBD_DIR /usr/sbin/NetworkManager
|
|
||||||
instbin $IMGPATH /usr/sbin/nm-system-settings $MBD_DIR /usr/sbin/nm-system-settings
|
|
||||||
cp -a $IMGPATH/etc/dbus-1/system.d/nm-*.conf $MBD_DIR/etc/dbus-1/system.d
|
|
||||||
cp -a $IMGPATH/etc/dbus-1/system.d/NetworkManager.conf $MBD_DIR/etc/dbus-1/system.d
|
|
||||||
cp -a $IMGPATH/etc/NetworkManager/nm-system-settings.conf $MBD_DIR/etc/NetworkManager
|
|
||||||
instbin $IMGPATH /usr/$LIBDIR/NetworkManager/libnm-settings-plugin-ifcfg-fedora.so \
|
|
||||||
$MBD_DIR /usr/$LIBDIR/NetworkManager/libnm-settings-plugin-ifcfg-fedora.so
|
|
||||||
( cd $IMGPATH/usr/libexec
|
|
||||||
for f in nm-* ; do
|
|
||||||
instbin $IMGPATH /usr/libexec/$f $MBD_DIR /usr/libexec/$f
|
|
||||||
done
|
|
||||||
)
|
|
||||||
( cd $IMGPATH/usr/share/dbus-1/system-services
|
|
||||||
cp -a org.freedesktop.NetworkManagerSystemSettings.service $MBD_DIR/usr/share/dbus-1/system-services
|
|
||||||
cp -a org.freedesktop.nm_dispatcher.service $MBD_DIR/usr/share/dbus-1/system-services
|
|
||||||
)
|
|
||||||
|
|
||||||
# Indirect dependencies
|
|
||||||
install -m 755 $IMGPATH/$LIBDIR/libfreebl3.so $MBD_DIR/$LIBDIR/
|
|
||||||
install -m 755 $IMGPATH/$LIBDIR/libsoftokn3.so $MBD_DIR/$LIBDIR/
|
|
||||||
install -m 755 $IMGPATH/usr/$LIBDIR/libsqlite3.so.0 $MBD_DIR/usr/$LIBDIR/
|
|
||||||
install -m 755 $IMGPATH/$LIBDIR/libnss_dns.so.2 $MBD_DIR/$LIBDIR/
|
|
||||||
install -m 755 $IMGPATH/$LIBDIR/libnss_files.so.2 $MBD_DIR/$LIBDIR/
|
|
||||||
install -m 755 $IMGPATH/$LIBDIR/libgcc_s.so.1 $MBD_DIR/$LIBDIR/
|
|
||||||
|
|
||||||
install -m 644 $IMGPATH/etc/udev/udev.conf $MBD_DIR/etc/udev/udev.conf
|
|
||||||
for i in $IMGPATH/lib/udev/rules.d/*.rules ; do
|
|
||||||
install -m 644 $i $MBD_DIR/lib/udev/rules.d/${i##*/}
|
|
||||||
done
|
|
||||||
for i in $IMGPATH/etc/udev/rules.d/*.rules ; do
|
|
||||||
install -m 644 $i $MBD_DIR/etc/udev/rules.d/${i##*/}
|
|
||||||
done
|
|
||||||
for i in $IMGPATH/lib/udev/*; do
|
|
||||||
if [ -f $i ]; then install -m 755 $i $MBD_DIR/lib/udev/${i##*/}; fi
|
|
||||||
done
|
|
||||||
rm -f $MBD_DIR/lib/udev/rules.d/*persistent*
|
|
||||||
rm -f $MBD_DIR/lib/udev/rules.d/*generator*
|
|
||||||
|
|
||||||
install -m 644 $LOADERBINDIR/$MYLOADERTR $MBD_DIR/etc/loader.tr
|
|
||||||
for i in a/ansi d/dumb l/linux s/screen v/vt100 v/vt100-nav v/vt102 x/xterm x/xterm-color g/gnome ; do
|
|
||||||
[ -f $IMGPATH/usr/share/terminfo/$i ] && \
|
|
||||||
install -m 644 $IMGPATH/usr/share/terminfo/$i $MBD_DIR/etc/terminfo/$i
|
|
||||||
done
|
|
||||||
|
|
||||||
makeproductfile $MBD_DIR
|
|
||||||
|
|
||||||
for n in insmod rmmod modprobe; do
|
|
||||||
instbin $IMGPATH /usr/sbin/$n $MBD_DIR /sbin/$n
|
|
||||||
done
|
|
||||||
|
|
||||||
ln -s /sbin/init $MBD_DIR/init
|
|
||||||
ln -s /proc/mounts $MBD_DIR/etc/mtab
|
|
||||||
ln -s sbin $MBD_DIR/bin
|
|
||||||
mkdir -p $MBD_DIR/var/lib
|
|
||||||
ln -s ../../tmp $MBD_DIR/var/lib/xkb
|
|
||||||
|
|
||||||
# s390/s390x need sshd setup
|
|
||||||
if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
|
|
||||||
setupShellEnvironment
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat > $MBD_DIR/.profile <<EOF
|
|
||||||
PATH=/bin:/usr/bin:/usr/sbin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
|
|
||||||
export PATH
|
|
||||||
EOF
|
|
||||||
|
|
||||||
rm -f $MBD_FSIMAGE
|
|
||||||
(cd $MBD_DIR; find . |cpio --quiet -c -o) |gzip -9 > $MBD_FSIMAGE
|
|
||||||
|
|
||||||
size=$(du $MBD_FSIMAGE | awk '{ print $1 }')
|
|
||||||
|
|
||||||
echo "Wrote $MBD_FSIMAGE (${size}k compressed)"
|
|
||||||
|
|
||||||
if [ -n "$EXTRAINITRDPATH" ]; then
|
|
||||||
mkdir -p `dirname $EXTRAINITRDPATH`
|
|
||||||
cp -a $MBD_FSIMAGE $EXTRAINITRDPATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$KEEP" ]; then
|
|
||||||
rm -rf $MBD_FSIMAGE $MBD_BOOTTREE
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
makemainimage () {
|
|
||||||
imagename=$1
|
|
||||||
type=$2
|
|
||||||
mmi_tmpimage=$TMPDIR/instimage.img.$$
|
|
||||||
mmi_mntpoint=$TMPDIR/instimage.mnt.$$
|
|
||||||
|
|
||||||
rm -rf $mmi_tmpimage $mmi_mntpoint
|
|
||||||
mkdir $mmi_mntpoint
|
|
||||||
|
|
||||||
if [ $type = "ext2" ]; then
|
|
||||||
SIZE=$(du -sk $IMGPATH | awk '{ print int($1 * 1.1) }')
|
|
||||||
if [ -d $IMGPATH/usr/lib/anaconda-runtime ]; then
|
|
||||||
ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }')
|
|
||||||
SIZE=$(expr $SIZE - $ERROR)
|
|
||||||
fi
|
|
||||||
if [ -d $IMGPATH/usr/lib/syslinux ]; then
|
|
||||||
ERROR=$(du -sk $IMGPATH/usr/lib/syslinux | awk '{ print $1 }')
|
|
||||||
SIZE=$(expr $SIZE - $ERROR)
|
|
||||||
fi
|
|
||||||
dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null
|
|
||||||
mke2fs -q -F $mmi_tmpimage > /dev/null
|
|
||||||
tune2fs -c0 -i0 $mmi_tmpimage >/dev/null
|
|
||||||
mount -o loop $mmi_tmpimage $mmi_mntpoint
|
|
||||||
|
|
||||||
(cd $IMGPATH; find . |
|
|
||||||
fgrep -v "./usr/lib/anaconda-runtime" |
|
|
||||||
fgrep -v "./usr/lib/syslinux"
|
|
||||||
cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
|
|
||||||
makeproductfile $mmi_mntpoint
|
|
||||||
umount $mmi_mntpoint
|
|
||||||
rmdir $mmi_mntpoint
|
|
||||||
elif [ $type = "squashfs" ]; then
|
|
||||||
makeproductfile $IMGPATH
|
|
||||||
echo "Running mksquashfs $IMGPATH $mmi_tmpimage -all-root -no-fragments -no-progress"
|
|
||||||
mksquashfs $IMGPATH $mmi_tmpimage -all-root -no-fragments -no-progress
|
|
||||||
chmod 0644 $mmi_tmpimage
|
|
||||||
SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
|
|
||||||
elif [ $type = "cramfs" ]; then
|
|
||||||
makeproductfile $IMGPATH
|
|
||||||
echo "Running mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage"
|
|
||||||
mkfs.cramfs $CRAMBS $IMGPATH $mmi_tmpimage
|
|
||||||
SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp $mmi_tmpimage $INSTIMGPATH/${imagename}.img
|
|
||||||
chmod 644 $INSTIMGPATH/${imagename}.img
|
|
||||||
|
|
||||||
echo "Wrote $INSTIMGPATH/${imagename}.img (${SIZE}k)"
|
|
||||||
relpath=${INSTIMGPATH#$TOPDESTPATH/}
|
|
||||||
echo "mainimage = ${relpath}/${imagename}.img" >> $TOPDESTPATH/.treeinfo
|
|
||||||
|
|
||||||
rm $mmi_tmpimage
|
|
||||||
}
|
|
||||||
|
|
||||||
makeSecondStage() {
|
|
||||||
echo "[stage2]" >> $TOPDESTPATH/.treeinfo
|
|
||||||
echo "Building install.img"
|
|
||||||
makemainimage "install" "squashfs"
|
|
||||||
[ $? = 0 ] || exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
doPostImages() {
|
|
||||||
/bin/true
|
|
||||||
}
|
|
||||||
|
|
||||||
# this gets overloaded if we're on an EFI-capable arch (... with grub)
|
|
||||||
makeEfiImages()
|
|
||||||
{
|
|
||||||
/bin/true
|
|
||||||
}
|
|
||||||
|
|
||||||
# source the architecture specific mk-images file so we can call functions
|
|
||||||
# in it
|
|
||||||
if [ ${BUILDARCH} = s390x ]; then
|
|
||||||
# FIXME: this is a bad hack for s390, but better than copying for now
|
|
||||||
source $TOPDIR/mk-images.s390
|
|
||||||
elif [ ${BUILDARCH} = ppc64 ]; then
|
|
||||||
# ... and similar for ppc64
|
|
||||||
source $TOPDIR/mk-images.ppc
|
|
||||||
elif [ ${BUILDARCH} = "x86_64" -o ${BUILDARCH} = "i386" ]; then
|
|
||||||
source $TOPDIR/mk-images.x86
|
|
||||||
source $TOPDIR/mk-images.efi
|
|
||||||
else
|
|
||||||
source $TOPDIR/mk-images.${BUILDARCH}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the kernel, unpack it, and verify it
|
|
||||||
kerneltags="kernel"
|
|
||||||
efiarch=""
|
|
||||||
arches="$BUILDARCH"
|
|
||||||
if [ "$BUILDARCH" = "ppc" ]; then
|
|
||||||
arches="ppc64 ppc"
|
|
||||||
elif [ "$BUILDARCH" = "i386" ]; then
|
|
||||||
arches="i586"
|
|
||||||
efiarch="ia32"
|
|
||||||
kerneltags="kernel kernel-PAE"
|
|
||||||
kernelxen="kernel-PAE"
|
|
||||||
elif [ "$BUILDARCH" = "x86_64" ]; then
|
|
||||||
kerneltags="kernel"
|
|
||||||
efiarch="x64"
|
|
||||||
elif [ "$BUILDARCH" = "ia64" ]; then
|
|
||||||
kerneltags="kernel"
|
|
||||||
efiarch="ia64"
|
|
||||||
fi
|
|
||||||
|
|
||||||
foundakernel=""
|
|
||||||
for KERNELARCH in $arches; do
|
|
||||||
for kernelvers in $kerneltags; do
|
|
||||||
kpackage=$(findPackage $kernelvers)
|
|
||||||
if [ "$KERNELARCH" = "i586" -a -z "$kpackage" ]; then
|
|
||||||
echo "No i586 kernel, trying i686..."
|
|
||||||
KERNELARCH="i686"
|
|
||||||
kpackage=$(findPackage $kernelvers)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$kpackage" ]; then
|
|
||||||
echo "Unable to find kernel package $kernelvers"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
yumdownloader -c $yumconf --archlist=$KERNELARCH $kpackage
|
|
||||||
kpackage="$kpackage.rpm"
|
|
||||||
if [ ! -f "$kpackage" ]; then
|
|
||||||
echo "kernel ($kernelvers) doesn't exist for $KERNELARCH. skipping"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
KERNELROOT=$KERNELBASE/$KERNELARCH
|
|
||||||
mkdir -p $KERNELROOT
|
|
||||||
|
|
||||||
foundakernel="yes"
|
|
||||||
|
|
||||||
if [ "$BUILDARCH" = "ia64" ]; then
|
|
||||||
vmlinuz=$(rpm --nodigest --nosignature -qpl $kpackage |grep ^/boot/efi/EFI/redhat/vmlinuz | head -n 1)
|
|
||||||
version=${vmlinuz##/boot/efi/EFI/redhat/vmlinuz-}
|
|
||||||
else
|
|
||||||
vmlinuz=$(rpm --nodigest --nosignature -qpl $kpackage |grep ^/boot/vmlinuz | head -n 1)
|
|
||||||
version=${vmlinuz##/boot/vmlinuz-}
|
|
||||||
fi
|
|
||||||
arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage)
|
|
||||||
|
|
||||||
rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
|
|
||||||
rm -f $kpackage
|
|
||||||
# expand out any available firmware too
|
|
||||||
for p in $(repoquery -c $yumconf '*firmware*') ; do yumdownloader -c $yumconf $p ; rpm2cpio *firmware*.rpm | (cd $KERNELROOT; cpio --quiet -iumd) ; rm -f *firmware*.rpm ; done
|
|
||||||
|
|
||||||
if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
|
|
||||||
echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version" ]; then
|
|
||||||
echo "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version does not exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
allmods=$(find $KERNELROOT/lib/modules/$version -name *.ko)
|
|
||||||
|
|
||||||
rundepmod $KERNELROOT
|
|
||||||
$GENMODINFO $KERNELROOT/lib/modules/$version > $MODINFO
|
|
||||||
|
|
||||||
# make the boot images
|
|
||||||
makeBootImages
|
|
||||||
|
|
||||||
makeEfiImages $yumconf
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$foundakernel" ]; then
|
|
||||||
makeSecondStage
|
|
||||||
rm -rf $KERNELBASE
|
|
||||||
fi
|
|
||||||
|
|
||||||
doPostImages
|
|
||||||
|
|
||||||
cd $TOPDIR
|
|
@ -1,131 +0,0 @@
|
|||||||
#
|
|
||||||
# mk-images.alpha
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
INITRDMODS="tgafb crc32 $INITRDMODS"
|
|
||||||
|
|
||||||
###FSMODS="msdos vfat ext3 reiserfs jfs xfs"
|
|
||||||
###IDEMODS="cdrom ide-cd"
|
|
||||||
###SCSIMODS="cdrom scsi_mod sd_mod sg sr_mod st"
|
|
||||||
###USBMODS="ohci-hcd uhci-hcd hid usb-storage sd_mod sr_mod"
|
|
||||||
###LATEUSBMODS="mousedev usb-storage"
|
|
||||||
###SECSTAGE="md raid0 raid1 raid5 dm-mod srm_env $FSMODS $IDEMODS $SCSIMODS $LATEUSBMODS"
|
|
||||||
NETMODULES="e100 tulip 8139too tulip 3c509 3c59x dl2k eepro epic100 ewrk3 hamachi natsemi ne2k-pci ns83820 starfire yellowfin de4x5 depca acenic tg3"
|
|
||||||
|
|
||||||
SCSIMODULES="$SCSIMODS qlogicisp DAC960 cpqfc BusLogic 3w-xxxx dmx3191d dpt_i2o megaraid ncr53c8xx sym53c8xx qlogicfc qla2x00 qla1280 cciss cpqarray aic7xxx aha1740 megaraid"
|
|
||||||
|
|
||||||
###ISOMODULES="ehci-hcd ieee1394 ohci1394 sbp2"
|
|
||||||
|
|
||||||
prepareBootImage() {
|
|
||||||
echo "ALPHA: prepareBootImage() is called"
|
|
||||||
dd if=/dev/zero of=$MBD_TMPIMAGE bs=1k count=$BOOTDISKSIZE 2>/dev/null
|
|
||||||
echo y | /sbin/mke2fs -b 1024 -r 0 -O none $MBD_TMPIMAGE > /dev/null 2>/dev/null
|
|
||||||
LODEV=`findloopdevice $MBD_TMPIMAGE`
|
|
||||||
e2writeboot $LODEV $BOOTDISKDIR/bootlx
|
|
||||||
mount $LODEV -t ext2 $MBD_BOOTTREE
|
|
||||||
mkdir -p $MBD_BOOTTREE/etc
|
|
||||||
cat > $MBD_BOOTTREE/etc/aboot.conf <<EOF
|
|
||||||
#
|
|
||||||
# Fedora Linux aboot configuration options:
|
|
||||||
#
|
|
||||||
# 0 - Boot the Fedora Linux installer using a 2.6 kernel
|
|
||||||
# 1 - Boot the Fedora Linux installer in non graphical mode
|
|
||||||
# 2 - Boot the Fedora Linux installer in text only mode on ttyS0
|
|
||||||
# for installation control via the serial port
|
|
||||||
# 3 - Boot in rescue mode
|
|
||||||
#
|
|
||||||
0:vmlinux.gz load_ramdisk=1 prompt_ramdisk=1 console=tty0 root=/dev/fd0
|
|
||||||
1:vmlinux.gz load_ramdisk=1 prompt_ramdisk=1 console=tty0 text root=/dev/fd0
|
|
||||||
2:vmlinux.gz load_ramdisk=1 prompt_ramdisk=1 console=ttyS0 text root=/dev/fd0
|
|
||||||
3:vmlinux.gz load_ramdisk=1 prompt_ramdisk=1 console=tty0 rescue root=/dev/fd0
|
|
||||||
|
|
||||||
EOF
|
|
||||||
cat > $MBD_BOOTTREE/etc/milo.conf <<EOF
|
|
||||||
image=/vmlinux.gz
|
|
||||||
label=linux
|
|
||||||
root=/dev/fd0
|
|
||||||
append="load_ramdisk=1 prompt_ramdisk=1"
|
|
||||||
EOF
|
|
||||||
zcat $KERNELROOT/boot/vmlinuz-* | gzip -9 > $MBD_BOOTTREE/vmlinux.gz
|
|
||||||
umount $LODEV
|
|
||||||
losetup -d $LODEV
|
|
||||||
mount -o loop -t ext2 $MBD_TMPIMAGE $MBD_BOOTTREE
|
|
||||||
}
|
|
||||||
|
|
||||||
makeBootImages() {
|
|
||||||
echo "Building boot images for kernel $kernelvers"
|
|
||||||
|
|
||||||
mkdir -p $TOPDESTPATH/boot
|
|
||||||
cp $BOOTDISKDIR/bootlx $TOPDESTPATH/boot
|
|
||||||
|
|
||||||
mkdir -p $TOPDESTPATH/etc
|
|
||||||
cat > $TOPDESTPATH/etc/aboot.conf <<EOF
|
|
||||||
#
|
|
||||||
# Fedora Linux aboot configuration options:
|
|
||||||
#
|
|
||||||
# 0 - Boot the Fedora Linux installer using a 2.6 kernel
|
|
||||||
# 1 - Boot the Fedora Linux installer with kernel messages sent to ttyS0
|
|
||||||
# 2 - Boot the Fedora Linux installer in text only mode
|
|
||||||
# 3 - Boot the Fedora Linux installer in text only rescue mode
|
|
||||||
#
|
|
||||||
0:/kernels/vmlinux.gz initrd=/images/initrd.img
|
|
||||||
1:/kernels/vmlinux.gz initrd=/images/initrd.img console=ttyS0
|
|
||||||
2:/kernels/vmlinux.gz initrd=/images/initrd.img text
|
|
||||||
3:/kernels/vmlinux.gz initrd=/images/initrd.img rescue
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
mkdir -p $TOPDESTPATH/kernels
|
|
||||||
cp $KERNELROOT/boot/vmlinuz-* $TOPDESTPATH/kernels/vmlinux.gz
|
|
||||||
|
|
||||||
makeinitrd --initrdto $TOPDESTPATH/images/ramdisk.img \
|
|
||||||
--initrdsize 8192 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$NETMODULES $SCSIMODULES"
|
|
||||||
|
|
||||||
echo "List of init modules: $INITRDMODS"
|
|
||||||
|
|
||||||
makeinitrd --initrdto $TOPDESTPATH/images/initrd.img \
|
|
||||||
--initrdsize 8192 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$INITRDMODS"
|
|
||||||
|
|
||||||
# makebootdisk --bootdisksize 4096 --kernelto $TOPDESTPATH/kernels/vmlinux.gz \
|
|
||||||
# --imagename generic.img
|
|
||||||
|
|
||||||
|
|
||||||
if [ -f $KERNELPATH/kernel-jensen-*.rpm ]; then
|
|
||||||
KJ_PKG=$KERNELPATH/kernel-jensen-*.rpm
|
|
||||||
KJ_DIR=/tmp/kernelj.dir.$$
|
|
||||||
mkdir -p $KJ_DIR
|
|
||||||
rpm2cpio $KJ_PKG | (cd $KJ_DIR; cpio --quiet -iumd ./boot/vmlinuz-*)
|
|
||||||
cp $KJ_DIR/boot/vmlinuz-* $TOPDESTPATH/kernels/vmlinuz.j
|
|
||||||
rm -rf $KJ_DIR
|
|
||||||
fi
|
|
||||||
|
|
||||||
# makedriverdisk --padsize 1440 "Supplemental Block Device Drivers" "drvblock" "$SCSIMODULES $EXTRASCSI +scsi"
|
|
||||||
# makedriverdisk --padsize 1440 "Supplemental Network Device Drivers" "drvnet" "$NETMODULES $EXTRANET +net"
|
|
||||||
}
|
|
||||||
|
|
||||||
#makeSecondStage() {
|
|
||||||
# makeinstimage "netstg" "$SECSTAGE $SCSIMODULES $IDEMODS =scsi"
|
|
||||||
# makeinstimage "hdstg" "$SECSTAGE $NETMODULES $IDEMODS =net"
|
|
||||||
# makemainmodules "$SECSTAGE $NETMODULES $SCSIMODULES $IDEMODS =scsi =net"
|
|
||||||
# makemainimage "install" "cramfs"
|
|
||||||
#}
|
|
||||||
|
|
@ -1,199 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# mk-images.efi
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
makeefibootdisk()
|
|
||||||
{
|
|
||||||
partimg=$1
|
|
||||||
target=$2
|
|
||||||
|
|
||||||
if [ ! -f $1 ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local partsize=$(ls -l $1 | awk '{ print $5; }')
|
|
||||||
local disksize=$((17408 + $partsize + 17408))
|
|
||||||
disksize=$(($disksize + $(($disksize % 512))))
|
|
||||||
local diskimg=$(mktemp /tmp/efidisk.img.XXXXXX)
|
|
||||||
dd if=/dev/zero of=$diskimg count=1 bs=$disksize
|
|
||||||
local loop=$(losetup -v -f $diskimg | awk '{ print $4 }')
|
|
||||||
dmsetup create efiboot$$ --table "0 $(($disksize / 512)) linear $loop 0"
|
|
||||||
parted --script /dev/mapper/efiboot$$ mklabel gpt unit b mkpart '"EFI System Partition"' fat32 17408 $((17408 + $partsize)) set 1 boot on
|
|
||||||
dd if=$partimg of=/dev/mapper/efiboot$$p1
|
|
||||||
dmsetup remove /dev/mapper/efiboot$$p1
|
|
||||||
dmsetup remove /dev/mapper/efiboot$$
|
|
||||||
losetup -d $loop
|
|
||||||
|
|
||||||
mv -v $diskimg $target
|
|
||||||
chmod a+r $target
|
|
||||||
}
|
|
||||||
|
|
||||||
#makeefibootimage required for EFI bootloader dosfs image
|
|
||||||
makeefibootimage() {
|
|
||||||
MBD_FILENAME=""
|
|
||||||
KERNELFILE=""
|
|
||||||
INITRDFILE=""
|
|
||||||
grubpkg=""
|
|
||||||
MBD_TMPIMAGE=${TMPDIR:-/tmp}/makebootdisk.image.$$
|
|
||||||
MBD_BOOTTREE=${TMPDIR:-/tmp}/makebootdisk.tree.$$
|
|
||||||
MBD_BOOTTREE_TMP=$MBD_BOOTTREE'_tmp'
|
|
||||||
while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
|
|
||||||
if [ $1 = "--kernel" ]; then
|
|
||||||
KERNELFILE=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--initrd" ]; then
|
|
||||||
INITRDFILE=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--imagename" ]; then
|
|
||||||
MBD_FILENAME=$IMAGEPATH/$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $1 = "--grubpkg" ]; then
|
|
||||||
grubpkg=$2
|
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Unknown option passed to makebootdisk"
|
|
||||||
exit 1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$MBD_FILENAME" ]; then
|
|
||||||
echo "No imagename passed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$KERNELFILE" ]; then
|
|
||||||
echo "No kernel file passed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$INITRDFILE" ]; then
|
|
||||||
echo "No initrd file passed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
MBD_FSIMAGE="$INITRDFILE"
|
|
||||||
|
|
||||||
mkdir -p $MBD_BOOTTREE
|
|
||||||
mkdir -p $MBD_BOOTTREE_TMP
|
|
||||||
rm -rf $MBD_BOOTTREE_TMP
|
|
||||||
mkdir -p $MBD_TMPIMAGE
|
|
||||||
|
|
||||||
# provided by the mk-image.$ARCH file
|
|
||||||
prepareEfiImage
|
|
||||||
|
|
||||||
left=$(df $MBD_BOOTTREE | tail -n1)
|
|
||||||
left=$(echo $left | awk '{print $4'})
|
|
||||||
|
|
||||||
umount $MBD_BOOTTREE
|
|
||||||
|
|
||||||
if [ -n "$EXTRAKERNELPATH" ]; then
|
|
||||||
mkdir -p `dirname $EXTRAKERNELPATH`
|
|
||||||
cp -f $KERNELROOT/$KERNELDIR/${KERNELNAME}-* $EXTRAKERNELPATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p `dirname $MBD_FILENAME`
|
|
||||||
rm -rf $MBD_TMPIMAGE $MBD_MNTPOINT $MBD_BOOTTREE
|
|
||||||
if [ -z "$INITRDFILE" ]; then
|
|
||||||
rm -f $MBD_FSIMAGE
|
|
||||||
fi
|
|
||||||
|
|
||||||
chmod a+r $MBD_FILENAME
|
|
||||||
echo "Wrote $MBD_FILENAME (${left}k free)"
|
|
||||||
}
|
|
||||||
|
|
||||||
# prepare and build an efiboot.img.
|
|
||||||
prepareEfiImage() {
|
|
||||||
prepareEfiTree || return 1
|
|
||||||
|
|
||||||
# dynamically calculate the size of the dosfs
|
|
||||||
BOOTDISKSIZE=$(du -kcs $MBD_BOOTTREE_TMP | tail -n1 | awk '{print $1}')
|
|
||||||
BOOTDISKSIZE=$(expr $BOOTDISKSIZE + 100)
|
|
||||||
echo "The size of the efiboot.img dosfs is $BOOTDISKSIZE"
|
|
||||||
mkdosfs -n ANACONDA -C $MBD_FILENAME $BOOTDISKSIZE >/dev/null
|
|
||||||
mount -o loop,shortname=winnt,umask=0077 -t vfat $MBD_FILENAME $MBD_BOOTTREE
|
|
||||||
cp -R $MBD_BOOTTREE_TMP/* $MBD_BOOTTREE
|
|
||||||
}
|
|
||||||
|
|
||||||
# prepare a directory with the kernel, initrd, and various message files
|
|
||||||
# used to populate the efi boot image
|
|
||||||
prepareEfiTree() {
|
|
||||||
mkdir -p $MBD_BOOTTREE_TMP/EFI/boot
|
|
||||||
|
|
||||||
cp -a $BOOTDISKDIR/* $MBD_BOOTTREE_TMP/EFI/boot/
|
|
||||||
cp $INITRDFILE $MBD_BOOTTREE_TMP/EFI/boot/initrd.img
|
|
||||||
cp $KERNELFILE $MBD_BOOTTREE_TMP/EFI/boot/vmlinuz
|
|
||||||
|
|
||||||
sed -i "s/@PRODUCT@/$PRODUCT/g" $MBD_BOOTTREE_TMP/EFI/boot/grub.conf
|
|
||||||
sed -i "s/@VERSION@/$VERSION/g" $MBD_BOOTTREE_TMP/EFI/boot/grub.conf
|
|
||||||
|
|
||||||
yumdownloader -c $yumconf $grubpkg
|
|
||||||
rpm2cpio $grubpkg.rpm | (cd $KERNELROOT; cpio --quiet -iumd)
|
|
||||||
cp $KERNELROOT/boot/efi/EFI/redhat/grub.efi $MBD_BOOTTREE_TMP/EFI/boot/grub.efi
|
|
||||||
|
|
||||||
# The first generation Mactel machines get the bootloader name wrong
|
|
||||||
# as per the spec. Awesome, guys.
|
|
||||||
if [ "$efiarch" == "ia32" ]; then
|
|
||||||
cp $MBD_BOOTTREE_TMP/EFI/boot/grub.efi $MBD_BOOTTREE_TMP/EFI/boot/boot.efi
|
|
||||||
cp $MBD_BOOTTREE_TMP/EFI/boot/grub.conf $MBD_BOOTTREE_TMP/EFI/boot/boot.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
mv $MBD_BOOTTREE_TMP/EFI/boot/grub.efi $MBD_BOOTTREE_TMP/EFI/boot/boot${efiarch}.efi
|
|
||||||
mv $MBD_BOOTTREE_TMP/EFI/boot/grub.conf $MBD_BOOTTREE_TMP/EFI/boot/boot${efiarch}.conf
|
|
||||||
|
|
||||||
artpkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" --whatprovides system-logos | grep -v generic-logos | head -1)
|
|
||||||
|
|
||||||
if [ -z "$artpkg" ]; then
|
|
||||||
argpkg="generic-logos"
|
|
||||||
fi
|
|
||||||
|
|
||||||
yumdownloader -c $yumconf $artpkg
|
|
||||||
rpm2cpio $artpkg.rpm | (cd $KERNELROOT; cpio --quiet -iumd)
|
|
||||||
cp $KERNELROOT/boot/grub/splash.xpm.gz $MBD_BOOTTREE_TMP/EFI/boot/splash.xpm.gz
|
|
||||||
}
|
|
||||||
|
|
||||||
makeEfiImages() {
|
|
||||||
yumconf="$1"
|
|
||||||
if [ "$kernelvers" != "$kernelxen" ]; then
|
|
||||||
local grubarch=${efiarch}
|
|
||||||
case ${efiarch} in
|
|
||||||
ia32) grubarch=i386 ;;
|
|
||||||
x64) grubarch=x86_64 ;;
|
|
||||||
esac
|
|
||||||
grubpkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" -c $yumconf grub.$grubarch)
|
|
||||||
if [ -z "$grubpkg" ]; then
|
|
||||||
echo "cannot find package grub.$grubarch" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
echo "Building efiboot.img for ${efiarch}/$KERNELARCH at $TOPDESTPATH/images/efiboot.img"
|
|
||||||
|
|
||||||
makeefibootimage \
|
|
||||||
--imagename pxeboot/efiboot.img \
|
|
||||||
--kernel $TOPDESTPATH/images/pxeboot/vmlinuz \
|
|
||||||
--initrd $TOPDESTPATH/images/pxeboot/initrd.img \
|
|
||||||
--grubpkg ${grubpkg}
|
|
||||||
local ret=$?
|
|
||||||
[ $ret -eq 0 ] || return $ret
|
|
||||||
|
|
||||||
makeefibootdisk $TOPDESTPATH/images/pxeboot/efiboot.img $TOPDESTPATH/images/efidisk.img
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
@ -1,171 +0,0 @@
|
|||||||
#
|
|
||||||
# mk-images.ppc
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
makeBootImages() {
|
|
||||||
echo "Building boot images for kernel $kernelvers"
|
|
||||||
FAKEARCH=""
|
|
||||||
|
|
||||||
if [ "$KERNELARCH" = "ppc64" ]; then
|
|
||||||
mkdir -p $TOPDESTPATH/ppc/ppc64
|
|
||||||
echo "Building $KERNELARCH initrd"
|
|
||||||
makeinitrd --initrdto $TOPDESTPATH/ppc/ppc64/ramdisk.image.gz \
|
|
||||||
--initrdsize 8192 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$INITRDMODS spufs viocd gpio_mdio"
|
|
||||||
|
|
||||||
cp $KERNELROOT/boot/vmlinuz-* $TOPDESTPATH/ppc/ppc64/vmlinuz
|
|
||||||
sed -e "s/%BITS%/64/" -e "s/%PRODUCT%/$PRODUCT/" -e "s/%VERSION%/$VERSION/" \
|
|
||||||
$BOOTDISKDIR/yaboot.conf.in > $TOPDESTPATH/ppc/ppc64/yaboot.conf
|
|
||||||
|
|
||||||
cat << __EOT__ >> $TOPDESTPATH/.treeinfo
|
|
||||||
[images-$KERNELARCH]
|
|
||||||
kernel = ppc/ppc64/vmlinuz
|
|
||||||
initrd = ppc/ppc64/ramdisk.image.gz
|
|
||||||
__EOT__
|
|
||||||
|
|
||||||
if [ -x $IMGPATH/usr/bin/mkzimage -a -r $IMGPATH/usr/share/ppc64-utils/zImage.stub ]; then
|
|
||||||
mkdir -p $TOPDESTPATH/images/netboot
|
|
||||||
pushd $TOPDESTPATH/ppc/ppc64
|
|
||||||
cp $IMGPATH/usr/share/ppc64-utils/zImage.lds $TOPDESTPATH/ppc/ppc64/zImage.lds
|
|
||||||
$IMGPATH/usr/bin/mkzimage $TOPDESTPATH/ppc/ppc64/vmlinuz no no $TOPDESTPATH/ppc/ppc64/ramdisk.image.gz $IMGPATH/usr/share/ppc64-utils/zImage.stub $TOPDESTPATH/images/netboot/ppc64.img
|
|
||||||
rmdir $TOPDESTPATH/images/netboot || :
|
|
||||||
rm -f $TOPDESTPATH/ppc/ppc64/zImage.lds
|
|
||||||
popd
|
|
||||||
echo "zimage = images/netboot/ppc64.img" >> $TOPDESTPATH/.treeinfo
|
|
||||||
elif [ -x $IMGPATH/usr/sbin/wrapper -a -r $IMGPATH/usr/lib/kernel-wrapper/wrapper.a ]; then
|
|
||||||
mkdir -p $TOPDESTPATH/images/netboot
|
|
||||||
$IMGPATH/usr/sbin/wrapper -o $TOPDESTPATH/images/netboot/ppc64.img \
|
|
||||||
-i $TOPDESTPATH/ppc/ppc64/ramdisk.image.gz \
|
|
||||||
-D $IMGPATH/usr/lib/kernel-wrapper \
|
|
||||||
$TOPDESTPATH/ppc/ppc64/vmlinuz
|
|
||||||
rmdir $TOPDESTPATH/images/netboot || :
|
|
||||||
echo "zimage = images/netboot/ppc64.img" >> $TOPDESTPATH/.treeinfo
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo >> $TOPDESTPATH/.treeinfo
|
|
||||||
|
|
||||||
|
|
||||||
elif [ "$KERNELARCH" = "ppc" ]; then
|
|
||||||
FAKEARCH="ppc"
|
|
||||||
mkdir -p $TOPDESTPATH/ppc/ppc32
|
|
||||||
mkdir -p $TOPDESTPATH/ppc/mac
|
|
||||||
|
|
||||||
echo "Building ppc initrd"
|
|
||||||
makeinitrd --initrdto $TOPDESTPATH/ppc/ppc32/ramdisk.image.gz \
|
|
||||||
--initrdsize 8192 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$INITRDMODS"
|
|
||||||
|
|
||||||
cp $KERNELROOT/boot/vmlinuz-* $TOPDESTPATH/ppc/ppc32/vmlinuz
|
|
||||||
sed -e "s/%BITS%/32/" -e "s/%PRODUCT%/$PRODUCT/" -e "s/%VERSION%/$VERSION/" \
|
|
||||||
$BOOTDISKDIR/yaboot.conf.in > $TOPDESTPATH/ppc/ppc32/yaboot.conf
|
|
||||||
|
|
||||||
cat << __EOT__ >> $TOPDESTPATH/.treeinfo
|
|
||||||
[images-$KERNELARCH]
|
|
||||||
kernel = ppc/ppc32/vmlinuz
|
|
||||||
initrd = ppc/ppc32/ramdisk.image.gz
|
|
||||||
__EOT__
|
|
||||||
if [ -x $IMGPATH/usr/bin/mkzimage -a -r $IMGPATH/usr/share/ppc64-utils/zImage.stub ]; then
|
|
||||||
mkdir -p $TOPDESTPATH/images/netboot
|
|
||||||
pushd $TOPDESTPATH/ppc/ppc32
|
|
||||||
cp $IMGPATH/usr/share/ppc64-utils/zImage.lds $TOPDESTPATH/ppc/ppc32/zImage.lds
|
|
||||||
$IMGPATH/usr/bin/mkzimage $TOPDESTPATH/ppc/ppc32/vmlinuz no no $TOPDESTPATH/ppc/ppc32/ramdisk.image.gz $IMGPATH/usr/share/ppc64-utils/zImage.stub $TOPDESTPATH/images/netboot/ppc32.img
|
|
||||||
rmdir $TOPDESTPATH/images/netboot || :
|
|
||||||
rm -f $TOPDESTPATH/ppc/ppc32/zImage.lds
|
|
||||||
popd
|
|
||||||
echo "zimage = images/netboot/ppc32.img" >> $TOPDESTPATH/.treeinfo
|
|
||||||
elif [ -x $IMGPATH/usr/sbin/wrapper -a -r $IMGPATH/usr/lib/kernel-wrapper/wrapper.a ]; then
|
|
||||||
$IMGPATH/usr/sbin/wrapper -o $TOPDESTPATH/images/netboot/ppc32.img \
|
|
||||||
-i $TOPDESTPATH/ppc/ppc32/ramdisk.image.gz \
|
|
||||||
-D $IMGPATH/usr/lib/kernel-wrapper \
|
|
||||||
$TOPDESTPATH/ppc/ppc32/vmlinuz
|
|
||||||
rmdir $TOPDESTPATH/images/netboot || :
|
|
||||||
popd
|
|
||||||
echo "zimage = images/netboot/ppc32.img" >> $TOPDESTPATH/.treeinfo
|
|
||||||
fi
|
|
||||||
echo >> $TOPDESTPATH/.treeinfo
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "Unknown kernel arch: $KERNELARCH"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
doPostImages() {
|
|
||||||
mkdir -p $TOPDESTPATH/etc
|
|
||||||
mkdir -p $TOPDESTPATH/ppc/chrp
|
|
||||||
|
|
||||||
# Create ofboot.b and bootinfo.txt files, and yaboot binaries for Mac and CHRP
|
|
||||||
cp $BOOTDISKDIR/bootinfo.txt $TOPDESTPATH/ppc/bootinfo.txt
|
|
||||||
cp $IMGPATH/usr/lib/anaconda-runtime/boot/efika.forth $TOPDESTPATH/ppc/efika.forth
|
|
||||||
|
|
||||||
if [ -d $TOPDESTPATH/ppc/mac ]; then
|
|
||||||
cp $BOOTDISKDIR/ofboot.b $TOPDESTPATH/ppc/mac/ofboot.b
|
|
||||||
cp $IMGPATH/usr/lib/yaboot/yaboot $TOPDESTPATH/ppc/mac/yaboot
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d $TOPDESTPATH/ppc/chrp ]; then
|
|
||||||
cp $IMGPATH/usr/lib/yaboot/yaboot $TOPDESTPATH/ppc/chrp/yaboot
|
|
||||||
$IMGPATH/usr/lib/yaboot/addnote $TOPDESTPATH/ppc/chrp/yaboot
|
|
||||||
fi
|
|
||||||
|
|
||||||
# IBM firmware can't handle boot scripts properly, so for biarch installs
|
|
||||||
# we use a yaboot.conf which asks the user to select 32-bit or 64-bit kernel.
|
|
||||||
if [ -r $TOPDESTPATH/ppc/ppc32/yaboot.conf -a -r $TOPDESTPATH/ppc/ppc64/yaboot.conf ]; then
|
|
||||||
# Both kernels exist. Copy the biarch yaboot.conf into place.
|
|
||||||
sed -e "s/%BITS%/32/" -e "s/%PRODUCT%/$PRODUCT/" -e "s/%VERSION%/$VERSION/" \
|
|
||||||
$BOOTDISKDIR/yaboot.conf.3264 > $TOPDESTPATH/etc/yaboot.conf
|
|
||||||
else
|
|
||||||
# Copy the one that exists, assuming one does exist
|
|
||||||
cp $TOPDESTPATH/ppc/ppc??/yaboot.conf $TOPDESTPATH/etc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$BOOTISO" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copy it all into the isopath for the boot CD
|
|
||||||
mkdir -p $TOPDESTPATH/isopath
|
|
||||||
cp -r $TOPDESTPATH/{ppc,etc} $TOPDESTPATH/isopath
|
|
||||||
|
|
||||||
# We want the ppc32 prep image in the boot.iso too.
|
|
||||||
if [ -d $TOPDESTPATH/images/netboot ]; then
|
|
||||||
mkdir -p $TOPDESTPATH/isopath/images
|
|
||||||
cp -r $TOPDESTPATH/images/netboot $TOPDESTPATH/isopath/images
|
|
||||||
rm -f $TOPDESTPATH/isopath/images/ppc64.img
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -r $TOPDESTPATH/isopath/images/netboot/ppc32.img ]; then
|
|
||||||
PREPBOOT="-prep-boot images/netboot/ppc32.img"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d $TOPDESTPATH/isopath/ppc/mac ]; then
|
|
||||||
MACBOOT="-hfs-volid $VERSION -hfs-bless $TOPDESTPATH/isopath/ppc/mac"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create the boot.iso
|
|
||||||
mkisofs -o $TOPDESTPATH/images/$BOOTISO -chrp-boot -U $PREPBOOT \
|
|
||||||
-part -hfs -T -r -l -J -A "$PRODUCT $VERSION" -sysid PPC \
|
|
||||||
-V "PBOOT" -volset "$VERSION" -volset-size 1 -volset-seqno 1 \
|
|
||||||
$MACBOOT \
|
|
||||||
-map $BOOTDISKDIR/mapping -magic $BOOTDISKDIR/magic \
|
|
||||||
-no-desktop -allow-multidot -graft-points $TOPDESTPATH/isopath \
|
|
||||||
images/install.img=$TOPDESTPATH/images/install.img
|
|
||||||
implantisomd5 $TOPDESTPATH/images/$BOOTISO
|
|
||||||
rm -rf $TOPDESTPATH/isopath
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
#
|
|
||||||
# mk-images.s390
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
S390SCSIMODS="zfcp tape390"
|
|
||||||
S390DASDMODS=" dasd_diag_mod dasd_eckd_mod dasd_fba_mod dasd_mod"
|
|
||||||
S390NETMODS="ctc netiucv smsgiucv lcs qdio qeth ccwgroup crypto_api xfrm_nalgo"
|
|
||||||
S390MODS="$S390SCSIMODS $S390DASDMODS $S390NETMODS"
|
|
||||||
|
|
||||||
makeBootImages() {
|
|
||||||
makeinitrd --initrdto $TOPDESTPATH/images/initrd.img \
|
|
||||||
--initrdsize 20000 \
|
|
||||||
--loaderbin loader \
|
|
||||||
--modules "$INITRDMODS $S390MODS"
|
|
||||||
sz=$(ls -l $TOPDESTPATH/images/initrd.img | awk '{print $5}')
|
|
||||||
$GENINITRDSZ $sz $TOPDESTPATH/images/initrd.size
|
|
||||||
cp -vf $KERNELROOT/boot/${KERNELNAME}-${version} $TOPDESTPATH/images/kernel.img
|
|
||||||
|
|
||||||
cp -v $BOOTDISKDIR/generic.prm $TOPDESTPATH/images/generic.prm
|
|
||||||
cp -v $BOOTDISKDIR/generic.ins $TOPDESTPATH/generic.ins
|
|
||||||
|
|
||||||
$MKS390CDBOOT \
|
|
||||||
-i $TOPDESTPATH/images/kernel.img \
|
|
||||||
-r $TOPDESTPATH/images/initrd.img \
|
|
||||||
-p $TOPDESTPATH/images/generic.prm \
|
|
||||||
-o $TOPDESTPATH/images/cdboot.img
|
|
||||||
|
|
||||||
cat << __EOT__ >> $TOPDESTPATH/.treeinfo
|
|
||||||
[images-$KERNELARCH]
|
|
||||||
kernel = images/kernel.img
|
|
||||||
initrd = images/initrd.img
|
|
||||||
initrd.size = images/initrd.size
|
|
||||||
generic.prm = images/generic.prm
|
|
||||||
generic.ins = generic.ins
|
|
||||||
cdboot.img = images/cdboot.img
|
|
||||||
|
|
||||||
__EOT__
|
|
||||||
}
|
|
@ -1,156 +0,0 @@
|
|||||||
/*
|
|
||||||
* mk-s390-cdboot -- creates one big image using a kernel, a ramdisk and
|
|
||||||
* a parmfile
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 2003-07-24 Volker Sameske <sameske@de.ibm.com>
|
|
||||||
*
|
|
||||||
* compile with:
|
|
||||||
* gcc -Wall -o mk-s390-cdboot mk-s390-cdboot.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <getopt.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
#define BUFFER_LEN 1024
|
|
||||||
#define INITRD_START 0x0000000000800000LL
|
|
||||||
#define START_PSW_ADDRESS 0x80010000
|
|
||||||
#define PARAMETER_BUFFER_LEN 80
|
|
||||||
|
|
||||||
static struct option getopt_long_options[]=
|
|
||||||
{
|
|
||||||
{ "image", 1, 0, 'i'},
|
|
||||||
{ "ramdisk", 1, 0, 'r'},
|
|
||||||
{ "parmfile", 1, 0, 'p'},
|
|
||||||
{ "outfile", 1, 0, 'o'},
|
|
||||||
{ "help", 0, 0, 'h'},
|
|
||||||
{0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static void usage(char *cmd)
|
|
||||||
{
|
|
||||||
printf("%s [-h] [-v] -i <kernel> -r <ramdisk> -p <parmfile> -o <outfile>\n", cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
char *cmd = basename(argv[0]);
|
|
||||||
FILE *fd1;
|
|
||||||
FILE *fd2;
|
|
||||||
FILE *fd3;
|
|
||||||
FILE *fd4;
|
|
||||||
char buffer[BUFFER_LEN];
|
|
||||||
int rc, oc, index;
|
|
||||||
unsigned long long initrd_start = INITRD_START;
|
|
||||||
unsigned long long initrd_size;
|
|
||||||
char image[PARAMETER_BUFFER_LEN];
|
|
||||||
char ramdisk[PARAMETER_BUFFER_LEN];
|
|
||||||
char parmfile[PARAMETER_BUFFER_LEN];
|
|
||||||
char outfile[PARAMETER_BUFFER_LEN];
|
|
||||||
int image_specified = 0;
|
|
||||||
int ramdisk_specified = 0;
|
|
||||||
int parmfile_specified = 0;
|
|
||||||
int outfile_specified = 0;
|
|
||||||
int start_psw_address = START_PSW_ADDRESS;
|
|
||||||
|
|
||||||
opterr=0;
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
oc = getopt_long(argc, argv, "i:r:p:o:h?", getopt_long_options, &index);
|
|
||||||
if (oc==-1) break;
|
|
||||||
|
|
||||||
switch (oc)
|
|
||||||
{
|
|
||||||
case '?':
|
|
||||||
case 'h':
|
|
||||||
usage(cmd);
|
|
||||||
exit(0);
|
|
||||||
case 'i':
|
|
||||||
strcpy(image, optarg);
|
|
||||||
image_specified = 1;
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
strcpy(ramdisk, optarg);
|
|
||||||
ramdisk_specified = 1;
|
|
||||||
break;
|
|
||||||
case 'p':
|
|
||||||
strcpy(parmfile, optarg);
|
|
||||||
parmfile_specified = 1;
|
|
||||||
break;
|
|
||||||
case 'o':
|
|
||||||
strcpy(outfile, optarg);
|
|
||||||
outfile_specified = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
usage(cmd);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!image_specified || !ramdisk_specified ||
|
|
||||||
!parmfile_specified || !outfile_specified) {
|
|
||||||
usage(cmd);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Creating bootable CD-ROM image...\n");
|
|
||||||
printf("kernel is : %s\n", image);
|
|
||||||
printf("ramdisk is : %s\n", ramdisk);
|
|
||||||
printf("parmfile is: %s\n", parmfile);
|
|
||||||
printf("outfile is : %s\n", outfile);
|
|
||||||
|
|
||||||
fd1 = fopen(outfile, "w");
|
|
||||||
fd2 = fopen(image, "r");
|
|
||||||
fd3 = fopen(ramdisk, "r");
|
|
||||||
fd4 = fopen(parmfile, "r");
|
|
||||||
|
|
||||||
printf("writing kernel...\n");
|
|
||||||
while (1) {
|
|
||||||
rc = fread(buffer, BUFFER_LEN, 1, fd2);
|
|
||||||
fwrite(buffer, BUFFER_LEN, 1, fd1);
|
|
||||||
if (rc == 0) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("writing initrd...\n");
|
|
||||||
fseek(fd1, initrd_start, SEEK_SET);
|
|
||||||
while (1) {
|
|
||||||
rc = fread(buffer, BUFFER_LEN, 1, fd3);
|
|
||||||
fwrite(buffer, BUFFER_LEN, 1, fd1);
|
|
||||||
if (rc == 0) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
fseek(fd3, 0 ,SEEK_END);
|
|
||||||
initrd_size = ftell(fd3);
|
|
||||||
|
|
||||||
printf("changing start PSW address to 0x%08x...\n", start_psw_address);
|
|
||||||
fseek(fd1, 0x4, SEEK_SET);
|
|
||||||
fwrite(&start_psw_address, 4, 1, fd1);
|
|
||||||
|
|
||||||
printf("writing initrd address and size...\n");
|
|
||||||
printf("INITRD start: 0x%016llx\n", initrd_start);
|
|
||||||
printf("INITRD size : 0x%016llx\n", initrd_size);
|
|
||||||
|
|
||||||
fseek(fd1, 0x10408, SEEK_SET);
|
|
||||||
fwrite(&initrd_start, 8, 1, fd1);
|
|
||||||
fseek(fd1, 0x10410, SEEK_SET);
|
|
||||||
fwrite(&initrd_size, 8, 1, fd1);
|
|
||||||
|
|
||||||
printf("writing parmfile...\n");
|
|
||||||
fseek(fd1, 0x10480, SEEK_SET);
|
|
||||||
while (1) {
|
|
||||||
rc = fread(buffer, 1, 1, fd4);
|
|
||||||
fwrite(buffer, 1, 1, fd1);
|
|
||||||
if (rc == 0) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(fd1);
|
|
||||||
fclose(fd2);
|
|
||||||
fclose(fd3);
|
|
||||||
fclose(fd4);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,130 +0,0 @@
|
|||||||
/*
|
|
||||||
* modlist.c
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <popt.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "../isys/isys.h"
|
|
||||||
#include "moduleinfo.h"
|
|
||||||
|
|
||||||
int main(int argc, char ** argv) {
|
|
||||||
poptContext optCon;
|
|
||||||
char * modInfoFile = "/boot/module-info";
|
|
||||||
enum driverMajor major;
|
|
||||||
const char * type;
|
|
||||||
const char * mod;
|
|
||||||
struct moduleInfo * list, * m;
|
|
||||||
int rc, i;
|
|
||||||
int showModInfo = 0;
|
|
||||||
int ignoreMissing = 0;
|
|
||||||
moduleInfoSet mis;
|
|
||||||
struct moduleInfo * mi;
|
|
||||||
struct poptOption optionTable[] = {
|
|
||||||
{ "ignore-missing", 'I', POPT_ARG_NONE, &ignoreMissing, 0,
|
|
||||||
"Ignore modules not in modinfo file for --modinfo" },
|
|
||||||
{ "modinfo", 'm', POPT_ARG_NONE, &showModInfo, 0,
|
|
||||||
"Give output in module-info file for listed args" },
|
|
||||||
{ "modinfo-file", 'f', POPT_ARG_STRING, &modInfoFile, 0,
|
|
||||||
"Module info file to use"},
|
|
||||||
POPT_AUTOHELP
|
|
||||||
{ 0, 0, 0, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
optCon = poptGetContext(NULL, argc, (const char **) argv, optionTable, 0);
|
|
||||||
|
|
||||||
if ((rc = poptGetNextOpt(optCon)) < -1) {
|
|
||||||
fprintf(stderr, "bad option %s: %s\n",
|
|
||||||
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
|
|
||||||
poptStrerror(rc));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
mis = newModuleInfoSet();
|
|
||||||
if (readModuleInfo(modInfoFile, mis, NULL, 0)) {
|
|
||||||
fprintf(stderr, "Failed to read %s\n", modInfoFile);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showModInfo) {
|
|
||||||
printf("Version 0\n");
|
|
||||||
while ((mod = poptGetArg(optCon))) {
|
|
||||||
mi = findModuleInfo(mis, mod);
|
|
||||||
if (mi) {
|
|
||||||
printf("%s\n", mi->moduleName);
|
|
||||||
switch (mi->major) {
|
|
||||||
case DRIVER_CDROM: printf("\tcdrom\n"); break;
|
|
||||||
case DRIVER_SCSI: printf("\tscsi\n"); break;
|
|
||||||
case DRIVER_FS: printf("\tfs\n"); break;
|
|
||||||
case DRIVER_PCMCIA: printf("\tpcmcia\n"); break;
|
|
||||||
case DRIVER_IDE: printf("\tide\n"); break;
|
|
||||||
case DRIVER_OTHER: printf("\tother\n"); break;
|
|
||||||
case DRIVER_NET:
|
|
||||||
switch (mi->minor) {
|
|
||||||
case DRIVER_MINOR_ETHERNET: printf("\teth\n"); break;
|
|
||||||
case DRIVER_MINOR_TR: printf("\ttr\n"); break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "unknown net minor type for %s\n",
|
|
||||||
mi->moduleName);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "unknown device type for %s (%d)\n",
|
|
||||||
mi->moduleName, mi->major);
|
|
||||||
exit(1);
|
|
||||||
|
|
||||||
}
|
|
||||||
printf("\t\"%s\"\n", mi->description);
|
|
||||||
for (i = 0; i < mi->numArgs; i++) {
|
|
||||||
printf("\t%s \"%s\"\n", mi->args[i].arg,
|
|
||||||
mi->args[i].description);
|
|
||||||
}
|
|
||||||
} else if (!ignoreMissing) {
|
|
||||||
fprintf(stderr, "I know nothing about %s\n", mod);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
while ((type = poptGetArg(optCon))) {
|
|
||||||
if (!strcasecmp(type, "scsi")) {
|
|
||||||
major = DRIVER_SCSI;
|
|
||||||
} else if (!strcasecmp(type, "net")) {
|
|
||||||
major = DRIVER_NET;
|
|
||||||
} else if (!strcasecmp(type, "fs")) {
|
|
||||||
major = DRIVER_FS;
|
|
||||||
} else if (!strcasecmp(type, "cdrom")) {
|
|
||||||
major = DRIVER_CDROM;
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "type must be one of scsi, net, fs, cdrom\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
list = getModuleList(mis, major);
|
|
||||||
for (m = list; m && m->moduleName; m++)
|
|
||||||
printf("%s\n", m->moduleName);
|
|
||||||
free(list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -18,6 +18,15 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
die() {
|
||||||
|
[ -n "$TREEDIR" ] && rm -rf $TREEDIR
|
||||||
|
[ -n "$BUILDINSTDIR" ] && rm -rf $BUILDINSTDIR
|
||||||
|
[ -n "$yumconf" ] && rm -rf $yumconf
|
||||||
|
echo "Aborting buildinstall"
|
||||||
|
echo "$@"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: buildinstall --version <version> --product <product> --release <comment> [--output outputdir] [--discs <discstring>] <root>" >&2
|
echo "Usage: buildinstall --version <version> --product <product> --release <comment> [--output outputdir] [--discs <discstring>] <root>" >&2
|
||||||
exit 1
|
exit 1
|
||||||
@ -58,7 +67,6 @@ while [ $# -gt 0 ]; do
|
|||||||
BUGURL=$2
|
BUGURL=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--output)
|
--output)
|
||||||
OUTPUT=$2
|
OUTPUT=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
@ -116,6 +124,10 @@ if [ ! -d "$OUTPUT" ]; then
|
|||||||
mkdir -p $OUTPUT
|
mkdir -p $OUTPUT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# The first -release and -logos package we are going to look for is the lowercase
|
||||||
|
# equivalent of the PRODUCTSTR
|
||||||
|
export brandpkgname="`echo $PRODUCTSTR | tr '[:upper:]' '[:lower:]'`"
|
||||||
|
|
||||||
BUILDINSTDIR=$(mktemp -d ${TMPDIR:-/tmp}/buildinstall.tree.XXXXXX)
|
BUILDINSTDIR=$(mktemp -d ${TMPDIR:-/tmp}/buildinstall.tree.XXXXXX)
|
||||||
TREEDIR=$(mktemp -d ${TMPDIR:-/tmp}/treedir.XXXXXX)
|
TREEDIR=$(mktemp -d ${TMPDIR:-/tmp}/treedir.XXXXXX)
|
||||||
CACHEDIR=$(mktemp -d ${TMPDIR:-/tmp}/yumcache.XXXXXX)
|
CACHEDIR=$(mktemp -d ${TMPDIR:-/tmp}/yumcache.XXXXXX)
|
||||||
@ -167,6 +179,9 @@ echo "Running buildinstall..."
|
|||||||
|
|
||||||
pushd $BUILDINSTDIR
|
pushd $BUILDINSTDIR
|
||||||
BUILDARCH=`repoquery -c $yumconf --qf "%{ARCH}\n" anaconda`
|
BUILDARCH=`repoquery -c $yumconf --qf "%{ARCH}\n" anaconda`
|
||||||
|
# This is a crappy implementation but x86 is the only place we currently see
|
||||||
|
# BUILDARCH != BASEARCH (e.g. i586 != i386) so it'll suffice.
|
||||||
|
BASEARCH=`echo $BUILDARCH | sed -e 's/i.86/i386/'`
|
||||||
yumdownloader -c $yumconf anaconda || exit 1
|
yumdownloader -c $yumconf anaconda || exit 1
|
||||||
rpm2cpio anaconda*rpm | cpio --quiet -iumd './usr*'
|
rpm2cpio anaconda*rpm | cpio --quiet -iumd './usr*'
|
||||||
rm -f anaconda*rpm
|
rm -f anaconda*rpm
|
||||||
@ -197,17 +212,19 @@ BUILDINSTALL=$BUILDINSTDIR/buildinstall
|
|||||||
if [ -n "$UPDATES" ]; then UPDATES="--updates $UPDATES"; fi
|
if [ -n "$UPDATES" ]; then UPDATES="--updates $UPDATES"; fi
|
||||||
|
|
||||||
echo "Building images..."
|
echo "Building images..."
|
||||||
$UPD_INSTROOT $DEBUGSTR $NOGRSTR --arch $BUILDARCH $UPDATES --imgdir $TREEDIR/install $yumconf
|
$UPD_INSTROOT $DEBUGSTR $NOGRSTR --arch $BUILDARCH $UPDATES --imgdir $TREEDIR/install $yumconf || die "upd-instroot failed"
|
||||||
|
|
||||||
echo "Writing .treeinfo file..."
|
echo "Writing .treeinfo file..."
|
||||||
$MK_TREEINFO --family="$PRODUCTSTR" ${VARIANT:+--variant="$VARIANT"} --version=$VERSION --arch=$BUILDARCH --outfile=$OUTPUT/.treeinfo
|
# NOTE --arch must match MK_IMAGES or the resulting treeinfo will be invalid
|
||||||
|
$MK_TREEINFO --family="$PRODUCTSTR" ${VARIANT:+--variant="$VARIANT"} --version=$VERSION --arch=$BASEARCH --outfile=$OUTPUT/.treeinfo
|
||||||
|
|
||||||
# FIXME: need to update mk-images to take the yumconf
|
# FIXME: need to update mk-images to take the yumconf
|
||||||
echo "Making images..."
|
MKIMGCMD="$MK_IMAGES $DEBUGSTR $NOGRSTR --imgdir $TREEDIR/install --arch $BASEARCH --product "$PRODUCTSTR" --version $VERSION --bugurl "$BUGURL" --output $OUTPUT $yumconf"
|
||||||
$MK_IMAGES $DEBUGSTR $NOGRSTR --imgdir $TREEDIR/install --arch $BUILDARCH --product "$PRODUCTSTR" --version $VERSION --bugurl "$BUGURL" --output $OUTPUT $yumconf
|
echo "Making images: $PWD\$ $MKIMGCMD"
|
||||||
|
$MKIMGCMD || die "image creation failed"
|
||||||
|
|
||||||
echo "Writing .discinfo file"
|
echo "Writing .discinfo file"
|
||||||
$MK_STAMP --releasestr="$RELEASESTR" --arch=$BUILDARCH --discNum="ALL" --outfile=$OUTPUT/.discinfo
|
$MK_STAMP --releasestr="$RELEASESTR" --arch=$BASEARCH --discNum="ALL" --outfile=$OUTPUT/.discinfo
|
||||||
|
|
||||||
rm -rf $TREEDIR $BUILDINSTDIR
|
rm -rf $TREEDIR $BUILDINSTDIR
|
||||||
rm -f $yumconf
|
rm -f $yumconf
|
@ -6,19 +6,28 @@ LDSO=""
|
|||||||
get_dso_deps() {
|
get_dso_deps() {
|
||||||
root="$1" ; shift
|
root="$1" ; shift
|
||||||
bin="$1" ; shift
|
bin="$1" ; shift
|
||||||
|
LDSODIR="$1" ; shift
|
||||||
DSO_DEPS=""
|
DSO_DEPS=""
|
||||||
|
|
||||||
declare -a FILES
|
declare -a FILES
|
||||||
declare -a NAMES
|
declare -a NAMES
|
||||||
|
[ -z "$LDSODIR" ] && LDSODIR=$LIBDIR
|
||||||
|
|
||||||
# this is a hack, but the only better way requires binutils or elfutils
|
# this is a hack, but the only better way requires binutils or elfutils
|
||||||
# be installed. i.e., we need readelf to find the interpretter.
|
# be installed. i.e., we need readelf to find the interpretter.
|
||||||
|
$LDSO --verify $bin >/dev/null 2>&1
|
||||||
|
case $? in
|
||||||
|
[02]) ;;
|
||||||
|
*) unset LDSO ;;
|
||||||
|
esac
|
||||||
if [ -z "$LDSO" ]; then
|
if [ -z "$LDSO" ]; then
|
||||||
for ldso in $root/$LIBDIR/ld*.so* ; do
|
for ldso in $root/$LDSODIR/ld*.so* ; do
|
||||||
[ -L $ldso ] && continue
|
[ -L $ldso ] && continue
|
||||||
[ -x $ldso ] || continue
|
[ -x $ldso ] || continue
|
||||||
$ldso --verify $bin >/dev/null 2>&1 || continue
|
$ldso --verify $bin >/dev/null 2>&1
|
||||||
LDSO=$(echo $ldso |sed -e "s,$root,,")
|
case $? in
|
||||||
|
[02]) LDSO=$(echo $ldso |sed -e "s,$root,,") ; break ;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -73,9 +82,14 @@ EOF
|
|||||||
|
|
||||||
DSO_DEPS="${FILES[@]}"
|
DSO_DEPS="${FILES[@]}"
|
||||||
|
|
||||||
for l in $(/usr/sbin/chroot $root find /$LIBDIR -maxdepth 1 -type l -name ld*.so*); do
|
for l in $(/usr/sbin/chroot $root find /$LDSODIR -maxdepth 1 -type l -name ld*.so*); do
|
||||||
[ "$(/usr/sbin/chroot $root readlink -f $l)" == "$LDSO" ] && DSO_DEPS="$DSO_DEPS $l"
|
[ "$(/usr/sbin/chroot $root readlink -f $l)" == "$LDSO" ] && DSO_DEPS="$DSO_DEPS $l"
|
||||||
done
|
done
|
||||||
|
if [ "$(uname -m)" == "s390x" ]; then
|
||||||
|
for l in $(/usr/sbin/chroot $root find /lib -maxdepth 1 -type 1 -name ld*.so*); do
|
||||||
|
[ "$(/usr/sbin/chroot $root readlink -f $l)" == "$LDSO" ] && DSO_DEPS="$DSO_DEPS $l"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
[ -n "$DEBUG" ] && echo "DSO_DEPS for $bin are $DSO_DEPS"
|
[ -n "$DEBUG" ] && echo "DSO_DEPS for $bin are $DSO_DEPS"
|
||||||
}
|
}
|
||||||
@ -98,13 +112,19 @@ instFile() {
|
|||||||
cp -aL $FILE $DESTROOT/`dirname $FILE`
|
cp -aL $FILE $DESTROOT/`dirname $FILE`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
file $FILE | egrep -q ": (setuid )?ELF" && {
|
f=$(file $FILE)
|
||||||
get_dso_deps $(pwd) "$FILE"
|
echo $f | egrep -q ": (setuid )?ELF" && {
|
||||||
|
if echo $f | grep -q " 64-bit " ; then
|
||||||
|
get_dso_deps $(pwd) "$FILE" lib64
|
||||||
|
else
|
||||||
|
get_dso_deps $(pwd) "$FILE" lib
|
||||||
|
fi
|
||||||
local DEPS="$DSO_DEPS"
|
local DEPS="$DSO_DEPS"
|
||||||
for x in $DEPS ; do
|
for x in $DEPS ; do
|
||||||
instFile ./$x $DESTROOT
|
instFile ./$x $DESTROOT
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
unset f
|
||||||
}
|
}
|
||||||
|
|
||||||
instDir() {
|
instDir() {
|
69
rewrite/scripts/getkeymaps
Executable file
69
rewrite/scripts/getkeymaps
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# getkeymaps
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
ARCH=$1
|
||||||
|
if [ -z "$ARCH" ]; then
|
||||||
|
echo "usage: $0 <arch>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
TOPDIR=`pwd`
|
||||||
|
OUTPUT=$2
|
||||||
|
if [ -z "$OUTPUT" ]; then
|
||||||
|
echo "No output specified, using ${TMPDIR:-/tmp}/keymaps-$ARCH.$$"
|
||||||
|
OUTPUT=${TMPDIR:-/tmp}/keymaps-$ARCH.$$
|
||||||
|
fi
|
||||||
|
|
||||||
|
UTILDIR=$3
|
||||||
|
if [ -z "$UTILDIR" ]; then
|
||||||
|
READMAP=../utils/readmap
|
||||||
|
MAPSHDR=$TOPDIR/../utils/mapshdr
|
||||||
|
else
|
||||||
|
READMAP=$UTILDIR/usr/lib/anaconda-runtime/readmap
|
||||||
|
MAPSHDR=$UTILDIR/usr/lib/anaconda-runtime/mapshdr
|
||||||
|
fi
|
||||||
|
|
||||||
|
TMP=${TMPDIR:-/tmp}/keymaps.$$
|
||||||
|
|
||||||
|
rm -rf $TMP
|
||||||
|
mkdir -p $TMP
|
||||||
|
|
||||||
|
if [ $ARCH = "sparc" ]; then
|
||||||
|
PATTERN={i386,sun}
|
||||||
|
else
|
||||||
|
PATTERN=i386
|
||||||
|
fi
|
||||||
|
|
||||||
|
MAPS=$(python -c "import rhpl.keyboard_models ; rhpl.keyboard_models.get_supported_models()")
|
||||||
|
|
||||||
|
for map in $MAPS ; do
|
||||||
|
eval find /lib/kbd/keymaps/$PATTERN -name "$map.map*.gz" | while read n; do
|
||||||
|
/bin/loadkeys `basename $n .gz` >/dev/null
|
||||||
|
$READMAP $TMP/`basename $n .map.gz`.map
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
loadkeys us
|
||||||
|
|
||||||
|
rm -f $TMP/defkeymap* $TMP/ANSI* $TMP/lt.map
|
||||||
|
|
||||||
|
(cd $TMP; $MAPSHDR *.map) > $TMP/hdr
|
||||||
|
cat $TMP/hdr $TMP/*.map | gzip -9 > $OUTPUT
|
||||||
|
rm -rf $TMP
|
47
rewrite/scripts/getlangnames.py
Normal file
47
rewrite/scripts/getlangnames.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#
|
||||||
|
# getlangnames.py
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
import language
|
||||||
|
|
||||||
|
import gettext
|
||||||
|
|
||||||
|
langs = language.Language()
|
||||||
|
names = {}
|
||||||
|
for k in langs.localeInfo.keys():
|
||||||
|
found = False
|
||||||
|
for l in language.expandLangs(k):
|
||||||
|
try:
|
||||||
|
f = open("po/%s.mo" %(l,))
|
||||||
|
except (OSError, IOError):
|
||||||
|
continue
|
||||||
|
cat = gettext.GNUTranslations(f)
|
||||||
|
cat.set_output_charset("utf-8")
|
||||||
|
names[langs.localeInfo[k][0]] = cat.lgettext(langs.localeInfo[k][0])
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
names[langs.localeInfo[k][0]] = langs.localeInfo[k][0]
|
||||||
|
|
||||||
|
nameList = names.keys()
|
||||||
|
nameList.sort()
|
||||||
|
|
||||||
|
for k in nameList:
|
||||||
|
print("%s\t%s" % (k, names[k]))
|
212
rewrite/scripts/makeupdates
Executable file
212
rewrite/scripts/makeupdates
Executable file
@ -0,0 +1,212 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# makeupdates - Generate an updates.img containing changes since the last
|
||||||
|
# tag, but only changes that do not need to be compiled. If
|
||||||
|
# you need an updated _isys.so or a new loader, you should
|
||||||
|
# still compile things as usual.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2009 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# Author: David Cantrell <dcantrell@redhat.com>
|
||||||
|
|
||||||
|
import getopt
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def getArchiveTag(configure, spec):
|
||||||
|
tag = ""
|
||||||
|
|
||||||
|
f = open(configure)
|
||||||
|
lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
if line.startswith('AC_INIT('):
|
||||||
|
fields = line.split('[')
|
||||||
|
tag += fields[1].split(']')[0] + '-' + fields[2].split(']')[0]
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
f = open(spec)
|
||||||
|
lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
if line.startswith('Release:'):
|
||||||
|
tag += '-' + line.split()[1].split('%')[0]
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return tag
|
||||||
|
|
||||||
|
def doGitDiff(tag, args=[]):
|
||||||
|
proc = subprocess.Popen(['git', 'diff', '--stat', tag] + args,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE).communicate()
|
||||||
|
|
||||||
|
lines = proc[0].split('\n')
|
||||||
|
return lines
|
||||||
|
|
||||||
|
def copyUpdatedFiles(tag, updates, cwd):
|
||||||
|
def pruneFile(src, names):
|
||||||
|
lst = []
|
||||||
|
|
||||||
|
for name in names:
|
||||||
|
if name.startswith('Makefile') or name.endswith('.pyc'):
|
||||||
|
lst.append(name)
|
||||||
|
|
||||||
|
return lst
|
||||||
|
|
||||||
|
subdirs = []
|
||||||
|
|
||||||
|
lines = doGitDiff(tag)
|
||||||
|
for line in lines:
|
||||||
|
if line.find(' | ') == -1:
|
||||||
|
continue
|
||||||
|
|
||||||
|
fields = line.split()
|
||||||
|
file = fields[0]
|
||||||
|
|
||||||
|
if file.endswith('.spec.in') or file.startswith('Makefile') or \
|
||||||
|
file.endswith('.c') or file.endswith('.h') or \
|
||||||
|
file.endswith('.sh') or file == 'configure.ac':
|
||||||
|
continue
|
||||||
|
|
||||||
|
if file.find('/') != -1:
|
||||||
|
fields = file.split('/')
|
||||||
|
subdir = fields[0]
|
||||||
|
|
||||||
|
if subdir == 'installclasses' or subdir == 'storage' or \
|
||||||
|
subdir == 'booty':
|
||||||
|
subupdates = os.path.realpath(updates + '/' + subdir)
|
||||||
|
if os.path.isdir(subupdates):
|
||||||
|
shutil.rmtree(subupdates)
|
||||||
|
|
||||||
|
if not subdir in subdirs:
|
||||||
|
sys.stdout.write("Including %s/\n" % (subdir,))
|
||||||
|
subdirs.append(subdir)
|
||||||
|
|
||||||
|
shutil.copytree(os.path.realpath(cwd + '/' + subdir),
|
||||||
|
subupdates, ignore=pruneFile)
|
||||||
|
elif subdir == 'loader' or subdir == 'po' or \
|
||||||
|
subdir =='scripts' or subdir == 'command-stubs' or \
|
||||||
|
subdir == 'tests' or subdir == 'bootdisk' or \
|
||||||
|
subdir == 'docs' or subdir == 'fonts' or \
|
||||||
|
subdir == 'utils' or subdir == 'gptsync':
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
sys.stdout.write("Including %s\n" % (file,))
|
||||||
|
shutil.copy2(file, updates)
|
||||||
|
|
||||||
|
def isysChanged(tag):
|
||||||
|
lines = doGitDiff(tag, ['isys'])
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
if line.find(' | ') == -1:
|
||||||
|
continue
|
||||||
|
|
||||||
|
fields = line.split()
|
||||||
|
file = fields[0]
|
||||||
|
|
||||||
|
if file.startswith('Makefile') or file.endswith('.h') or \
|
||||||
|
file.endswith('.c'):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def copyUpdatedIsys(updates, cwd):
|
||||||
|
os.chdir(cwd)
|
||||||
|
|
||||||
|
if not os.path.isfile('Makefile'):
|
||||||
|
if not os.path.isfile('configure'):
|
||||||
|
os.system('./autogen.sh')
|
||||||
|
os.system('./configure')
|
||||||
|
|
||||||
|
os.system('make')
|
||||||
|
|
||||||
|
isysmodule = os.path.realpath(cwd + '/isys/.libs/_isys.so')
|
||||||
|
if os.path.isfile(isysmodule):
|
||||||
|
shutil.copy2(isysmodule, updates)
|
||||||
|
|
||||||
|
def createUpdatesImage(cwd, updates):
|
||||||
|
os.chdir(updates)
|
||||||
|
os.system("find . | cpio -c -o | gzip -9cv > %s/updates.img" % (cwd,))
|
||||||
|
sys.stdout.write("updates.img ready\n")
|
||||||
|
|
||||||
|
def usage(cmd):
|
||||||
|
sys.stdout.write("Usage: %s [OPTION]...\n" % (cmd,))
|
||||||
|
sys.stdout.write("Options:\n")
|
||||||
|
sys.stdout.write(" -k, --keep Do not delete updates subdirectory.\n")
|
||||||
|
sys.stdout.write(" -c, --compile Compile code if there are isys changes.\n")
|
||||||
|
sys.stdout.write(" -h, --help Display this help and exit.\n")
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
prog = os.path.basename(sys.argv[0])
|
||||||
|
cwd = os.getcwd()
|
||||||
|
configure = os.path.realpath(cwd + '/configure.ac')
|
||||||
|
spec = os.path.realpath(cwd + '/anaconda.spec.in')
|
||||||
|
updates = cwd + '/updates'
|
||||||
|
keep, compile, help, unknown = False, False, False, False
|
||||||
|
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(sys.argv[1:], 'kc?',
|
||||||
|
['keep', 'compile', 'help'])
|
||||||
|
except getopt.GetoptError:
|
||||||
|
help = True
|
||||||
|
|
||||||
|
for o, a in opts:
|
||||||
|
if o in ('-k', '--keep'):
|
||||||
|
keep = True
|
||||||
|
elif o in ('-c', '--compile'):
|
||||||
|
compile = True
|
||||||
|
elif o in ('-?', '--help'):
|
||||||
|
help = True
|
||||||
|
else:
|
||||||
|
unknown = True
|
||||||
|
|
||||||
|
if help:
|
||||||
|
usage(prog)
|
||||||
|
sys.exit(0)
|
||||||
|
elif unknown:
|
||||||
|
sys.stderr.write("%s: extra operand `%s'" % (prog, sys.argv[1],))
|
||||||
|
sys.stderr.write("Try `%s --help' for more information." % (prog,))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if not os.path.isfile(configure) and not os.path.isfile(spec):
|
||||||
|
sys.stderr.write("You must be at the top level of the anaconda source tree.\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
tag = getArchiveTag(configure, spec)
|
||||||
|
|
||||||
|
if not os.path.isdir(updates):
|
||||||
|
os.makedirs(updates)
|
||||||
|
|
||||||
|
copyUpdatedFiles(tag, updates, cwd)
|
||||||
|
|
||||||
|
if compile:
|
||||||
|
if isysChanged(tag):
|
||||||
|
copyUpdatedIsys(updates, cwd)
|
||||||
|
|
||||||
|
createUpdatesImage(cwd, updates)
|
||||||
|
|
||||||
|
if not keep:
|
||||||
|
shutil.rmtree(updates)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(sys.argv)
|
@ -39,57 +39,46 @@ while [ $# -gt 0 ]; do
|
|||||||
DEBUG="--debug"
|
DEBUG="--debug"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--noiso)
|
--noiso)
|
||||||
BOOTISO=""
|
BOOTISO=""
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--arch)
|
--arch)
|
||||||
BUILDARCH=$2
|
BUILDARCH=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--imgdir)
|
--imgdir)
|
||||||
IMGPATH=$2
|
IMGPATH=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--product)
|
--product)
|
||||||
PRODUCT=$2
|
PRODUCT=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--version)
|
--version)
|
||||||
VERSION=$2
|
VERSION=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--bugurl)
|
--bugurl)
|
||||||
BUGURL=$2
|
BUGURL=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--output)
|
--output)
|
||||||
TOPDESTPATH=$2
|
TOPDESTPATH=$2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--nogr)
|
--nogr)
|
||||||
echo "*** DeprecationWarning: ignoring --nogr option." >&2
|
echo "*** DeprecationWarning: ignoring --nogr option." >&2
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--mindir)
|
--mindir)
|
||||||
echo "*** DeprecationWarning: ignoring --mindir option." >&2
|
echo "*** DeprecationWarning: ignoring --mindir option." >&2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--stg2dir)
|
--stg2dir)
|
||||||
echo "*** DeprecationWarning: please use --imgdir instead of --stg2dir." >&2
|
echo "*** DeprecationWarning: please use --imgdir instead of --stg2dir." >&2
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
yumconf=$1
|
yumconf=$1
|
||||||
shift
|
shift
|
||||||
@ -107,105 +96,104 @@ TOPDIR=$(cd $TOPDIR; pwd)
|
|||||||
|
|
||||||
# modules that are needed. this is the generic "needed for every arch" stuff
|
# modules that are needed. this is the generic "needed for every arch" stuff
|
||||||
COMMONMODS="fat vfat nfs sunrpc lockd floppy cramfs loop edd pcspkr squashfs ipv6 virtio_pci"
|
COMMONMODS="fat vfat nfs sunrpc lockd floppy cramfs loop edd pcspkr squashfs ipv6 virtio_pci"
|
||||||
USBMODS="ohci-hcd uhci-hcd ehci-hcd hid mousedev usb-storage sd_mod sr_mod ub appletouch"
|
USBMODS="ohci-hcd uhci-hcd ehci-hcd usbhid mousedev usb-storage sd_mod sr_mod ub appletouch"
|
||||||
FIREWIREMODS="ohci1394 sbp2 fw-ohci fw-sbp2 firewire-sbp2 firewire-ohci"
|
FIREWIREMODS="ohci1394 sbp2 fw-ohci fw-sbp2 firewire-sbp2 firewire-ohci"
|
||||||
SDMODS="mmc-block sdhci sdhci-pci"
|
SDMODS="mmc-block sdhci sdhci-pci"
|
||||||
IDEMODS="ide-cd ide-cd_mod"
|
IDEMODS="ide-cd ide-cd_mod"
|
||||||
SCSIMODS="sr_mod sg st sd_mod scsi_mod iscsi_tcp iscsi_ibft"
|
SCSIMODS="sr_mod sg st sd_mod scsi_mod iscsi_tcp iscsi_ibft"
|
||||||
FSMODS="fat msdos vfat ext2 ext3 ext4dev reiserfs jfs xfs gfs2 cifs"
|
FSMODS="fat msdos vfat ext2 ext3 ext4 reiserfs jfs xfs gfs2 cifs fuse btrfs"
|
||||||
LVMMODS="dm-mod dm-zero dm-snapshot dm-mirror dm-multipath dm-round-robin dm-crypt"
|
LVMMODS="dm-mod dm-zero dm-snapshot dm-mirror dm-multipath dm-round-robin dm-crypt"
|
||||||
RAIDMODS="raid0 raid1 raid5 raid6 raid456 raid10 linear"
|
RAIDMODS="raid0 raid1 raid5 raid6 raid456 raid10 linear"
|
||||||
CRYPTOMODS="sha256_generic cbc xts lrw aes_generic crypto_blkcipher crc32c ecb arc4"
|
CRYPTOMODS="sha256_generic cbc xts lrw aes_generic crypto_blkcipher crc32c ecb arc4"
|
||||||
PCMCIASOCKMODS="yenta_socket i82365 tcic pcmcia"
|
PCMCIASOCKMODS="yenta_socket i82365 tcic pcmcia"
|
||||||
DRMMODS="drm i810 i830 i915 mga nouveau r128 radeon savage sis tdfx via"
|
INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS $CRYPTOMODS $COMMONMODS $PCMCIASOCKMODS $SDMODS =scsi =net =drm"
|
||||||
INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS $CRYPTOMODS $COMMONMODS $PCMCIASOCKMODS $DRMMODS $SDMODS =scsi =net"
|
|
||||||
|
|
||||||
. $(dirname $0)/buildinstall.functions
|
. $(dirname $0)/buildinstall.functions
|
||||||
|
|
||||||
# Set, verify, and create paths
|
# Set, verify, and create paths
|
||||||
IMAGEPATH=$TOPDESTPATH/images
|
IMAGEPATH=$TOPDESTPATH/images
|
||||||
FULLMODPATH=$TMPDIR/instimagemods.$$
|
FULLMODPATH=$TMPDIR/instimagemods.$$
|
||||||
FINALFULLMODPATH=$IMGPATH/modules
|
FINALFULLMODPATH=$IMGPATH/modules
|
||||||
INSTIMGPATH=$TOPDESTPATH/images
|
INSTIMGPATH=$TOPDESTPATH/images
|
||||||
KERNELBASE=$TMPDIR/updboot.kernel.$$
|
KERNELBASE=$TMPDIR/updboot.kernel.$$
|
||||||
|
|
||||||
KERNELNAME=vmlinuz
|
KERNELNAME=vmlinuz
|
||||||
if [ "$BUILDARCH" = "ia64" ]; then
|
if [ "$BUILDARCH" = "ia64" ]; then
|
||||||
KERNELDIR="/boot/efi/EFI/redhat"
|
KERNELDIR="/boot/efi/EFI/redhat"
|
||||||
else
|
else
|
||||||
KERNELDIR="/boot"
|
KERNELDIR="/boot"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$BUILDARCH" = "sparc64" ]; then
|
if [ "$BUILDARCH" = "sparc64" ]; then
|
||||||
BASEARCH=sparc
|
BASEARCH=sparc
|
||||||
else
|
else
|
||||||
BASEARCH=$BUILDARCH
|
BASEARCH=$BUILDARCH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# explicit block size setting for some arches (FIXME: we compose
|
# explicit block size setting for some arches (FIXME: we compose
|
||||||
# ppc64-ish trees as ppc, so we have to set the "wrong" block size)
|
# ppc64-ish trees as ppc, so we have to set the "wrong" block size)
|
||||||
if [ "$BUILDARCH" = "sparc64" ]; then
|
if [ "$BUILDARCH" = "sparc64" ]; then
|
||||||
CRAMBS="--blocksize 8192"
|
CRAMBS="--blocksize 8192"
|
||||||
elif [ "$BUILDARCH" = "sparc" ]; then
|
elif [ "$BUILDARCH" = "sparc" ]; then
|
||||||
CRAMBS="--blocksize 4096"
|
CRAMBS="--blocksize 4096"
|
||||||
else
|
else
|
||||||
CRAMBS=""
|
CRAMBS=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $BUILDARCH = x86_64 -o $BUILDARCH = s390x ]; then
|
if [ "$BUILDARCH" = "x86_64" -o "$BUILDARCH" = "s390x" -o "$BUILDARCH" = "ppc64" ]; then
|
||||||
LIBDIR=lib64
|
LIBDIR=lib64
|
||||||
else
|
else
|
||||||
LIBDIR=lib
|
LIBDIR=lib
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf $IMAGEPATH
|
rm -rf $IMAGEPATH
|
||||||
rm -rf $FULLMODPATH
|
rm -rf $FULLMODPATH
|
||||||
rm -rf $FINALFULLMODPATH
|
rm -rf $FINALFULLMODPATH
|
||||||
rm -rf $KERNELBASE
|
rm -rf $KERNELBASE
|
||||||
mkdir -p $IMAGEPATH
|
mkdir -p $IMAGEPATH
|
||||||
mkdir -p $FULLMODPATH
|
mkdir -p $FULLMODPATH
|
||||||
mkdir -p $FINALFULLMODPATH
|
mkdir -p $FINALFULLMODPATH
|
||||||
mkdir -p $KERNELBASE
|
mkdir -p $KERNELBASE
|
||||||
mkdir -p $INSTIMGPATH
|
mkdir -p $INSTIMGPATH
|
||||||
|
|
||||||
# Stuff that we need
|
# Stuff that we need
|
||||||
TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
|
TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
|
||||||
GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
|
GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
|
||||||
GENINITRDSZ=$IMGPATH/usr/lib/anaconda-runtime/geninitrdsz
|
GENINITRDSZ=$IMGPATH/usr/lib/anaconda-runtime/geninitrdsz
|
||||||
MKS390CDBOOT=$IMGPATH/usr/lib/anaconda-runtime/mk-s390-cdboot
|
MKS390CDBOOT=$IMGPATH/usr/lib/anaconda-runtime/mk-s390-cdboot
|
||||||
GENMODINFO=$IMGPATH/usr/lib/anaconda-runtime/genmodinfo
|
GENMODINFO=$IMGPATH/usr/lib/anaconda-runtime/genmodinfo
|
||||||
KEYMAPS=$TMPDIR/keymaps-$BUILDARCH.$$
|
KEYMAPS=$TMPDIR/keymaps-$BUILDARCH.$$
|
||||||
SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${BASEARCH}.gz
|
SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${BASEARCH}.gz
|
||||||
MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
|
MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
|
||||||
MODINFO=$TMPDIR/modinfo-$BUILDARCH.$$
|
MODINFO=$TMPDIR/modinfo-$BUILDARCH.$$
|
||||||
LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader
|
LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader
|
||||||
BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot
|
BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot
|
||||||
LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table
|
LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table
|
||||||
PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
|
PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
|
||||||
XDRIVERS=$IMGPATH/usr/share/hwdata/videoaliases
|
XDRIVERS=$IMGPATH/usr/share/hwdata/videoaliases
|
||||||
XDRIVERDESCS=$IMGPATH/usr/share/hwdata/videodrivers
|
XDRIVERDESCS=$IMGPATH/usr/share/hwdata/videodrivers
|
||||||
|
|
||||||
REQUIREMENTS="$TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GENMODINFO
|
REQUIREMENTS="$TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GENMODINFO
|
||||||
$LANGTABLE $GETKEYMAPS"
|
$LANGTABLE $GETKEYMAPS"
|
||||||
|
|
||||||
dieLater=
|
dieLater=
|
||||||
for n in $REQUIREMENTS; do
|
for n in $REQUIREMENTS; do
|
||||||
if [ ! -f $n ]; then
|
if [ ! -f $n ]; then
|
||||||
echo "$n doesn't exist"
|
echo "$n doesn't exist"
|
||||||
dieLater=1
|
dieLater=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
for n in $BOOTDISKDIR; do
|
for n in $BOOTDISKDIR; do
|
||||||
if [ ! -d $n ]; then
|
if [ ! -d $n ]; then
|
||||||
echo "$n doesn't exist"
|
echo "$n doesn't exist"
|
||||||
dieLater=1
|
dieLater=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$dieLater" ]; then exit 1; fi
|
if [ -n "$dieLater" ]; then exit 1; fi
|
||||||
|
|
||||||
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
|
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
|
||||||
# go ahead and create the keymaps so we only have to do it once
|
# go ahead and create the keymaps so we only have to do it once
|
||||||
if [ -f $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH ]; then
|
if [ -f $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH ]; then
|
||||||
echo "Found keymap override, using it"
|
echo "Found keymap override, using it"
|
||||||
@ -218,7 +206,7 @@ INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
findPackage() {
|
findPackage() {
|
||||||
name=$1
|
name=$1
|
||||||
@ -261,7 +249,18 @@ expandModuleSet() {
|
|||||||
char=$(echo $name | cut -c1)
|
char=$(echo $name | cut -c1)
|
||||||
if [ $char = '=' ]; then
|
if [ $char = '=' ]; then
|
||||||
NAME=$(echo $name | cut -c2-)
|
NAME=$(echo $name | cut -c2-)
|
||||||
SET="$SET $($MODLIST --modinfo-file $MODINFO $NAME)"
|
if [ "$NAME" = "ata" ]; then
|
||||||
|
SET="$SET $(egrep '(ata|ahci)' $KERNELROOT/lib/modules/$version/modules.block |sed -e 's/.ko//')"
|
||||||
|
elif [ "$NAME" = "scsi" ]; then
|
||||||
|
SET="$SET $(sed -e 's/.ko//' $KERNELROOT/lib/modules/$version/modules.block)"
|
||||||
|
elif [ "$NAME" = "net" ]; then
|
||||||
|
SET="$SET $(sed -e 's/.ko//' $KERNELROOT/lib/modules/$version/modules.networking)"
|
||||||
|
else
|
||||||
|
# Ignore if group list does not exist
|
||||||
|
if [ -e $KERNELROOT/lib/modules/$version/modules.$NAME ]; then
|
||||||
|
SET="$SET $(sed -e 's/.ko//' $KERNELROOT/lib/modules/$version/modules.$NAME)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
SET="$SET $name"
|
SET="$SET $name"
|
||||||
fi
|
fi
|
||||||
@ -291,12 +290,24 @@ makemoduletree() {
|
|||||||
}
|
}
|
||||||
done
|
done
|
||||||
|
|
||||||
# Copy in driver firmware we want during installation. NOTE: This isn't
|
echo "Copying required firmware..."
|
||||||
# the ideal solution, but we'll do this for now. What we really want is
|
find $MMB_DIR/lib/modules/ -name *.ko | while read module ; do
|
||||||
# for the kernel modules to include a modinfo field that names the firmware
|
for fw in $(modinfo -F firmware $module); do
|
||||||
# file we should have. If we can get that it would make it even easier to
|
dest=$MBD_DIR/firmware/$fw
|
||||||
# push the kernel people to depend on the firmware packages in the kernel,
|
destdir=$(dirname $dest)
|
||||||
# but we have to take small steps first.
|
|
||||||
|
# Some firmware files are expected to be in their own directories.
|
||||||
|
if [ ! -d $destdir ]; then
|
||||||
|
mkdir -p $destdir
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp $KERNELROOT/lib/firmware/$fw $dest
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Copy in driver firmware we know we'll want during installation. This is
|
||||||
|
# required for modules which still don't (or can't) export information
|
||||||
|
# about what firmware files they require.
|
||||||
for module in $MODSET ; do
|
for module in $MODSET ; do
|
||||||
case $module in
|
case $module in
|
||||||
ipw2100)
|
ipw2100)
|
||||||
@ -308,18 +319,12 @@ makemoduletree() {
|
|||||||
iwl3945)
|
iwl3945)
|
||||||
cp $KERNELROOT/lib/firmware/iwlwifi-3945* $MBD_DIR/firmware
|
cp $KERNELROOT/lib/firmware/iwlwifi-3945* $MBD_DIR/firmware
|
||||||
;;
|
;;
|
||||||
iwl4965)
|
|
||||||
cp $KERNELROOT/lib/firmware/iwlwifi-4965* $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
atmel)
|
atmel)
|
||||||
cp $KERNELROOT/lib/firmware/atmel_*.bin $MBD_DIR/firmware
|
cp $KERNELROOT/lib/firmware/atmel_*.bin $MBD_DIR/firmware
|
||||||
;;
|
;;
|
||||||
zd1211rw)
|
zd1211rw)
|
||||||
cp -r $KERNELROOT/lib/firmware/zd1211 $MBD_DIR/firmware
|
cp -r $KERNELROOT/lib/firmware/zd1211 $MBD_DIR/firmware
|
||||||
;;
|
;;
|
||||||
qla2xxx)
|
|
||||||
cp $KERNELROOT/lib/firmware/ql* $MBD_DIR/firmware
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -357,18 +362,31 @@ instbin() {
|
|||||||
DIR=$3
|
DIR=$3
|
||||||
DEST=$4
|
DEST=$4
|
||||||
|
|
||||||
|
iself="$(file $ROOT/$BIN | grep ELF)"
|
||||||
|
|
||||||
|
if [ -L $ROOT/$BIN ]; then
|
||||||
|
cp -a $ROOT/$BIN $DIR/$DEST
|
||||||
|
else
|
||||||
|
if [ -z "$iself" ]; then
|
||||||
|
install -m 755 $ROOT/$BIN $DIR/$DEST
|
||||||
|
else
|
||||||
install -s -m 755 $ROOT/$BIN $DIR/$DEST
|
install -s -m 755 $ROOT/$BIN $DIR/$DEST
|
||||||
|
|
||||||
get_dso_deps $ROOT "$BIN"
|
get_dso_deps $ROOT "$BIN"
|
||||||
local DEPS="$DSO_DEPS"
|
local DEPS="$DSO_DEPS"
|
||||||
mkdir -p $DIR/$LIBDIR
|
mkdir -p $DIR/$LIBDIR
|
||||||
|
|
||||||
for x in $DEPS ; do
|
for x in $DEPS ; do
|
||||||
cp -Lfp $ROOT/$x $DIR/$LIBDIR
|
cp -Lfp $ROOT/$x $DIR/$LIBDIR
|
||||||
done
|
done
|
||||||
|
|
||||||
pushd $DIR/$LIBDIR
|
pushd $DIR/$LIBDIR
|
||||||
if [ -f ld-linux.so.2 ]; then
|
if [ -f ld-linux.so.2 -a ! -L ld-linux.so.2 ]; then
|
||||||
rm -f ld-linux.so.2
|
rm -f ld-linux.so.2
|
||||||
linker="$(ls -1 ld-*.*.*.so)"
|
linker="$(ls -1 ld-*.*.*.so)"
|
||||||
|
if [ -z "$linker" ]; then
|
||||||
|
linker="$(ls -1 ld-*.*.so)"
|
||||||
|
fi
|
||||||
found=$(echo $linker | wc -l)
|
found=$(echo $linker | wc -l)
|
||||||
if [ $found -ne 1 ]; then
|
if [ $found -ne 1 ]; then
|
||||||
echo "Found too many dynamic linkers:" >&2
|
echo "Found too many dynamic linkers:" >&2
|
||||||
@ -378,6 +396,13 @@ instbin() {
|
|||||||
ln -s $linker ld-linux.so.2
|
ln -s $linker ld-linux.so.2
|
||||||
fi
|
fi
|
||||||
popd
|
popd
|
||||||
|
if [ "$BUILDARCH" = "s390x" ]; then
|
||||||
|
pushd $DIR/lib
|
||||||
|
ln -s ../$LIBDIR/ld64.so.1
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
setupShellEnvironment() {
|
setupShellEnvironment() {
|
||||||
@ -424,7 +449,6 @@ EOF
|
|||||||
chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
|
chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
|
||||||
chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
|
chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
|
||||||
|
|
||||||
|
|
||||||
cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
|
cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
|
||||||
Port 22
|
Port 22
|
||||||
HostKey /etc/ssh/ssh_host_key
|
HostKey /etc/ssh/ssh_host_key
|
||||||
@ -449,22 +473,6 @@ EOF
|
|||||||
# copy in the binaries
|
# copy in the binaries
|
||||||
instbin $IMGPATH /usr/bin/login $MBD_DIR /sbin/login
|
instbin $IMGPATH /usr/bin/login $MBD_DIR /sbin/login
|
||||||
instbin $IMGPATH /usr/sbin/sshd $MBD_DIR /sbin/sshd
|
instbin $IMGPATH /usr/sbin/sshd $MBD_DIR /sbin/sshd
|
||||||
instbin $IMGPATH /usr/bin/busybox $MBD_DIR /sbin/busybox
|
|
||||||
|
|
||||||
# make some symlinks
|
|
||||||
(cd $MBD_DIR/sbin;
|
|
||||||
set $(./busybox 2>&1| awk '/^\t([[:alnum:]_\.\[]+,)+/' | sed 's/,//g' | sed 's/ +//');
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
if [ $1 != "busybox" -a $1 != "sh" ]; then
|
|
||||||
# if file doesnt already exist, link to busybox
|
|
||||||
if [ ! -f "$1" ]; then
|
|
||||||
ln -sf ./busybox $1
|
|
||||||
else
|
|
||||||
[ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done )
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -536,6 +544,7 @@ makeinitrd() {
|
|||||||
mkdir -p $MBD_DIR/var/cache/hald
|
mkdir -p $MBD_DIR/var/cache/hald
|
||||||
mkdir -p $MBD_DIR/var/lib/dbus
|
mkdir -p $MBD_DIR/var/lib/dbus
|
||||||
mkdir -p $MBD_DIR/var/lib/dhclient
|
mkdir -p $MBD_DIR/var/lib/dhclient
|
||||||
|
mkdir -p $MBD_DIR/etc/dhcp
|
||||||
mkdir -p $MBD_DIR/var/lock/rpm
|
mkdir -p $MBD_DIR/var/lock/rpm
|
||||||
mkdir -p $MBD_DIR/var/run
|
mkdir -p $MBD_DIR/var/run
|
||||||
mkdir -p $MBD_DIR/var/run/dbus
|
mkdir -p $MBD_DIR/var/run/dbus
|
||||||
@ -561,6 +570,7 @@ makeinitrd() {
|
|||||||
mkdir -p $MBD_DIR/etc/{pam.d,security}
|
mkdir -p $MBD_DIR/etc/{pam.d,security}
|
||||||
mkdir -p $MBD_DIR/$LIBDIR/security
|
mkdir -p $MBD_DIR/$LIBDIR/security
|
||||||
cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
|
cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
|
||||||
|
cp $IMGPATH/$LIBDIR/libwrap*.so* $MBD_DIR/$LIBDIR/
|
||||||
ln -s /tmp $MBD_DIR/var/state/xkb
|
ln -s /tmp $MBD_DIR/var/state/xkb
|
||||||
cp $IMGPATH/usr/bin/xauth $MBD_DIR/sbin/xauth
|
cp $IMGPATH/usr/bin/xauth $MBD_DIR/sbin/xauth
|
||||||
cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
|
cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
|
||||||
@ -584,6 +594,8 @@ makeinitrd() {
|
|||||||
else
|
else
|
||||||
instbin $IMGPATH ${LOADERBINDIR##IMGPATH}/shutdown $MBD_DIR /sbin/shutdown
|
instbin $IMGPATH ${LOADERBINDIR##IMGPATH}/shutdown $MBD_DIR /sbin/shutdown
|
||||||
instbin $IMGPATH /usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR /sbin/init
|
instbin $IMGPATH /usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR /sbin/init
|
||||||
|
instbin $IMGPATH /usr/lib/anaconda-runtime/loader/lsznet.raw $MBD_DIR /sbin/lsznet
|
||||||
|
instbin $IMGPATH /usr/lib/anaconda-runtime/loader/controlunits.sh $MBD_DIR /sbin/controlunits
|
||||||
instbin $IMGPATH /usr/sbin/dasdfmt $MBD_DIR /sbin/dasdfmt
|
instbin $IMGPATH /usr/sbin/dasdfmt $MBD_DIR /sbin/dasdfmt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -591,20 +603,30 @@ makeinitrd() {
|
|||||||
install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz
|
install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz
|
||||||
install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz
|
install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz
|
||||||
fi
|
fi
|
||||||
|
|
||||||
install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
|
install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
|
||||||
install -m 644 $IMGPATH/etc/passwd $MBD_DIR/etc/passwd
|
install -m 644 $IMGPATH/etc/passwd $MBD_DIR/etc/passwd
|
||||||
install -m 644 $IMGPATH/etc/group $MBD_DIR/etc/group
|
install -m 644 $IMGPATH/etc/group $MBD_DIR/etc/group
|
||||||
install -m 644 $IMGPATH/etc/nsswitch.conf $MBD_DIR/etc/nsswitch.conf
|
install -m 644 $IMGPATH/etc/nsswitch.conf $MBD_DIR/etc/nsswitch.conf
|
||||||
|
install -m 644 $IMGPATH/etc/hosts $MBD_DIR/etc/hosts
|
||||||
|
mkdir -p $MBD_DIR/usr/lib/locale
|
||||||
|
localedef -c -i en_US -f UTF-8 --prefix $MBD_DIR en_US
|
||||||
|
|
||||||
instbin $IMGPATH /usr/bin/mount $MBD_DIR /sbin/mount
|
instbin $IMGPATH /usr/bin/mount $MBD_DIR /sbin/mount
|
||||||
instbin $IMGPATH /usr/sbin/mount.nfs $MBD_DIR /sbin/mount.nfs
|
for mountcmd in $IMGPATH/usr/sbin/mount.* ; do
|
||||||
|
cmd="$(basename $mountcmd)"
|
||||||
|
instbin $IMGPATH /usr/sbin/$cmd $MBD_DIR /sbin/$cmd
|
||||||
|
done
|
||||||
instbin $IMGPATH /usr/bin/umount $MBD_DIR /sbin/umount
|
instbin $IMGPATH /usr/bin/umount $MBD_DIR /sbin/umount
|
||||||
ln -s mount.nfs $MBD_DIR/sbin/umount.nfs
|
for umountcmd in $IMGPATH/usr/sbin/umount.* ; do
|
||||||
|
cmd="$(basename $umountcmd)"
|
||||||
|
instbin $IMGPATH /usr/sbin/$cmd $MBD_DIR /sbin/$cmd
|
||||||
|
done
|
||||||
|
|
||||||
instbin $IMGPATH /usr/sbin/udevd $MBD_DIR /sbin/udevd
|
instbin $IMGPATH /usr/sbin/udevd $MBD_DIR /sbin/udevd
|
||||||
instbin $IMGPATH /usr/sbin/udevadm $MBD_DIR /sbin/udevadm
|
instbin $IMGPATH /usr/sbin/udevadm $MBD_DIR /sbin/udevadm
|
||||||
instbin $IMGPATH /usr/bin/udevinfo $MBD_DIR /sbin/udevinfo
|
instbin $IMGPATH /usr/bin/udevinfo $MBD_DIR /sbin/udevinfo
|
||||||
ln -s udevadm $MBD_DIR/sbin/udevsettle
|
instbin $IMGPATH /usr/sbin/udevsettle $MBD_DIR /sbin/udevsettle
|
||||||
|
|
||||||
instbin $IMGPATH /usr/bin/bash $MBD_DIR /sbin/bash
|
instbin $IMGPATH /usr/bin/bash $MBD_DIR /sbin/bash
|
||||||
( cd $MBD_DIR/sbin ; ln -sf bash sh )
|
( cd $MBD_DIR/sbin ; ln -sf bash sh )
|
||||||
@ -624,7 +646,16 @@ makeinitrd() {
|
|||||||
|
|
||||||
# DHCP and DHCPv6 client daemons and support programs
|
# DHCP and DHCPv6 client daemons and support programs
|
||||||
instbin $IMGPATH /usr/sbin/dhclient $MBD_DIR /sbin/dhclient
|
instbin $IMGPATH /usr/sbin/dhclient $MBD_DIR /sbin/dhclient
|
||||||
|
cp -a $IMGPATH/usr/sbin/dhclient-script $MBD_DIR/sbin/dhclient-script
|
||||||
|
chmod 0755 $MBD_DIR/sbin/dhclient-script
|
||||||
instbin $IMGPATH /usr/sbin/dhcp6c $MBD_DIR /sbin/dhcp6c
|
instbin $IMGPATH /usr/sbin/dhcp6c $MBD_DIR /sbin/dhcp6c
|
||||||
|
instbin $IMGPATH /usr/sbin/arping $MBD_DIR /sbin/arping
|
||||||
|
instbin $IMGPATH /usr/sbin/ifconfig $MBD_DIR /sbin/ifconfig
|
||||||
|
instbin $IMGPATH /usr/sbin/ip $MBD_DIR /sbin/ip
|
||||||
|
instbin $IMGPATH /usr/bin/ipcalc $MBD_DIR /sbin/ipcalc
|
||||||
|
instbin $IMGPATH /usr/bin/hostname $MBD_DIR /sbin/hostname
|
||||||
|
instbin $IMGPATH /usr/sbin/ethtool $MBD_DIR /sbin/ethtool
|
||||||
|
instbin $IMGPATH /usr/sbin/route $MBD_DIR /sbin/route
|
||||||
touch $MBD_DIR/etc/resolv.conf
|
touch $MBD_DIR/etc/resolv.conf
|
||||||
|
|
||||||
# hwdata
|
# hwdata
|
||||||
@ -680,8 +711,11 @@ makeinitrd() {
|
|||||||
cp -a $IMGPATH/etc/dbus-1/system.d/nm-*.conf $MBD_DIR/etc/dbus-1/system.d
|
cp -a $IMGPATH/etc/dbus-1/system.d/nm-*.conf $MBD_DIR/etc/dbus-1/system.d
|
||||||
cp -a $IMGPATH/etc/dbus-1/system.d/NetworkManager.conf $MBD_DIR/etc/dbus-1/system.d
|
cp -a $IMGPATH/etc/dbus-1/system.d/NetworkManager.conf $MBD_DIR/etc/dbus-1/system.d
|
||||||
cp -a $IMGPATH/etc/NetworkManager/nm-system-settings.conf $MBD_DIR/etc/NetworkManager
|
cp -a $IMGPATH/etc/NetworkManager/nm-system-settings.conf $MBD_DIR/etc/NetworkManager
|
||||||
instbin $IMGPATH /usr/$LIBDIR/NetworkManager/libnm-settings-plugin-ifcfg-fedora.so \
|
( cd $IMGPATH/usr/$LIBDIR/NetworkManager
|
||||||
$MBD_DIR /usr/$LIBDIR/NetworkManager/libnm-settings-plugin-ifcfg-fedora.so
|
for f in *.so ; do
|
||||||
|
instbin $IMGPATH /usr/$LIBDIR/NetworkManager/$f $MBD_DIR /usr/$LIBDIR/NetworkManager/$f
|
||||||
|
done
|
||||||
|
)
|
||||||
( cd $IMGPATH/usr/libexec
|
( cd $IMGPATH/usr/libexec
|
||||||
for f in nm-* ; do
|
for f in nm-* ; do
|
||||||
instbin $IMGPATH /usr/libexec/$f $MBD_DIR /usr/libexec/$f
|
instbin $IMGPATH /usr/libexec/$f $MBD_DIR /usr/libexec/$f
|
||||||
@ -692,6 +726,21 @@ makeinitrd() {
|
|||||||
cp -a org.freedesktop.nm_dispatcher.service $MBD_DIR/usr/share/dbus-1/system-services
|
cp -a org.freedesktop.nm_dispatcher.service $MBD_DIR/usr/share/dbus-1/system-services
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
instbin $IMGPATH /usr/bin/awk $MBD_DIR /sbin/awk
|
||||||
|
instbin $IMGPATH /usr/bin/egrep $MBD_DIR /sbin/egrep
|
||||||
|
instbin $IMGPATH /usr/bin/fgrep $MBD_DIR /sbin/fgrep
|
||||||
|
instbin $IMGPATH /usr/bin/gawk $MBD_DIR /sbin/gawk
|
||||||
|
instbin $IMGPATH /usr/bin/grep $MBD_DIR /sbin/grep
|
||||||
|
instbin $IMGPATH /usr/bin/kill $MBD_DIR /sbin/kill
|
||||||
|
instbin $IMGPATH /usr/bin/ln $MBD_DIR /sbin/ln
|
||||||
|
instbin $IMGPATH /usr/bin/readlink $MBD_DIR /sbin/readlink
|
||||||
|
instbin $IMGPATH /usr/bin/rm $MBD_DIR /sbin/rm
|
||||||
|
instbin $IMGPATH /usr/bin/rmdir $MBD_DIR /sbin/rmdir
|
||||||
|
instbin $IMGPATH /usr/bin/sed $MBD_DIR /sbin/sed
|
||||||
|
instbin $IMGPATH /usr/bin/sleep $MBD_DIR /sbin/sleep
|
||||||
|
instbin $IMGPATH /usr/bin/touch $MBD_DIR /sbin/touch
|
||||||
|
|
||||||
# Indirect dependencies
|
# Indirect dependencies
|
||||||
install -m 755 $IMGPATH/$LIBDIR/libfreebl3.so $MBD_DIR/$LIBDIR/
|
install -m 755 $IMGPATH/$LIBDIR/libfreebl3.so $MBD_DIR/$LIBDIR/
|
||||||
install -m 755 $IMGPATH/$LIBDIR/libsoftokn3.so $MBD_DIR/$LIBDIR/
|
install -m 755 $IMGPATH/$LIBDIR/libsoftokn3.so $MBD_DIR/$LIBDIR/
|
||||||
@ -802,8 +851,8 @@ makemainimage () {
|
|||||||
ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }')
|
ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }')
|
||||||
SIZE=$(expr $SIZE - $ERROR)
|
SIZE=$(expr $SIZE - $ERROR)
|
||||||
fi
|
fi
|
||||||
if [ -d $IMGPATH/usr/lib/syslinux ]; then
|
if [ -d $IMGPATH/usr/share/syslinux ]; then
|
||||||
ERROR=$(du -sk $IMGPATH/usr/lib/syslinux | awk '{ print $1 }')
|
ERROR=$(du -sk $IMGPATH/usr/share/syslinux | awk '{ print $1 }')
|
||||||
SIZE=$(expr $SIZE - $ERROR)
|
SIZE=$(expr $SIZE - $ERROR)
|
||||||
fi
|
fi
|
||||||
dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null
|
dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null
|
||||||
@ -813,7 +862,7 @@ makemainimage () {
|
|||||||
|
|
||||||
(cd $IMGPATH; find . |
|
(cd $IMGPATH; find . |
|
||||||
fgrep -v "./usr/lib/anaconda-runtime" |
|
fgrep -v "./usr/lib/anaconda-runtime" |
|
||||||
fgrep -v "./usr/lib/syslinux"
|
fgrep -v "./usr/share/syslinux"
|
||||||
cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
|
cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
|
||||||
makeproductfile $mmi_mntpoint
|
makeproductfile $mmi_mntpoint
|
||||||
umount $mmi_mntpoint
|
umount $mmi_mntpoint
|
||||||
@ -855,6 +904,7 @@ doPostImages() {
|
|||||||
# this gets overloaded if we're on an EFI-capable arch (... with grub)
|
# this gets overloaded if we're on an EFI-capable arch (... with grub)
|
||||||
makeEfiImages()
|
makeEfiImages()
|
||||||
{
|
{
|
||||||
|
echo "Not on an EFI capable machine; skipping EFI images."
|
||||||
/bin/true
|
/bin/true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -931,7 +981,11 @@ for KERNELARCH in $arches; do
|
|||||||
rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
|
rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
|
||||||
rm -f $kpackage
|
rm -f $kpackage
|
||||||
# expand out any available firmware too
|
# expand out any available firmware too
|
||||||
for p in $(repoquery -c $yumconf '*firmware*') ; do yumdownloader -c $yumconf $p ; rpm2cpio *firmware*.rpm | (cd $KERNELROOT; cpio --quiet -iumd) ; rm -f *firmware*.rpm ; done
|
for p in $(repoquery -c $yumconf '*firmware*') ; do
|
||||||
|
yumdownloader -c $yumconf $p
|
||||||
|
rpm2cpio *firmware*.rpm | (cd $KERNELROOT; cpio --quiet -iumd)
|
||||||
|
rm -f *firmware*.rpm
|
||||||
|
done
|
||||||
|
|
||||||
if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
|
if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
|
||||||
echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
|
echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
|
245
rewrite/scripts/mk-images.efi
Normal file
245
rewrite/scripts/mk-images.efi
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
#
|
||||||
|
# mk-images.efi
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
makeefibootdisk()
|
||||||
|
{
|
||||||
|
partimg=$1
|
||||||
|
target=$2
|
||||||
|
|
||||||
|
if [ ! -f $1 ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local partsize=$(ls -l $1 | awk '{ print $5; }')
|
||||||
|
local disksize=$((17408 + $partsize + 17408))
|
||||||
|
disksize=$(($disksize + $(($disksize % 512))))
|
||||||
|
local diskimg=$(mktemp /tmp/efidisk.img.XXXXXX)
|
||||||
|
dd if=/dev/zero of=$diskimg count=1 bs=$disksize
|
||||||
|
local loop=$(losetup -v -f $diskimg | awk '{ print $4 }')
|
||||||
|
dmsetup create efiboot$$ --table "0 $(($disksize / 512)) linear $loop 0"
|
||||||
|
parted --script /dev/mapper/efiboot$$ mklabel gpt unit b mkpart '"EFI System Partition"' fat32 17408 $((17408 + $partsize)) set 1 boot on
|
||||||
|
dd if=$partimg of=/dev/mapper/efiboot$$p1
|
||||||
|
dmsetup remove /dev/mapper/efiboot$$p1
|
||||||
|
dmsetup remove /dev/mapper/efiboot$$
|
||||||
|
losetup -d $loop
|
||||||
|
|
||||||
|
mv -v $diskimg $target
|
||||||
|
chmod a+r $target
|
||||||
|
}
|
||||||
|
|
||||||
|
#makeefibootimage required for EFI bootloader dosfs image
|
||||||
|
makeefibootimage() {
|
||||||
|
echo "in makeefibootimage: makeefibootimage $@"
|
||||||
|
MBD_FILENAME=""
|
||||||
|
KERNELFILE=""
|
||||||
|
INITRDFILE=""
|
||||||
|
grubpkg=""
|
||||||
|
MBD_TMPIMAGE=${TMPDIR:-/tmp}/makebootdisk.image.$$
|
||||||
|
MBD_BOOTTREE=${TMPDIR:-/tmp}/makebootdisk.tree.$$
|
||||||
|
MBD_BOOTTREE_TMP=$MBD_BOOTTREE'_tmp'
|
||||||
|
while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
|
||||||
|
if [ $1 = "--kernel" ]; then
|
||||||
|
KERNELFILE=$2
|
||||||
|
shift; shift
|
||||||
|
continue
|
||||||
|
elif [ $1 = "--kernelpath" ]; then
|
||||||
|
KERNELPATH=$2
|
||||||
|
shift; shift
|
||||||
|
continue
|
||||||
|
elif [ $1 = "--initrd" ]; then
|
||||||
|
INITRDFILE=$2
|
||||||
|
shift; shift
|
||||||
|
continue
|
||||||
|
elif [ $1 = "--initrdpath" ]; then
|
||||||
|
INITRDPATH=$2
|
||||||
|
shift; shift
|
||||||
|
continue
|
||||||
|
elif [ $1 = "--imagename" ]; then
|
||||||
|
MBD_FILENAME=$IMAGEPATH/$2
|
||||||
|
shift; shift
|
||||||
|
continue
|
||||||
|
elif [ $1 = "--grubpkg" ]; then
|
||||||
|
grubpkg=$2
|
||||||
|
echo "grubpkg=$grubpkg"
|
||||||
|
shift; shift
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
echo "Unknown option passed to makebootdisk: \"$1\""
|
||||||
|
exit 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$MBD_FILENAME" ]; then
|
||||||
|
echo "No imagename passed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
MBD_FSIMAGE="$INITRDFILE"
|
||||||
|
|
||||||
|
mkdir -p $MBD_BOOTTREE
|
||||||
|
mkdir -p $MBD_BOOTTREE_TMP
|
||||||
|
rm -rf $MBD_BOOTTREE_TMP
|
||||||
|
mkdir -p $MBD_TMPIMAGE
|
||||||
|
|
||||||
|
# provided by the mk-image.$ARCH file
|
||||||
|
prepareEfiImage
|
||||||
|
|
||||||
|
left=$(df $MBD_BOOTTREE | tail -n1)
|
||||||
|
left=$(echo $left | awk '{print $4'})
|
||||||
|
|
||||||
|
umount $MBD_BOOTTREE
|
||||||
|
|
||||||
|
if [ -n "$EXTRAKERNELPATH" ]; then
|
||||||
|
mkdir -p `dirname $EXTRAKERNELPATH`
|
||||||
|
cp -f $KERNELROOT/$KERNELDIR/${KERNELNAME}-* $EXTRAKERNELPATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p `dirname $MBD_FILENAME`
|
||||||
|
rm -rf $MBD_TMPIMAGE $MBD_MNTPOINT $MBD_BOOTTREE
|
||||||
|
if [ -z "$INITRDFILE" -a -n "$MBD_FSIMAGE" ]; then
|
||||||
|
rm -f $MBD_FSIMAGE
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod a+r $MBD_FILENAME
|
||||||
|
echo "Wrote $MBD_FILENAME (${left}k free)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# prepare and build an efiboot.img.
|
||||||
|
prepareEfiImage() {
|
||||||
|
echo "in prepareEfiImage"
|
||||||
|
prepareEfiTree || return 1
|
||||||
|
|
||||||
|
# dynamically calculate the size of the dosfs
|
||||||
|
BOOTDISKSIZE=$(du -kcs $MBD_BOOTTREE_TMP | tail -n1 | awk '{print $1}')
|
||||||
|
BOOTDISKSIZE=$(expr $BOOTDISKSIZE + 100)
|
||||||
|
echo "The size of the efiboot.img dosfs is $BOOTDISKSIZE"
|
||||||
|
mkdosfs -n ANACONDA -C $MBD_FILENAME $BOOTDISKSIZE >/dev/null
|
||||||
|
mount -o loop,shortname=winnt,umask=0077 -t vfat $MBD_FILENAME $MBD_BOOTTREE
|
||||||
|
cp -R $MBD_BOOTTREE_TMP/* $MBD_BOOTTREE
|
||||||
|
}
|
||||||
|
|
||||||
|
# prepare a directory with the kernel, initrd, and various message files
|
||||||
|
# used to populate the efi boot image
|
||||||
|
prepareEfiTree() {
|
||||||
|
echo "in prepareEfiTree"
|
||||||
|
mkdir -p $MBD_BOOTTREE_TMP/EFI/BOOT
|
||||||
|
|
||||||
|
cp -av $BOOTDISKDIR/*.conf $MBD_BOOTTREE_TMP/EFI/BOOT/
|
||||||
|
[ -n "$KERNELFILE" ] && cp -av $KERNELFILE $MBD_BOOTTREE_TMP/EFI/BOOT/vmlinuz
|
||||||
|
[ -n "$INITRDFILE" ] && cp -av $INITRDFILE $MBD_BOOTTREE_TMP/EFI/BOOT/initrd.img
|
||||||
|
[ -z "$KERNELPATH" ] && KERNELPATH="/EFI/BOOT/vmlinuz"
|
||||||
|
[ -z "$INITRDPATH" ] && INITRDPATH="/EFI/BOOT/initrd.img"
|
||||||
|
|
||||||
|
SPLASHPATH="/EFI/BOOT/splash.xpm.gz"
|
||||||
|
sed -e "s/@PRODUCT@/$PRODUCT/g" \
|
||||||
|
-e "s/@VERSION@/$VERSION/g" \
|
||||||
|
-e "s,@KERNELPATH@,$KERNELPATH,g" \
|
||||||
|
-e "s,@INITRDPATH@,$INITRDPATH,g" \
|
||||||
|
-e "s,@SPLASHPATH@,$SPLASHPATH,g" \
|
||||||
|
-i $MBD_BOOTTREE_TMP/EFI/BOOT/grub.conf
|
||||||
|
|
||||||
|
ydcmd="yumdownloader -c $yumconf $grubpkg"
|
||||||
|
echo "(grubpkg) $ydcmd"
|
||||||
|
$ydcmd
|
||||||
|
rpm2cpio $grubpkg.rpm | (cd $KERNELROOT; cpio --quiet -iumd)
|
||||||
|
cp -av $KERNELROOT/boot/efi/EFI/redhat/grub.efi $MBD_BOOTTREE_TMP/EFI/BOOT/grub.efi
|
||||||
|
|
||||||
|
# The first generation Mactel machines get the bootloader name wrong
|
||||||
|
# as per the spec. Awesome, guys.
|
||||||
|
if [ "$efiarch" == "ia32" ]; then
|
||||||
|
cp -av $MBD_BOOTTREE_TMP/EFI/BOOT/grub.efi $MBD_BOOTTREE_TMP/EFI/BOOT/BOOT.efi
|
||||||
|
cp -av $MBD_BOOTTREE_TMP/EFI/BOOT/grub.conf $MBD_BOOTTREE_TMP/EFI/BOOT/BOOT.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
local tmpefiarch=${efiarch}
|
||||||
|
case ${efiarch} in
|
||||||
|
x64) tmpefiarch="X64" ;;
|
||||||
|
ia32) tmpefiarch="IA32" ;;
|
||||||
|
esac
|
||||||
|
mv -v $MBD_BOOTTREE_TMP/EFI/BOOT/grub.efi $MBD_BOOTTREE_TMP/EFI/BOOT/BOOT${tmpefiarch}.efi
|
||||||
|
mv -v $MBD_BOOTTREE_TMP/EFI/BOOT/grub.conf $MBD_BOOTTREE_TMP/EFI/BOOT/BOOT${tmpefiarch}.conf
|
||||||
|
|
||||||
|
artpkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" --whatprovides ${brandpkgname}-logos | grep -v generic-logos | head -1)
|
||||||
|
if [ -z "$artpkg" ]; then
|
||||||
|
argpkg="generic-logos"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ydcmd="yumdownloader -c ${yumconf} ${artpkg}"
|
||||||
|
echo "(artpkg) $ydcmd"
|
||||||
|
$ydcmd
|
||||||
|
rpm2cpio ${artpkg}.rpm | (cd $KERNELROOT; cpio --quiet -iumd)
|
||||||
|
cp -av $KERNELROOT/boot/grub/splash.xpm.gz $MBD_BOOTTREE_TMP/$SPLASHPATH
|
||||||
|
|
||||||
|
# if we don't have a kernel or initrd, we're making a CD image and we need
|
||||||
|
# to mirror EFI/ to the cd.
|
||||||
|
if [ -z "$KERNELFILE" -a -z "$INITRDFILE" ]; then
|
||||||
|
cp -av $MBD_BOOTTREE_TMP/EFI/ $TOPDESTPATH/EFI/
|
||||||
|
rm -f $TOPDESTPATH/EFI/BOOT/*.efi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
makeEfiImages() {
|
||||||
|
echo "in makeEfiImages"
|
||||||
|
yumconf="$1"
|
||||||
|
echo "Making EFI images ($PWD)"
|
||||||
|
if [ "$kernelvers" != "$kernelxen" ]; then
|
||||||
|
local grubarch=${efiarch}
|
||||||
|
case ${efiarch} in
|
||||||
|
ia32) grubarch=i?86 ;;
|
||||||
|
x64) grubarch=x86_64 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
grubpkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" -c $yumconf grub.$grubarch)
|
||||||
|
|
||||||
|
if [ -z "$grubpkg" ]; then
|
||||||
|
echo "cannot find package grub.$grubarch" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo "Building efiboot.img for ${efiarch}/$KERNELARCH at $TOPDESTPATH/images/efiboot.img"
|
||||||
|
echo "grubpkg: ${grubpkg}"
|
||||||
|
|
||||||
|
makeefibootimage \
|
||||||
|
--imagename efiboot.img \
|
||||||
|
--kernel $TOPDESTPATH/images/pxeboot/vmlinuz \
|
||||||
|
--initrd $TOPDESTPATH/images/pxeboot/initrd.img \
|
||||||
|
--grubpkg ${grubpkg}
|
||||||
|
local ret=$?
|
||||||
|
if [ $ret -ne 0 ]; then
|
||||||
|
echo "makeefibootimage (1) failed" >&2
|
||||||
|
return $ret
|
||||||
|
fi
|
||||||
|
|
||||||
|
makeefibootdisk $TOPDESTPATH/images/efiboot.img $TOPDESTPATH/images/efidisk.img
|
||||||
|
local ret=$?
|
||||||
|
[ $ret -eq 0 ] || return $ret
|
||||||
|
rm -vf $TOPDESTPATH/images/efiboot.img
|
||||||
|
|
||||||
|
# make a boot image with just boot*.efi in it...
|
||||||
|
makeefibootimage \
|
||||||
|
--imagename efiboot.img \
|
||||||
|
--kernelpath /images/pxeboot/vmlinuz \
|
||||||
|
--initrdpath /images/pxeboot/initrd.img \
|
||||||
|
--grubpkg ${grubpkg}
|
||||||
|
local ret=$?
|
||||||
|
if [ $ret -ne 0 ]; then
|
||||||
|
echo "makeefibootimage (2) failed" >&2
|
||||||
|
fi
|
||||||
|
return $ret
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
@ -1,4 +1,3 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
#
|
||||||
# mk-images.ia64
|
# mk-images.ia64
|
||||||
#
|
#
|
@ -31,6 +31,7 @@ makeBootImages() {
|
|||||||
$GENINITRDSZ $sz $TOPDESTPATH/images/initrd.size
|
$GENINITRDSZ $sz $TOPDESTPATH/images/initrd.size
|
||||||
cp -vf $KERNELROOT/boot/${KERNELNAME}-${version} $TOPDESTPATH/images/kernel.img
|
cp -vf $KERNELROOT/boot/${KERNELNAME}-${version} $TOPDESTPATH/images/kernel.img
|
||||||
|
|
||||||
|
cp -v $BOOTDISKDIR/redhat.exec $TOPDESTPATH/images/redhat.exec
|
||||||
cp -v $BOOTDISKDIR/generic.prm $TOPDESTPATH/images/generic.prm
|
cp -v $BOOTDISKDIR/generic.prm $TOPDESTPATH/images/generic.prm
|
||||||
cp -v $BOOTDISKDIR/generic.ins $TOPDESTPATH/generic.ins
|
cp -v $BOOTDISKDIR/generic.ins $TOPDESTPATH/generic.ins
|
||||||
|
|
@ -17,7 +17,8 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
SYSLINUX=$IMGPATH/usr/lib/syslinux/syslinux-nomtools
|
SYSLINUX=$IMGPATH/usr/share/syslinux/syslinux-nomtools
|
||||||
|
CDLABEL=$PRODUCT
|
||||||
|
|
||||||
if [ ! -f $SYSLINUX ]; then
|
if [ ! -f $SYSLINUX ]; then
|
||||||
echo "Warning: nomtools syslinux doesn't exist"
|
echo "Warning: nomtools syslinux doesn't exist"
|
||||||
@ -33,12 +34,12 @@ fi
|
|||||||
prepareBootTree() {
|
prepareBootTree() {
|
||||||
(cd $BOOTDISKDIR; find . -maxdepth 1 ! -name "*.msg" ! -type d | cpio --quiet -p $MBD_BOOTTREE)
|
(cd $BOOTDISKDIR; find . -maxdepth 1 ! -name "*.msg" ! -type d | cpio --quiet -p $MBD_BOOTTREE)
|
||||||
|
|
||||||
cp $MBD_FSIMAGE $MBD_BOOTTREE/initrd.img
|
ln $MBD_FSIMAGE $MBD_BOOTTREE/initrd.img
|
||||||
cp $KERNELROOT/boot/vmlinuz-* $MBD_BOOTTREE/vmlinuz
|
cp $KERNELROOT/boot/vmlinuz-* $MBD_BOOTTREE/vmlinuz
|
||||||
|
|
||||||
if [ -f $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg ]; then
|
if [ -f $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg ]; then
|
||||||
cp $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg $MBD_BOOTTREE/splash.jpg
|
cp $IMGPATH/usr/lib/anaconda-runtime/syslinux-vesa-splash.jpg $MBD_BOOTTREE/splash.jpg
|
||||||
cp $IMGPATH/usr/lib/syslinux/vesamenu.c32 $MBD_BOOTTREE/vesamenu.c32
|
cp $IMGPATH/usr/share/syslinux/vesamenu.c32 $MBD_BOOTTREE/vesamenu.c32
|
||||||
sed -i s'/default linux/default vesamenu.c32/g' $MBD_BOOTTREE/syslinux.cfg
|
sed -i s'/default linux/default vesamenu.c32/g' $MBD_BOOTTREE/syslinux.cfg
|
||||||
sed -i 's/prompt 1/#prompt 1/g' $MBD_BOOTTREE/syslinux.cfg
|
sed -i 's/prompt 1/#prompt 1/g' $MBD_BOOTTREE/syslinux.cfg
|
||||||
elif [ -x $IMGPATH/usr/lib/anaconda-runtime/splashtolss.sh ]; then
|
elif [ -x $IMGPATH/usr/lib/anaconda-runtime/splashtolss.sh ]; then
|
||||||
@ -102,18 +103,21 @@ makeBootImages() {
|
|||||||
[ $? = 0 ] || exit 1
|
[ $? = 0 ] || exit 1
|
||||||
|
|
||||||
if [ "$kernelvers" != "$kernelxen" ] ; then
|
if [ "$kernelvers" != "$kernelxen" ] ; then
|
||||||
if [ -f $IMGPATH/usr/lib/syslinux/isolinux.bin ]; then
|
if [ -f $IMGPATH/usr/share/syslinux/isolinux.bin ]; then
|
||||||
echo "Building isolinux directory"
|
echo "Building isolinux directory"
|
||||||
MBD_BOOTTREE=$TOPDESTPATH/isolinux
|
MBD_BOOTTREE=$TOPDESTPATH/isolinux
|
||||||
MBD_FSIMAGE=$TOPDESTPATH/images/pxeboot/initrd.img
|
MBD_FSIMAGE=$TOPDESTPATH/images/pxeboot/initrd.img
|
||||||
mkdir $MBD_BOOTTREE
|
mkdir $MBD_BOOTTREE
|
||||||
cp $IMGPATH/usr/lib/syslinux/isolinux.bin $MBD_BOOTTREE/isolinux.bin
|
cp $IMGPATH/usr/share/syslinux/isolinux.bin $MBD_BOOTTREE/isolinux.bin
|
||||||
|
|
||||||
prepareBootTree
|
prepareBootTree
|
||||||
|
|
||||||
# isolinux needs the config file to be isolinux.cfg
|
# isolinux needs the config file to be isolinux.cfg
|
||||||
mv $MBD_BOOTTREE/syslinux.cfg $MBD_BOOTTREE/isolinux.cfg
|
mv $MBD_BOOTTREE/syslinux.cfg $MBD_BOOTTREE/isolinux.cfg
|
||||||
|
|
||||||
|
# set up the label for finding stage2 with a hybrid iso
|
||||||
|
sed -i 's/initrd=initrd.img/initrd=initrd.img stage2=hd:LABEL=$CDLABEL/' $MBD_BOOTTREE/isolinux.cfg
|
||||||
|
|
||||||
# copy in memtest if present
|
# copy in memtest if present
|
||||||
if [ -f $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* ]; then
|
if [ -f $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* ]; then
|
||||||
cp $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* $MBD_BOOTTREE/memtest
|
cp $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* $MBD_BOOTTREE/memtest
|
||||||
@ -157,8 +161,21 @@ __EOT__
|
|||||||
|
|
||||||
doPostImages() {
|
doPostImages() {
|
||||||
if [ -n "$BOOTISO" ]; then
|
if [ -n "$BOOTISO" ]; then
|
||||||
mkisofs -quiet -o $TOPDESTPATH/images/$BOOTISO -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -V "$PRODUCT" -T -graft-points isolinux=$TOPDESTPATH/isolinux images/install.img=$TOPDESTPATH/images/install.img
|
EFIARGS=""
|
||||||
implantisomd5 $TOPDESTPATH/images/$BOOTISO
|
EFIGRAFT=""
|
||||||
|
if [ -f $TOPDESTPATH/images/efiboot.img ]; then
|
||||||
|
echo "Found efiboot.img, making an EFI-capable boot.iso"
|
||||||
|
EFIARGS="-eltorito-alt-boot -e images/efiboot.img -no-emul-boot"
|
||||||
|
EFIGRAFT="EFI/BOOT=$TOPDESTPATH/EFI/BOOT"
|
||||||
|
else
|
||||||
|
echo "No efiboot.img found, making BIOS-only boot.iso"
|
||||||
|
fi
|
||||||
|
BIOSARGS="-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table"
|
||||||
|
mkisocmd="mkisofs -v -o $TOPDESTPATH/images/$BOOTISO $BIOSARGS $EFIARGS -R -J -V "$CDLABEL" -T -graft-points isolinux=$TOPDESTPATH/isolinux images=$TOPDESTPATH/images $EFIGRAFT"
|
||||||
|
echo $PWD:\$ $mkisocmd
|
||||||
|
$mkisocmd
|
||||||
|
if [ -x /usr/bin/isohybrid ]; then
|
||||||
|
isohybrid $TOPDESTPATH/images/$BOOTISO || echo "Unable to make hybrid boot.iso"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
27
rewrite/scripts/pyrc.py
Normal file
27
rewrite/scripts/pyrc.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#
|
||||||
|
# pyrc.py
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
try:
|
||||||
|
import readline
|
||||||
|
import rlcompleter
|
||||||
|
readline.parse_and_bind("tab: complete")
|
||||||
|
del rlcompleter
|
||||||
|
del readline
|
||||||
|
except:
|
||||||
|
pass
|
@ -34,7 +34,7 @@ p=$1
|
|||||||
|
|
||||||
ARCH=`uname -m | sed -e 's/i.86/i386/'`
|
ARCH=`uname -m | sed -e 's/i.86/i386/'`
|
||||||
|
|
||||||
if [ $ARCH = x86_64 -o $ARCH = s390x ]; then
|
if [ $ARCH = x86_64 -o $ARCH = s390x -o $ARCH = ppc64 ]; then
|
||||||
LIBDIR=lib64
|
LIBDIR=lib64
|
||||||
else
|
else
|
||||||
LIBDIR=lib
|
LIBDIR=lib
|
||||||
@ -53,30 +53,4 @@ if [ $ARCH != s390 -a $ARCH != s390x ]; then
|
|||||||
fi
|
fi
|
||||||
rm $p/etc/ld.so.conf
|
rm $p/etc/ld.so.conf
|
||||||
|
|
||||||
#
|
|
||||||
# make sure we have links for programs supplied by busybox
|
|
||||||
#
|
|
||||||
# HOWEVER dont clobber existing programs supplied by other packages if exist
|
|
||||||
#
|
|
||||||
mv $p/usr/sbin/busybox.anaconda $p/usr/bin/busybox
|
|
||||||
(cd $p/usr/bin;
|
|
||||||
set $(./busybox 2>&1| awk '/^\t([[:alnum:]\-_\.\[]+,)+/' | sed 's/,//g' | sed 's/ +//');
|
|
||||||
dontclobber=(sh busybox reboot shutdown poweroff)
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
save=
|
|
||||||
for n in ${dontclobber[@]} ; do
|
|
||||||
if [ "$1" == "$n" ]; then
|
|
||||||
save=$n
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
# if it's not in our list and it doesn't exist, link to busybox
|
|
||||||
if [ -z "$save" -a ! -f "$1" -a ! -f "$p/usr/sbin/$1" ]; then
|
|
||||||
ln -sf ./busybox $1
|
|
||||||
else
|
|
||||||
[ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
)
|
|
||||||
|
|
||||||
umount $p/proc
|
umount $p/proc
|
71
rewrite/scripts/upd-bootimage
Executable file
71
rewrite/scripts/upd-bootimage
Executable file
@ -0,0 +1,71 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# upd-bootimage
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "$0: <image> <binary> [<initrdpath>]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f $1 ]; then
|
||||||
|
echo "$1 doesn't exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
MNTPOINT=/tmp/updboottree.$$
|
||||||
|
INITRD=/tmp/updboottree.$$.initrd
|
||||||
|
LOOPMNT=/tmp/updboottree.$$.initrdmnt
|
||||||
|
|
||||||
|
rm -rf $MNTPOINT $LOOPMNT
|
||||||
|
mkdir $MNTPOINT $LOOPMNT
|
||||||
|
mount -t vfat -o loop $1 $MNTPOINT
|
||||||
|
|
||||||
|
gunzip < $MNTPOINT/initrd.img > $INITRD
|
||||||
|
|
||||||
|
mount -o loop $INITRD $LOOPMNT
|
||||||
|
|
||||||
|
FROM=$2
|
||||||
|
TO=$FROM
|
||||||
|
if [ $(echo $FROM | cut -d- -f1) = loader ]; then
|
||||||
|
TO=loader
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x $LOOPMNT/sbin/$TO ]; then
|
||||||
|
echo "$LOOPMNT/sbin/$TO doesn't exist"
|
||||||
|
else
|
||||||
|
cp $FROM $FROM.foo
|
||||||
|
strip $FROM.foo
|
||||||
|
install $FROM.foo $LOOPMNT/sbin/$TO
|
||||||
|
rm -f $FROM.foo
|
||||||
|
fi
|
||||||
|
|
||||||
|
umount $LOOPMNT
|
||||||
|
gzip -9 < $INITRD > $INITRD.new
|
||||||
|
cp $INITRD.new $MNTPOINT/initrd.img
|
||||||
|
if [ -f $MNTPOINT/efi/boot/initrd.img ]; then
|
||||||
|
cp $INITRD.new $MNTPOINT/efi/boot/initrd.img
|
||||||
|
fi
|
||||||
|
umount $MNTPOINT
|
||||||
|
|
||||||
|
if [ -n "$3" -a -f "$3" ]; then
|
||||||
|
echo "Replacing $3"
|
||||||
|
cp -f $INITRD.new $3
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf $MNTPOINT $LOOPMNT $INITRD $INITRD.new
|
43
rewrite/scripts/upd-initrd
Executable file
43
rewrite/scripts/upd-initrd
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Updates an installer initrd with a new loader binary
|
||||||
|
# Usage: upd-initrd <initrd> <binary> <outfile>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2005 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# Author(s): Jeremy Katz <katzj@redhat.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
if [ $# -ne 3 ]; then
|
||||||
|
echo "Usage: $0 <initrd> <binary> <outfile>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
INITRD=`readlink -f $1`
|
||||||
|
BIN=`readlink -f $2`
|
||||||
|
if [ -f $3 ]; then
|
||||||
|
OUT=`readlink -f $3`
|
||||||
|
else
|
||||||
|
OUT=`readlink -f .`/$3
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmpdir=$(mktemp -d)
|
||||||
|
pushd $tmpdir
|
||||||
|
zcat $INITRD |cpio -id
|
||||||
|
strip -s -o sbin/$(basename $BIN) $BIN
|
||||||
|
(find . |cpio -c -o |gzip -9) > $OUT
|
||||||
|
popd
|
||||||
|
rm -rf $tmpdir
|
@ -99,7 +99,9 @@ expandPackageSet() {
|
|||||||
KEEPFILES=$5
|
KEEPFILES=$5
|
||||||
|
|
||||||
[ -d $PKGDEST ] || die "ERROR: directory missing: $PKGDEST"
|
[ -d $PKGDEST ] || die "ERROR: directory missing: $PKGDEST"
|
||||||
if [ -z "$DEBUG" ]; then outlvl="--quiet" ; else outlvl="--verbose"; fi
|
|
||||||
|
[ -z "$DEBUG" ] && outlvl="--quiet" || outlvl="--verbose"
|
||||||
|
|
||||||
yum $outlvl -c $YUMCONF -y --installroot=$YUMDIR install $RPMS 2>&1 || die "ERROR: could not install packages"
|
yum $outlvl -c $YUMCONF -y --installroot=$YUMDIR install $RPMS 2>&1 || die "ERROR: could not install packages"
|
||||||
|
|
||||||
if [ -n "$UPDATES" ]; then
|
if [ -n "$UPDATES" ]; then
|
||||||
@ -148,63 +150,61 @@ die () {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
PACKAGES="GConf2 NetworkManager ORBit2 PolicyKit VLGothic-fonts acl anaconda
|
PACKAGES="GConf2 NetworkManager ORBit2 PolicyKit acl anaconda
|
||||||
anaconda-yum-plugins at-spi atk attr audit-libs bash bitmap-fonts-cjk
|
anaconda-yum-plugins at-spi atk attr audit-libs bash bitmap-fonts-cjk
|
||||||
booty busybox-anaconda bzip2 bzip2-libs cairo cjkunifonts-ukai
|
btrfs-progs bzip2 bzip2-libs cairo cjkuni-uming-fonts
|
||||||
comps-extras coreutils cpio cracklib-dicts cracklib-python
|
comps-extras coreutils cpio cracklib cracklib-dicts cracklib-python
|
||||||
cryptsetup-luks db4 dbus dbus-python dejavu-fonts device-mapper
|
cryptsetup-luks db4 dbus dbus-python dejavu-sans-fonts
|
||||||
device-mapper-libs dhclient dhcpv6-client dmapi dmraid dmraid-libs
|
dejavu-sans-mono-fonts device-mapper
|
||||||
dogtail dosfstools e2fsprogs e2fsprogs-libs echo-icon-theme
|
device-mapper-libs dhclient dhcpv6-client dmraid dmraid-libs
|
||||||
elfutils-libelf expat firstboot fontconfig fonts-arabic fonts-bengali
|
dogtail dosfstools e2fsprogs e2fsprogs-libs echo-icon-theme ethtool
|
||||||
fonts-chinese fonts-gujarati fonts-hindi fonts-indic fonts-ISO8859-2
|
elfutils-libelf expat firstboot fontconfig fonts-ISO8859-2 freetype gail gawk gdb-gdbserver
|
||||||
fonts-kannada fonts-oriya fonts-punjabi
|
gdk-pixbuf gfs2-utils glib2 glibc-common gnome-python2-canvas gnome-python2-gconf
|
||||||
fonts-sinhala fonts-tamil fonts-telugu freetype gail gdk-pixbuf
|
gnome-python2-gtkhtml2 gnome-themes gpm grep gtk2 gtk2-engines gtkhtml2 hal
|
||||||
gfs2-utils glib2 glibc-common gnome-python2-canvas gnome-python2-gconf
|
|
||||||
gnome-python2-gtkhtml2 gnome-themes gpm gtk2 gtk2-engines gtkhtml2 hal
|
|
||||||
hdparm hwdata initscripts iproute iputils iscsi-initiator-utils
|
hdparm hwdata initscripts iproute iputils iscsi-initiator-utils
|
||||||
jfsutils keyutils-libs krb5-libs libICE libSM libX11 libXau
|
jfsutils keyutils-libs krb5-libs libICE libSM libX11 libXau
|
||||||
libXaw libXcursor libXdmcp libXevie libXext libXfixes libXfont libXft
|
libXaw libXcursor libXdmcp libXevie libXext libXfixes libXfont libXft
|
||||||
libXi libXinerama libXmu libXpm libXrandr libXrender libXt libXtst
|
libXi libXinerama libXmu libXpm libXrandr libXrender libXt libXtst
|
||||||
libXxf86misc libacl libart_lgpl libattr libbdevid libbdevid-python
|
libXxf86misc libacl libart_lgpl libattr libbdevid libbdevid-python
|
||||||
libbonobo libdhcp libdhcp4client libdhcp6client libfontenc libgcc
|
libbonobo libfontenc libgcc
|
||||||
libglade2 libgnomecanvas libgcrypt libgpg-error libjpeg liblbxutil libnl
|
libglade2 libgnomecanvas libgcrypt libgpg-error libjpeg libnl
|
||||||
libpixman libpng libselinux libselinux-python libsemanage
|
libpng libselinux libselinux-python libsemanage
|
||||||
libsemanage-python libsepol libstdc++ libtermcap libthai libuser
|
libsemanage-python libsepol libstdc++ libthai libuser
|
||||||
libuser-python libvolume_id libxcb libxkbfile libxml2 lvm2 mdadm
|
libuser-python libvolume_id libxcb libxkbfile libxml2 lklug-fonts
|
||||||
|
lohit-assamese-fonts lohit-bengali-fonts lohit-gujarati-fonts lohit-hindi-fonts
|
||||||
|
lohit-kashmiri-fonts lohit-kannada-fonts lohit-maithili-fonts lohit-marathi-fonts
|
||||||
|
lohit-oriya-fonts lohit-punjabi-fonts lohit-sindhi-fonts lohit-tamil-fonts
|
||||||
|
lohit-telugu-fonts lvm2 madan-fonts mdadm
|
||||||
mesa-dri-drivers mkinitrd module-init-tools nash ncurses neon net-tools
|
mesa-dri-drivers mkinitrd module-init-tools nash ncurses neon net-tools
|
||||||
newt newt-python nfs-utils nspr nss pam pango parted pciutils pcre
|
newt newt-python nfs-utils nspr nss ntfs-3g pam pango parted pciutils pcre
|
||||||
policy policycoreutils popt prelink procps pycairo pygobject2 pygtk2
|
policycoreutils popt prelink procps pycairo pygobject2 pygtk2
|
||||||
pygtk2-libglade pykickstart pyparted pyspi python python-bugzilla
|
pygtk2-libglade pykickstart pyparted python python-bugzilla python-decorator
|
||||||
python-elementtree python-libs python-pyblock python-sqlite
|
python-libs python-pyblock python-sqlite
|
||||||
python-urlgrabber pyxf86config raidtools readline redhat-artwork
|
python-urlgrabber pyxf86config readline redhat-artwork
|
||||||
reiserfs-utils rhpl rpm rpm-libs rpm-python sed selinux-policy-targeted
|
reiserfs-utils rhpl rpm rpm-libs rpm-python sed selinux-policy-targeted
|
||||||
setup slang smc-fonts-meera specspo sqlite synaptics system-config-date
|
setup slang smc-meera-fonts specspo sqlite synaptics system-config-date
|
||||||
system-config-keyboard system-logos system-release taipeifonts
|
system-config-keyboard ${brandpkgname}-logos ${brandpkgname}-release taipeifonts tcp_wrappers
|
||||||
tcp_wrappers ttfonts-bn ttfonts-gu ttfonts-hi ttfonts-ja ttfonts-ko
|
tzdata udev un-core-fonts-dotum urw-fonts util-linux-ng tigervnc-server
|
||||||
ttfonts-pa ttfonts-ta ttfonts-zh_CN ttfonts-zh_TW tzdata udev
|
tigervnc-server-module vlgothic-fonts vim-minimal
|
||||||
un-core-fonts-dotum urw-fonts
|
wpa_supplicant xkeyboard-config xfsdump xfsprogs xorg-x11-auth
|
||||||
util-linux-ng vnc-libs vnc-server wpa_supplicant xkeyboard-config
|
xorg-x11-drivers xorg-x11-font-utils xorg-x11-fonts-ethiopic
|
||||||
xfsdump xfsprogs xorg-x11 xorg-x11-auth xorg-x11-base
|
xorg-x11-fonts-misc xorg-x11-server-utils
|
||||||
xorg-x11-drivers xorg-x11-font-utils xorg-x11-fonts-100dpi
|
xorg-x11-server-Xorg xorg-x11-xkb-utils xorg-x11-xfs yum
|
||||||
xorg-x11-fonts-75dpi xorg-x11-fonts-ISO8859-1-75dpi
|
|
||||||
xorg-x11-fonts-ISO8859-15-75dpi xorg-x11-fonts-ISO8859-2-75dpi
|
|
||||||
xorg-x11-fonts-ISO8859-9-75dpi xorg-x11-fonts-cyrillic
|
|
||||||
xorg-x11-fonts-ethiopic xorg-x11-fonts-misc xorg-x11-libs
|
|
||||||
xorg-x11-libs-data xorg-x11-server-utils xorg-x11-server-Xorg
|
|
||||||
xorg-x11-xkb-utils xorg-x11-xkbdata xorg-x11-xfs yum yum-fedorakmod
|
|
||||||
yum-metadata-parser zenity zlib /etc/gtk-2.0/gtkrc"
|
yum-metadata-parser zenity zlib /etc/gtk-2.0/gtkrc"
|
||||||
|
|
||||||
if [ $ARCH = i386 ]; then
|
if [ $ARCH = i386 ]; then
|
||||||
PACKAGES="$PACKAGES glibc.i386 openssl.i386"
|
PACKAGES="$PACKAGES glibc.i386 openssl.i386"
|
||||||
|
elif [ $ARCH = i586 ]; then
|
||||||
|
PACKAGES="$PACKAGES glibc.i586 openssl.i586"
|
||||||
else
|
else
|
||||||
PACKAGES="$PACKAGES glibc openssl"
|
PACKAGES="$PACKAGES glibc openssl"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
|
if [ $ARCH = i386 -o $ARCH = i586 -o $ARCH = x86_64 ]; then
|
||||||
PACKAGES="$PACKAGES pcmciautils grub"
|
PACKAGES="$PACKAGES pcmciautils grub"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $ARCH = i386 -o $ARCH = x86_64 -o $ARCH = ia64 ]; then
|
if [ $ARCH = i386 -o $ARCH = i586 -o $ARCH = x86_64 -o $ARCH = ia64 ]; then
|
||||||
PACKAGES="$PACKAGES dmidecode efibootmgr"
|
PACKAGES="$PACKAGES dmidecode efibootmgr"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -216,8 +216,8 @@ fi
|
|||||||
if [ $ARCH = s390 -o $ARCH = s390x ]; then
|
if [ $ARCH = s390 -o $ARCH = s390x ]; then
|
||||||
PACKAGES="$PACKAGES s390utils binutils libgcc tcp_wrappers
|
PACKAGES="$PACKAGES s390utils binutils libgcc tcp_wrappers
|
||||||
sed net-tools openssh openssh-server coreutils
|
sed net-tools openssh openssh-server coreutils
|
||||||
login initscripts bash portmap pam
|
login initscripts portmap pam
|
||||||
login mount grep modutils gawk
|
login mount modutils s390utils-cmsfs
|
||||||
strace xorg-x11-xauth xorg-x11-libs"
|
strace xorg-x11-xauth xorg-x11-libs"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -232,12 +232,12 @@ fi
|
|||||||
#
|
#
|
||||||
PACKAGESRESCUE="bzip2 bzip2-libs dump libidn
|
PACKAGESRESCUE="bzip2 bzip2-libs dump libidn
|
||||||
findutils ftp gzip iputils joe krb5-libs less man
|
findutils ftp gzip iputils joe krb5-libs less man
|
||||||
modutils mtools mt-st mtr net-tools open smartmontools
|
modutils mtools mt-st mtr net-tools smartmontools
|
||||||
openssh openssh-clients pciutils rsh traceroute tar rsync
|
openssh openssh-clients pciutils rsh traceroute tar rsync
|
||||||
device-mapper device-mapper-libs dmraid ntfsprogs samba-client
|
device-mapper device-mapper-libs dmraid ntfsprogs samba-client
|
||||||
firstaidkit-plugin-all"
|
firstaidkit firstaidkit-plugin-all dialog"
|
||||||
|
|
||||||
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
|
if [ $ARCH = i386 -o $ARCH = i586 -o $ARCH = x86_64 ]; then
|
||||||
PACKAGESRESCUE="$PACKAGESRESCUE gpart grub"
|
PACKAGESRESCUE="$PACKAGESRESCUE gpart grub"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -248,7 +248,7 @@ if [ $ARCH = sparc ]; then
|
|||||||
PACKAGES="$PACKAGES tilo silo"
|
PACKAGES="$PACKAGES tilo silo"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
|
if [ $ARCH = i386 -o $ARCH = i586 -o $ARCH = x86_64 ]; then
|
||||||
PACKAGES="$PACKAGES syslinux memtest86+ grub"
|
PACKAGES="$PACKAGES syslinux memtest86+ grub"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -283,28 +283,53 @@ $LIBDIR/libnsspem.so
|
|||||||
$LIBDIR/libsmime3.so
|
$LIBDIR/libsmime3.so
|
||||||
$LIBDIR/libsoftokn3.so
|
$LIBDIR/libsoftokn3.so
|
||||||
$LIBDIR/libssl3.so
|
$LIBDIR/libssl3.so
|
||||||
|
bin/arch
|
||||||
|
bin/basename
|
||||||
bin/bash
|
bin/bash
|
||||||
bin/cat
|
bin/cat
|
||||||
|
bin/chgrp
|
||||||
bin/chmod
|
bin/chmod
|
||||||
|
bin/chown
|
||||||
bin/cp
|
bin/cp
|
||||||
bin/cpio
|
bin/cpio
|
||||||
|
bin/cut
|
||||||
|
bin/date
|
||||||
bin/dbus-daemon
|
bin/dbus-daemon
|
||||||
bin/dbus-uuidgen
|
bin/dbus-uuidgen
|
||||||
bin/dd
|
bin/dd
|
||||||
bin/df
|
bin/df
|
||||||
|
bin/dmesg
|
||||||
bin/du
|
bin/du
|
||||||
|
bin/echo
|
||||||
|
bin/env
|
||||||
|
bin/false
|
||||||
bin/fdisk*
|
bin/fdisk*
|
||||||
|
bin/gawk
|
||||||
|
bin/*grep
|
||||||
|
bin/hostname
|
||||||
|
bin/kill
|
||||||
bin/ln
|
bin/ln
|
||||||
bin/ls
|
bin/ls
|
||||||
bin/mkdir
|
bin/mkdir
|
||||||
|
bin/mknod
|
||||||
|
bin/mktemp
|
||||||
|
bin/more
|
||||||
bin/mount
|
bin/mount
|
||||||
bin/mv
|
bin/mv
|
||||||
|
bin/ntfs-3g
|
||||||
bin/ps
|
bin/ps
|
||||||
|
bin/pwd
|
||||||
bin/rm
|
bin/rm
|
||||||
|
bin/rmdir
|
||||||
bin/rpm
|
bin/rpm
|
||||||
bin/sed
|
bin/sed
|
||||||
|
bin/sleep
|
||||||
|
bin/sort
|
||||||
|
bin/sync
|
||||||
bin/touch
|
bin/touch
|
||||||
|
bin/true
|
||||||
bin/umount
|
bin/umount
|
||||||
|
bin/vi
|
||||||
boot/*.b
|
boot/*.b
|
||||||
boot/bootlx
|
boot/bootlx
|
||||||
boot/efi/EFI/redhat/elilo.efi
|
boot/efi/EFI/redhat/elilo.efi
|
||||||
@ -321,6 +346,7 @@ etc/fonts
|
|||||||
etc/group
|
etc/group
|
||||||
etc/gtk-2.0/gtkrc*
|
etc/gtk-2.0/gtkrc*
|
||||||
etc/hal
|
etc/hal
|
||||||
|
etc/hosts
|
||||||
etc/im_palette.pal
|
etc/im_palette.pal
|
||||||
etc/imrc
|
etc/imrc
|
||||||
etc/iscsid.conf
|
etc/iscsid.conf
|
||||||
@ -349,7 +375,8 @@ lib/udev
|
|||||||
sbin/*gfs*
|
sbin/*gfs*
|
||||||
sbin/arping
|
sbin/arping
|
||||||
sbin/badblocks
|
sbin/badblocks
|
||||||
sbin/busybox.anaconda
|
sbin/btrfsctl
|
||||||
|
sbin/btrfsck
|
||||||
sbin/clock
|
sbin/clock
|
||||||
sbin/consoletype
|
sbin/consoletype
|
||||||
sbin/cryptsetup
|
sbin/cryptsetup
|
||||||
@ -359,13 +386,13 @@ sbin/dhclient-script
|
|||||||
sbin/dhcp6c
|
sbin/dhcp6c
|
||||||
sbin/dosfslabel
|
sbin/dosfslabel
|
||||||
sbin/dumpe2fs
|
sbin/dumpe2fs
|
||||||
sbin/e2fsadm
|
sbin/fsadm
|
||||||
sbin/e2fsck
|
sbin/e2fsck
|
||||||
sbin/e2label
|
sbin/e2label
|
||||||
|
sbin/ethtool
|
||||||
sbin/fdisk
|
sbin/fdisk
|
||||||
sbin/fsck
|
sbin/fsck
|
||||||
sbin/fsck.ext2
|
sbin/fsck.ext*
|
||||||
sbin/fsck.ext3
|
|
||||||
sbin/fsck.jfs
|
sbin/fsck.jfs
|
||||||
sbin/fsck.reiserfs
|
sbin/fsck.reiserfs
|
||||||
sbin/fsck.xfs
|
sbin/fsck.xfs
|
||||||
@ -381,10 +408,11 @@ sbin/ldconfig
|
|||||||
sbin/lspci
|
sbin/lspci
|
||||||
sbin/lvm*
|
sbin/lvm*
|
||||||
sbin/mdadm
|
sbin/mdadm
|
||||||
|
sbin/mdmon
|
||||||
sbin/mkdosfs
|
sbin/mkdosfs
|
||||||
sbin/mke2fs
|
sbin/mke2fs
|
||||||
sbin/mkfs.ext2
|
sbin/mkfs.btrfs
|
||||||
sbin/mkfs.ext3
|
sbin/mkfs.ext*
|
||||||
sbin/mkfs.gfs2
|
sbin/mkfs.gfs2
|
||||||
sbin/mkfs.jfs
|
sbin/mkfs.jfs
|
||||||
sbin/mkfs.msdos
|
sbin/mkfs.msdos
|
||||||
@ -394,6 +422,7 @@ sbin/mkraid
|
|||||||
sbin/mkreiserfs
|
sbin/mkreiserfs
|
||||||
sbin/mkswap
|
sbin/mkswap
|
||||||
sbin/mount.nfs*
|
sbin/mount.nfs*
|
||||||
|
sbin/mount.ntfs*
|
||||||
sbin/parted
|
sbin/parted
|
||||||
sbin/pcmcia-socket-startup
|
sbin/pcmcia-socket-startup
|
||||||
sbin/pdisk
|
sbin/pdisk
|
||||||
@ -401,9 +430,12 @@ sbin/probe
|
|||||||
sbin/reiserfsck
|
sbin/reiserfsck
|
||||||
sbin/reiserfstune
|
sbin/reiserfstune
|
||||||
sbin/resize2fs
|
sbin/resize2fs
|
||||||
|
sbin/route
|
||||||
sbin/setfiles
|
sbin/setfiles
|
||||||
sbin/sfdisk
|
sbin/sfdisk
|
||||||
sbin/silo
|
sbin/silo
|
||||||
|
sbin/swapoff
|
||||||
|
sbin/swapon
|
||||||
sbin/tune2fs
|
sbin/tune2fs
|
||||||
sbin/udev*
|
sbin/udev*
|
||||||
sbin/umount.nfs*
|
sbin/umount.nfs*
|
||||||
@ -425,32 +457,18 @@ usr/$LIBDIR/hal
|
|||||||
usr/$LIBDIR/libuser/*
|
usr/$LIBDIR/libuser/*
|
||||||
usr/$LIBDIR/pango
|
usr/$LIBDIR/pango
|
||||||
usr/$LIBDIR/python?.?
|
usr/$LIBDIR/python?.?
|
||||||
usr/$LIBDIR/python?.?/email
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/*.pth
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/*selinux*
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/*sqlite*
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/_dbus*
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/bdevid.so
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/block
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/cElementTree.so
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/cairo
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/firstboot
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/gtk*
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/gtk*/gtk
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/ixf86configmodule.so
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/libusermodule.so
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/partedmodule.so
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/rhpl
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/rpmmodule.so
|
|
||||||
usr/$LIBDIR/python?.?/site-packages/xf86config.py
|
|
||||||
usr/$LIBDIR/python?.?/xml/etree/
|
|
||||||
usr/$LIBDIR/rpm/rpmpopt
|
usr/$LIBDIR/rpm/rpmpopt
|
||||||
|
usr/$LIBDIR/libiscsi.so*
|
||||||
usr/$LIBDIR/libsqlite3.so*
|
usr/$LIBDIR/libsqlite3.so*
|
||||||
usr/$LIBDIR/xorg/modules
|
usr/$LIBDIR/xorg/modules
|
||||||
usr/$LIBDIR/xserver/SecurityPolicy
|
usr/$LIBDIR/xserver/SecurityPolicy
|
||||||
|
usr/bin/[
|
||||||
usr/bin/Xorg
|
usr/bin/Xorg
|
||||||
usr/bin/Xvnc
|
usr/bin/Xvnc
|
||||||
usr/bin/chattr*
|
usr/bin/chattr*
|
||||||
|
usr/bin/du
|
||||||
|
usr/bin/expr
|
||||||
|
usr/bin/gdb-gdbserver
|
||||||
usr/bin/gdialog
|
usr/bin/gdialog
|
||||||
usr/bin/gdk-pixbuf-query-loaders*
|
usr/bin/gdk-pixbuf-query-loaders*
|
||||||
usr/bin/gtk-query*
|
usr/bin/gtk-query*
|
||||||
@ -465,18 +483,24 @@ usr/bin/logger
|
|||||||
usr/bin/lsattr*
|
usr/bin/lsattr*
|
||||||
usr/bin/lshal
|
usr/bin/lshal
|
||||||
usr/bin/maketilo
|
usr/bin/maketilo
|
||||||
|
usr/bin/md5sum
|
||||||
usr/bin/mini-wm
|
usr/bin/mini-wm
|
||||||
usr/bin/mkzimage
|
usr/bin/mkzimage
|
||||||
usr/bin/pango*
|
usr/bin/pango*
|
||||||
usr/bin/python
|
usr/bin/python
|
||||||
usr/bin/python?.?
|
usr/bin/python?.?
|
||||||
|
usr/bin/readlink
|
||||||
usr/bin/reduce-font
|
usr/bin/reduce-font
|
||||||
usr/bin/setxkbmap
|
usr/bin/setxkbmap
|
||||||
|
usr/bin/sha1sum
|
||||||
|
usr/bin/split
|
||||||
usr/bin/syslinux
|
usr/bin/syslinux
|
||||||
usr/bin/tac
|
usr/bin/tac
|
||||||
usr/bin/tail
|
usr/bin/tail
|
||||||
|
usr/bin/tee
|
||||||
usr/bin/tilo
|
usr/bin/tilo
|
||||||
usr/bin/udevinfo
|
usr/bin/wc
|
||||||
|
usr/bin/udev*
|
||||||
usr/bin/uniq
|
usr/bin/uniq
|
||||||
usr/bin/vncconfig
|
usr/bin/vncconfig
|
||||||
usr/bin/vncpasswd
|
usr/bin/vncpasswd
|
||||||
@ -488,24 +512,17 @@ usr/lib/anaconda-runtime
|
|||||||
usr/lib/anaconda/installclasses
|
usr/lib/anaconda/installclasses
|
||||||
usr/lib/anaconda/iw
|
usr/lib/anaconda/iw
|
||||||
usr/lib/anaconda/textw
|
usr/lib/anaconda/textw
|
||||||
usr/lib/booty
|
usr/lib/anaconda/booty
|
||||||
|
usr/lib/anaconda/storage
|
||||||
|
usr/lib/anaconda/storage/devicelibs
|
||||||
|
usr/lib/anaconda/storage/formats
|
||||||
usr/lib/kernel-wrapper
|
usr/lib/kernel-wrapper
|
||||||
usr/lib/locale
|
usr/lib/locale
|
||||||
usr/lib/python?.?/site-packages/bugzilla*
|
usr/lib/python?.?
|
||||||
usr/lib/python?.?/site-packages/cracklibmodule.so
|
|
||||||
usr/lib/python?.?/site-packages/dbus
|
|
||||||
usr/lib/python?.?/site-packages/dbus_bindings.py*
|
|
||||||
usr/lib/python?.?/site-packages/elementtree
|
|
||||||
usr/lib/python?.?/site-packages/iniparse
|
|
||||||
usr/lib/python?.?/site-packages/pykickstart
|
|
||||||
usr/lib/python?.?/site-packages/repomd
|
|
||||||
usr/lib/python?.?/site-packages/rpmUtils
|
|
||||||
usr/lib/python?.?/site-packages/urlgrabber
|
|
||||||
usr/lib/python?.?/site-packages/yum
|
|
||||||
usr/lib/rpm/macros
|
usr/lib/rpm/macros
|
||||||
usr/lib/rpm/rpmpopt
|
usr/lib/rpm/rpmpopt
|
||||||
usr/lib/rpm/rpmrc
|
usr/lib/rpm/rpmrc
|
||||||
usr/lib/syslinux
|
usr/share/syslinux
|
||||||
usr/lib/yaboot
|
usr/lib/yaboot
|
||||||
usr/lib/yum-plugins/blacklist.py*
|
usr/lib/yum-plugins/blacklist.py*
|
||||||
usr/lib/yum-plugins/fedorakmod.py*
|
usr/lib/yum-plugins/fedorakmod.py*
|
||||||
@ -559,22 +576,29 @@ usr/share/anaconda/anaconda.conf
|
|||||||
usr/share/cracklib
|
usr/share/cracklib
|
||||||
usr/share/dbus-1
|
usr/share/dbus-1
|
||||||
usr/share/fonts/*/lklug.ttf
|
usr/share/fonts/*/lklug.ttf
|
||||||
|
usr/share/fonts/*/lohit_as.ttf
|
||||||
usr/share/fonts/*/lohit_bn.ttf
|
usr/share/fonts/*/lohit_bn.ttf
|
||||||
usr/share/fonts/*/lohit_gu.ttf
|
usr/share/fonts/*/lohit_gu.ttf
|
||||||
usr/share/fonts/*/lohit_hi.ttf
|
usr/share/fonts/*/lohit_hi.ttf
|
||||||
usr/share/fonts/*/lohit_kn.ttf
|
usr/share/fonts/*/lohit_kn.ttf
|
||||||
|
usr/share/fonts/*/lohit_ks.ttf
|
||||||
|
usr/share/fonts/*/lohit_mai.ttf
|
||||||
|
usr/share/fonts/*/lohit_mr.ttf
|
||||||
usr/share/fonts/*/lohit_or.ttf
|
usr/share/fonts/*/lohit_or.ttf
|
||||||
usr/share/fonts/*/lohit_pa.ttf
|
usr/share/fonts/*/lohit_pa.ttf
|
||||||
|
usr/share/fonts/*/lohit_sd.ttf
|
||||||
usr/share/fonts/*/lohit_ta.ttf
|
usr/share/fonts/*/lohit_ta.ttf
|
||||||
usr/share/fonts/*/lohit_te.ttf
|
usr/share/fonts/*/lohit_te.ttf
|
||||||
usr/share/fonts/VLGothic/VL-Gothic-Regular.ttf
|
usr/share/fonts/*/lklug.ttf
|
||||||
usr/share/fonts/cjkunifonts-uming/uming*.ttf
|
usr/share/fonts/cjkuni*/uming*.ttc
|
||||||
usr/share/fonts/dejavu/DejaVuSans-Bold.ttf
|
usr/share/fonts/dejavu/DejaVuSans-Bold.ttf
|
||||||
usr/share/fonts/dejavu/DejaVuSans.ttf
|
usr/share/fonts/dejavu/DejaVuSans.ttf
|
||||||
usr/share/fonts/dejavu/DejaVuSansMono.ttf
|
usr/share/fonts/dejavu/DejaVuSansMono.ttf
|
||||||
usr/share/fonts/kacst/KacstFarsi.ttf
|
usr/share/fonts/kacst/KacstFarsi.ttf
|
||||||
usr/share/fonts/kacst/KacstQura.ttf
|
usr/share/fonts/kacst/KacstQura.ttf
|
||||||
|
usr/share/fonts/madan/Madan.ttf
|
||||||
usr/share/fonts/un-core/UnDotum.ttf
|
usr/share/fonts/un-core/UnDotum.ttf
|
||||||
|
usr/share/fonts/*/VL-Gothic-Regular.ttf
|
||||||
usr/share/fonts/smc/Meera*.ttf
|
usr/share/fonts/smc/Meera*.ttf
|
||||||
usr/share/hal
|
usr/share/hal
|
||||||
usr/share/hwdata/MonitorsDB
|
usr/share/hwdata/MonitorsDB
|
||||||
@ -583,6 +607,7 @@ usr/share/hwdata/usb.ids
|
|||||||
usr/share/hwdata/videoaliases
|
usr/share/hwdata/videoaliases
|
||||||
usr/share/hwdata/videodrivers
|
usr/share/hwdata/videodrivers
|
||||||
usr/share/locale/*/LC_MESSAGES/anaconda.mo
|
usr/share/locale/*/LC_MESSAGES/anaconda.mo
|
||||||
|
usr/share/locale/*/LC_MESSAGES/cracklib.mo
|
||||||
usr/share/locale/*/LC_MESSAGES/gtk20.mo
|
usr/share/locale/*/LC_MESSAGES/gtk20.mo
|
||||||
usr/share/locale/*/LC_MESSAGES/libc.mo
|
usr/share/locale/*/LC_MESSAGES/libc.mo
|
||||||
usr/share/locale/*/LC_MESSAGES/parted.mo
|
usr/share/locale/*/LC_MESSAGES/parted.mo
|
||||||
@ -613,7 +638,7 @@ usr/share/terminfo/x/xterm
|
|||||||
usr/share/xorg/extramodes
|
usr/share/xorg/extramodes
|
||||||
usr/share/xorg/vesamodes
|
usr/share/xorg/vesamodes
|
||||||
usr/share/zenity
|
usr/share/zenity
|
||||||
usr/share/zoneinfo/zone.tab
|
usr/share/zoneinfo
|
||||||
var/cache/hald
|
var/cache/hald
|
||||||
var/lib/PolicyKit*
|
var/lib/PolicyKit*
|
||||||
var/lib/dbus
|
var/lib/dbus
|
||||||
@ -636,31 +661,15 @@ usr/share/terminfo/x/xterm
|
|||||||
usr/share/terminfo/x/xterm-color
|
usr/share/terminfo/x/xterm-color
|
||||||
usr/bin/strace
|
usr/bin/strace
|
||||||
usr/bin/ldd
|
usr/bin/ldd
|
||||||
usr/sbin/chroot
|
|
||||||
usr/sbin/sshd
|
usr/sbin/sshd
|
||||||
usr/sbin/glibc_post_upgrade
|
usr/sbin/glibc_post_upgrade
|
||||||
sbin/cmsfslst
|
sbin/cmsfslst
|
||||||
sbin/cmsfscat
|
sbin/cmsfscat
|
||||||
sbin/busybox.anaconda
|
|
||||||
sbin/ifconfig
|
|
||||||
sbin/route
|
|
||||||
sbin/portmap
|
sbin/portmap
|
||||||
sbin/fdasd
|
sbin/fdasd
|
||||||
sbin/dasdfmt
|
sbin/dasdfmt
|
||||||
sbin/swapon
|
|
||||||
sbin/swapoff
|
|
||||||
sbin/mkswap
|
|
||||||
bin/bash
|
|
||||||
bin/dd
|
|
||||||
bin/gawk
|
|
||||||
bin/mount
|
|
||||||
bin/umount
|
|
||||||
bin/mknod
|
|
||||||
bin/sleep
|
|
||||||
bin/login
|
bin/login
|
||||||
bin/cat
|
bin/ipcalc
|
||||||
bin/chmod
|
|
||||||
bin/sort
|
|
||||||
lib/modules/ibm
|
lib/modules/ibm
|
||||||
etc/pam.d/sshd
|
etc/pam.d/sshd
|
||||||
etc/pam.d/other
|
etc/pam.d/other
|
||||||
@ -668,6 +677,7 @@ etc/security/limits.conf
|
|||||||
etc/security/pam_env.conf
|
etc/security/pam_env.conf
|
||||||
lib/security
|
lib/security
|
||||||
$LIBDIR/security/pam_*
|
$LIBDIR/security/pam_*
|
||||||
|
$LIBDIR/libwrap*.so*
|
||||||
usr/bin/xauth
|
usr/bin/xauth
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
@ -793,9 +803,11 @@ usr/sbin/smartctl
|
|||||||
usr/sbin/traceroute
|
usr/sbin/traceroute
|
||||||
usr/$LIBDIR/firstaidkit/plugins/
|
usr/$LIBDIR/firstaidkit/plugins/
|
||||||
usr/lib/python?.?/site-packages/pyfirstaidkit/
|
usr/lib/python?.?/site-packages/pyfirstaidkit/
|
||||||
|
usr/bin/dialog
|
||||||
|
usr/bin/firstaidkit-qs
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
|
if [ $ARCH = i386 -o $ARCH = i586 -o $ARCH = x86_64 ]; then
|
||||||
cat >> $KEEPFILERESCUE <<-EOF
|
cat >> $KEEPFILERESCUE <<-EOF
|
||||||
sbin/grub
|
sbin/grub
|
||||||
usr/bin/gpart
|
usr/bin/gpart
|
||||||
@ -854,11 +866,12 @@ cat $DEST/usr/lib/anaconda/lang-table* | awk '
|
|||||||
}
|
}
|
||||||
' | sed -e 's/latn/Latn/g' | LC_ALL=C sort -u > $DEST/locales
|
' | sed -e 's/latn/Latn/g' | LC_ALL=C sort -u > $DEST/locales
|
||||||
for p in lib share; do (
|
for p in lib share; do (
|
||||||
cd $DEST/usr/$p/locale && {
|
cd $DEST/usr/$p/locale && {
|
||||||
ls | grep -v locale.alias | grep -v locale-archive | LC_ALL=C sort > $DEST/locales.list
|
ls | grep -v locale.alias | grep -v locale-archive | LC_ALL=C sort > $DEST/locales.list
|
||||||
LC_ALL=C comm -13 $DEST/locales $DEST/locales.list | xargs rm -rf
|
LC_ALL=C comm -13 $DEST/locales $DEST/locales.list | xargs rm -rf
|
||||||
}
|
}
|
||||||
); done
|
); done
|
||||||
|
|
||||||
rm -f $DEST/locales $DEST/locales.list
|
rm -f $DEST/locales $DEST/locales.list
|
||||||
|
|
||||||
# fixup joe links
|
# fixup joe links
|
||||||
@ -908,6 +921,7 @@ sed -i 's|\(installforallkernels\) = 0|\1 = 1|' $DEST/etc/yum/pluginconf.d/fedor
|
|||||||
# they will be soft links to /mnt/sysimage.
|
# they will be soft links to /mnt/sysimage.
|
||||||
#
|
#
|
||||||
echo "Fixing up /etc/man.config to point into /mnt/sysimage"
|
echo "Fixing up /etc/man.config to point into /mnt/sysimage"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Lets avoid the lines with MANPATH_MAP for now
|
# Lets avoid the lines with MANPATH_MAP for now
|
||||||
#
|
#
|
||||||
@ -942,8 +956,10 @@ find $DEST -type d | xargs chmod 755
|
|||||||
if [ -f $DEST/bin/bash ]; then
|
if [ -f $DEST/bin/bash ]; then
|
||||||
rm -f $DEST/bin/ash
|
rm -f $DEST/bin/ash
|
||||||
ln -s bash $DEST/bin/sh
|
ln -s bash $DEST/bin/sh
|
||||||
else
|
fi
|
||||||
ln -sf busybox $DEST/bin/sh
|
|
||||||
|
if [ -f $DEST/bin/gawk ]; then
|
||||||
|
ln -sf awk $DEST/bin/gawk
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -d $DEST/bin ] || die "ERROR: directory missing: $DEST/bin"
|
[ -d $DEST/bin ] || die "ERROR: directory missing: $DEST/bin"
|
||||||
@ -993,7 +1009,7 @@ if [ $ARCH = ia64 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# copy bootloader files for i386/x86_64
|
# copy bootloader files for i386/x86_64
|
||||||
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
|
if [ $ARCH = i386 -o $ARCH = i586 -o $ARCH = x86_64 ]; then
|
||||||
mkdir -p $DEST/usr/lib/anaconda-runtime/boot
|
mkdir -p $DEST/usr/lib/anaconda-runtime/boot
|
||||||
cp -af $DEST/boot/memtest* $DEST/usr/lib/anaconda-runtime/boot
|
cp -af $DEST/boot/memtest* $DEST/usr/lib/anaconda-runtime/boot
|
||||||
fi
|
fi
|
77
rewrite/scripts/upd-kernel
Executable file
77
rewrite/scripts/upd-kernel
Executable file
@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# take a boot directory with kernel + initrd and create a new one
|
||||||
|
# with a new kernel + initrd
|
||||||
|
# Usage: ./upd-kernel <olddir> <newdir> <newkernelrpm>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
OLDDIR=`readlink -f $1`
|
||||||
|
NEWDIR=$2
|
||||||
|
KRPM=`readlink -f $3`
|
||||||
|
|
||||||
|
NEWVER=$(rpm -qp --provides $KRPM | awk -F ' = ' '/kernel-uname-r/ { print $2; }')
|
||||||
|
|
||||||
|
if [ -z "$OLDDIR" -o -z "$NEWDIR" -o -z "$KRPM" ]; then
|
||||||
|
echo "Usage: $0 <olddir> <newdir> <newkernelrpm>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d $OLDDIR ]; then
|
||||||
|
echo "Directory $OLDDIR doesn't exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $NEWDIR ]; then
|
||||||
|
NEWDIR=`readlink -f $NEWDIR`
|
||||||
|
else
|
||||||
|
NEWDIR=`readlink -f .`/$NEWDIR
|
||||||
|
mkdir $NEWDIR
|
||||||
|
fi
|
||||||
|
|
||||||
|
WORKDIR=$(/bin/mktemp -d /tmp/kernrpm.XXXXXX)
|
||||||
|
|
||||||
|
pushd $WORKDIR > /dev/null
|
||||||
|
|
||||||
|
# explode the rpm
|
||||||
|
mkdir rpm
|
||||||
|
pushd rpm > /dev/null
|
||||||
|
rpm2cpio $KRPM | cpio -id --quiet
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
|
# explode the initrd
|
||||||
|
mkdir initrd
|
||||||
|
pushd initrd > /dev/null
|
||||||
|
zcat $OLDDIR/initrd.img | cpio -id --quiet
|
||||||
|
|
||||||
|
for mod in $(find modules/ -type f -name '*.ko.gz' -exec basename {} \; | sort | uniq) ; do
|
||||||
|
for path in $(find $WORKDIR/rpm/lib/modules/$NEWVER/ -name ${mod%.gz}); do
|
||||||
|
dest=${path##$WORKDIR/rpm/lib/}
|
||||||
|
mkdir -p $(dirname $dest)
|
||||||
|
gzip < $path > $dest.gz
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
/sbin/depmod -a -b . $NEWVER
|
||||||
|
rm -f modules/$NEWVER/modules.*map
|
||||||
|
|
||||||
|
find . | cpio --quiet -c -o | gzip -9 > $NEWDIR/initrd.img
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
|
cp $WORKDIR/rpm/boot/vmlinuz-* $NEWDIR/vmlinuz
|
||||||
|
popd > /dev/null
|
||||||
|
rm -rf $WORKDIR
|
112
rewrite/scripts/upd-updates
Executable file
112
rewrite/scripts/upd-updates
Executable file
@ -0,0 +1,112 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# upd-updates
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
isAnacondaGitDir() {
|
||||||
|
[ -f .git/config ] || return 1
|
||||||
|
grep -q 'url = git+ssh://git\.fedoraproject\.org/git/hosted/anaconda\.git' .git/config
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
if [ $1 -ne 0 ]; then
|
||||||
|
>&2
|
||||||
|
fi
|
||||||
|
echo "upd-updates <updates.img> [<file0> [<file1> [...]]]"
|
||||||
|
exit $1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -z "$1" ] && usage 1
|
||||||
|
[ "$1" == "--help" ] && usage 0
|
||||||
|
updateAll=no
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
if isAnacondaGitDir ; then
|
||||||
|
updateAll=yes
|
||||||
|
else
|
||||||
|
usage 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
TARGET="$1" ; shift
|
||||||
|
if [ ! -f "$1" ]; then
|
||||||
|
echo -n | cpio -H newc --quiet -o | gzip -9 > "$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
OK=no
|
||||||
|
if [ -e "$TARGET" -a -w "$TARGET" -o -w $(dirname "$TARGET") ] ; then
|
||||||
|
OK=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OK" == "no" ]; then
|
||||||
|
echo "upd-updates: cannot write to $TARGET" 1>&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$updateAll" == "no" ]; then
|
||||||
|
n=1
|
||||||
|
while [ -n "$(eval echo '${'$n'}')" ]; do
|
||||||
|
arg="$(eval echo '${'$n'}')"
|
||||||
|
[ ${arg} == "--help" -o ${arg} == "-h" ] && usage 0
|
||||||
|
|
||||||
|
if [ ! -r ${arg} ]; then
|
||||||
|
echo "upd-updates: cannot read ${arg}" 1>&2
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
n=$(($n + 1))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
TMPDIR=$(mktemp -d)
|
||||||
|
if [ ! -d ${TMPDIR} ]; then
|
||||||
|
echo "upd-updates: cannot make tmpdir ${TMPDIR}" 1>&2
|
||||||
|
exit 4
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "$TARGET" ]; then
|
||||||
|
zcat "$TARGET" | ( cd $TMPDIR ; cpio -di --quiet -dm --unconditional )
|
||||||
|
[ $? -eq 0 ] || exit 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$updateAll" == "yes" ]; then
|
||||||
|
# this may do the wrong thing if we have two files named the same...
|
||||||
|
# so, uh, don't do that.
|
||||||
|
for oldfile in $(find "$TMPDIR" -type f) ; do
|
||||||
|
for newfile in $(find . -name $(basename $oldfile)) ; do
|
||||||
|
if [ "$oldfile" -ot "$newfile" ]; then
|
||||||
|
cp -av "$newfile" "$oldfile"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo ${@} | tr ' ' '\0' | tr -d '\n' | \
|
||||||
|
cpio --null -H newc --quiet -o | \
|
||||||
|
( cd $TMPDIR ; cpio -di --quiet -dm --unconditional )
|
||||||
|
|
||||||
|
[ $? -eq 0 ] || exit 6
|
||||||
|
fi
|
||||||
|
|
||||||
|
(cd $TMPDIR ; find . -depth -print0 | cpio -H newc --quiet --null -o ) | \
|
||||||
|
gzip -9 > "$TARGET"
|
||||||
|
|
||||||
|
[ $? -eq 0 ] || exit 7
|
||||||
|
|
||||||
|
rm -rf "$TMPDIR"
|
||||||
|
|
||||||
|
[ $? -eq 0 ] || exit 8
|
||||||
|
|
||||||
|
exit 0
|
@ -1,20 +0,0 @@
|
|||||||
DONE scripts/buildinstall
|
|
||||||
scripts/buildinstall.functions
|
|
||||||
DONE scripts/makestamp.py
|
|
||||||
DONE scripts/maketreeinfo.py
|
|
||||||
scripts/mk-images
|
|
||||||
scripts/mk-images.alpha
|
|
||||||
scripts/mk-images.efi
|
|
||||||
scripts/mk-images.ia64
|
|
||||||
scripts/mk-images.ppc
|
|
||||||
scripts/mk-images.s390
|
|
||||||
scripts/mk-images.x86
|
|
||||||
DONE scripts/scrubtree
|
|
||||||
DONE scripts/upd-instroot
|
|
||||||
|
|
||||||
DONE utils/trimpciids
|
|
||||||
utils/mk-s390-cdboot.c
|
|
||||||
DONE utils/filtermoddeps
|
|
||||||
DONE utils/geninitrdsz.c
|
|
||||||
DONE utils/genmodinfo
|
|
||||||
utils/modlist
|
|
59
rewrite/utils/mapshdr.c
Normal file
59
rewrite/utils/mapshdr.c
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* mapshdr.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "../isys/lang.h"
|
||||||
|
|
||||||
|
int main(int argc, char ** argv) {
|
||||||
|
struct kmapHeader h;
|
||||||
|
struct kmapInfo info;
|
||||||
|
int i, x;
|
||||||
|
struct stat sb;
|
||||||
|
char * chptr;
|
||||||
|
|
||||||
|
h.magic = KMAP_MAGIC;
|
||||||
|
h.numEntries = argc - 1;
|
||||||
|
x = write(1, &h, sizeof(h));
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (stat(argv[i], &sb)) {
|
||||||
|
fprintf(stderr, "stat error for %s: %s\n", argv[i],
|
||||||
|
strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(info.name, 0, KMAP_NAMELEN);
|
||||||
|
strncpy(info.name, argv[i], KMAP_NAMELEN - 1);
|
||||||
|
|
||||||
|
chptr = info.name + strlen(info.name) - 1;
|
||||||
|
while (*chptr != '.') *chptr-- = '\0';
|
||||||
|
*chptr = '\0';
|
||||||
|
|
||||||
|
info.size = sb.st_size;
|
||||||
|
x = write(1, &info, sizeof(info));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -122,7 +122,8 @@ int main (int argc, char **argv) {
|
|||||||
|
|
||||||
printf("writing kernel...\n");
|
printf("writing kernel...\n");
|
||||||
while (1) {
|
while (1) {
|
||||||
rc = fread(buffer, BUFFER_LEN, 1, fd2);
|
rc = fread(buffer, 1, 1, fd2);
|
||||||
|
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -132,17 +133,23 @@ int main (int argc, char **argv) {
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
wc = fwrite(buffer, BUFFER_LEN, 1, fd1);
|
wc = fwrite(buffer, 1, 1, fd1);
|
||||||
if (feof(fd1) || ferror(fd1)) {
|
if (feof(fd1) || ferror(fd1)) {
|
||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wc != rc) {
|
||||||
|
fprintf(stderr, "could only write %i of %i bytes of kernel\n",
|
||||||
|
wc, rc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("writing initrd...\n");
|
printf("writing initrd...\n");
|
||||||
fseek(fd1, initrd_start, SEEK_SET);
|
fseek(fd1, initrd_start, SEEK_SET);
|
||||||
while (1) {
|
while (1) {
|
||||||
rc = fread(buffer, BUFFER_LEN, 1, fd3);
|
rc = fread(buffer, 1, 1, fd3);
|
||||||
|
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -152,11 +159,16 @@ int main (int argc, char **argv) {
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
wc = fwrite(buffer, BUFFER_LEN, 1, fd1);
|
wc = fwrite(buffer, 1, 1, fd1);
|
||||||
if (feof(fd1) || ferror(fd1)) {
|
if (feof(fd1) || ferror(fd1)) {
|
||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wc != rc) {
|
||||||
|
fprintf(stderr, "could only write %i of %i bytes of initrd\n",
|
||||||
|
wc, rc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fseek(fd3, 0, SEEK_END) == -1) {
|
if (fseek(fd3, 0, SEEK_END) == -1) {
|
||||||
@ -175,12 +187,17 @@ int main (int argc, char **argv) {
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
wc = fwrite(&start_psw_address, 4, 1, fd1);
|
wc = fwrite(&start_psw_address, 1, 4, fd1);
|
||||||
if (feof(fd1) || ferror(fd1)) {
|
if (feof(fd1) || ferror(fd1)) {
|
||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wc != 4) {
|
||||||
|
fprintf(stderr, "could only write %i of %i bytes of PSW address\n",
|
||||||
|
wc, 4);
|
||||||
|
}
|
||||||
|
|
||||||
printf("writing initrd address and size...\n");
|
printf("writing initrd address and size...\n");
|
||||||
printf("INITRD start: 0x%016llx\n", initrd_start);
|
printf("INITRD start: 0x%016llx\n", initrd_start);
|
||||||
printf("INITRD size : 0x%016llx\n", initrd_size);
|
printf("INITRD size : 0x%016llx\n", initrd_size);
|
||||||
@ -190,23 +207,33 @@ int main (int argc, char **argv) {
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
wc = fwrite(&initrd_start, 8, 1, fd1);
|
wc = fwrite(&initrd_start, 1, 8, fd1);
|
||||||
if (feof(fd1) || ferror(fd1)) {
|
if (feof(fd1) || ferror(fd1)) {
|
||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wc != 8) {
|
||||||
|
fprintf(stderr, "could only write %i of %i bytes of INITRD start\n",
|
||||||
|
wc, 8);
|
||||||
|
}
|
||||||
|
|
||||||
if (fseek(fd1, 0x10410, SEEK_SET) == -1) {
|
if (fseek(fd1, 0x10410, SEEK_SET) == -1) {
|
||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
wc = fwrite(&initrd_size, 8, 1, fd1);
|
wc = fwrite(&initrd_size, 1, 8, fd1);
|
||||||
if (feof(fd1) || ferror(fd1)) {
|
if (feof(fd1) || ferror(fd1)) {
|
||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wc != 8) {
|
||||||
|
fprintf(stderr, "could only write %i of %i bytes of INITRD size\n",
|
||||||
|
wc, 8);
|
||||||
|
}
|
||||||
|
|
||||||
printf("writing parmfile...\n");
|
printf("writing parmfile...\n");
|
||||||
if (fseek(fd1, 0x10480, SEEK_SET) == -1) {
|
if (fseek(fd1, 0x10480, SEEK_SET) == -1) {
|
||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
@ -215,6 +242,7 @@ int main (int argc, char **argv) {
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
rc = fread(buffer, 1, 1, fd4);
|
rc = fread(buffer, 1, 1, fd4);
|
||||||
|
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -229,6 +257,11 @@ int main (int argc, char **argv) {
|
|||||||
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wc != 1) {
|
||||||
|
fprintf(stderr, "could only write %i of %i bytes of parmfile\n",
|
||||||
|
wc, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fclose(fd1) == EOF) {
|
if (fclose(fd1) == EOF) {
|
119
rewrite/utils/readmap.c
Normal file
119
rewrite/utils/readmap.c
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* readmap.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <linux/keyboard.h>
|
||||||
|
#ifdef NR_KEYS
|
||||||
|
#undef NR_KEYS
|
||||||
|
#define NR_KEYS 128
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <linux/kd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "../isys/lang.h"
|
||||||
|
|
||||||
|
int main(int argc, char ** argv) {
|
||||||
|
int console;
|
||||||
|
int kmap, key;
|
||||||
|
struct kbentry entry;
|
||||||
|
int keymaps[MAX_NR_KEYMAPS];
|
||||||
|
int count = 0;
|
||||||
|
int out;
|
||||||
|
short keymap[NR_KEYS];
|
||||||
|
int magic = KMAP_MAGIC;
|
||||||
|
int verbose = 0;
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
printf("bad usage\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getenv("DEBUG") != NULL)
|
||||||
|
verbose = 1;
|
||||||
|
|
||||||
|
memset(keymaps, 0, sizeof(keymaps));
|
||||||
|
|
||||||
|
console = open("/dev/tty0", O_RDWR);
|
||||||
|
if (console < 0) {
|
||||||
|
perror("open VGA+KBD");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (kmap = 0; kmap < MAX_NR_KEYMAPS; kmap++) {
|
||||||
|
for (key = 0; key < NR_KEYS; key++) {
|
||||||
|
entry.kb_index = key;
|
||||||
|
entry.kb_table = kmap;
|
||||||
|
if (ioctl(console, KDGKBENT, &entry)) {
|
||||||
|
perror("ioctl failed");
|
||||||
|
exit(1);
|
||||||
|
} else if (KTYP(entry.kb_value) != KT_SPEC) {
|
||||||
|
keymaps[kmap] = 1;
|
||||||
|
count++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose) fprintf(stderr, "found %d valid keymaps\n", count);
|
||||||
|
|
||||||
|
if (verbose) fprintf(stderr, "creating keymap file %s\n", argv[1]);
|
||||||
|
if ((out = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 1) {
|
||||||
|
perror("open keymap");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (write(out, &magic, sizeof(magic)) != sizeof(magic)) {
|
||||||
|
perror("write magic");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (write(out, keymaps, sizeof(keymaps)) != sizeof(keymaps)) {
|
||||||
|
perror("write header");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (kmap = 0; kmap < MAX_NR_KEYMAPS; kmap++) {
|
||||||
|
if (!keymaps[kmap]) continue;
|
||||||
|
for (key = 0; key < NR_KEYS; key++) {
|
||||||
|
entry.kb_index = key;
|
||||||
|
entry.kb_table = kmap;
|
||||||
|
if (ioctl(console, KDGKBENT, &entry)) {
|
||||||
|
perror("ioctl failed");
|
||||||
|
exit(1);
|
||||||
|
} else {
|
||||||
|
keymap[key] = entry.kb_value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (write(out, keymap, sizeof(keymap)) != sizeof(keymap)) {
|
||||||
|
perror("write keymap");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close(out);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
69
rewrite/utils/snarffont.c
Normal file
69
rewrite/utils/snarffont.c
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* snarffont.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/kd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
void die(char * mess) {
|
||||||
|
perror(mess);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MAXFONTSIZE 65536
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
unsigned char buf[MAXFONTSIZE];
|
||||||
|
struct console_font_op cfo;
|
||||||
|
unsigned short map[E_TABSZ];
|
||||||
|
struct unipair descs[2048];
|
||||||
|
struct unimapdesc d;
|
||||||
|
int fd, i;
|
||||||
|
|
||||||
|
if ((fd = open("/dev/tty0", O_RDONLY)) < 0)
|
||||||
|
die("open");
|
||||||
|
|
||||||
|
cfo.op = KD_FONT_OP_GET;
|
||||||
|
cfo.flags = 0;
|
||||||
|
cfo.width = 8;
|
||||||
|
cfo.height = 16;
|
||||||
|
cfo.charcount = 512;
|
||||||
|
cfo.data = buf;
|
||||||
|
if (ioctl(fd, KDFONTOP, &cfo))
|
||||||
|
die("KDFONTOP KD_FONT_OP_GET");
|
||||||
|
|
||||||
|
if (ioctl(fd, GIO_UNISCRNMAP, map))
|
||||||
|
die("GIO_UNISCRNMAP");
|
||||||
|
|
||||||
|
d.entry_ct = 2048;
|
||||||
|
d.entries = descs;
|
||||||
|
if (ioctl(fd, GIO_UNIMAP, &d))
|
||||||
|
die("GIO_UNIMAP");
|
||||||
|
|
||||||
|
i = write(1, &cfo, sizeof(cfo));
|
||||||
|
i = write(1, buf, sizeof(buf));
|
||||||
|
i = write(1, map, sizeof(map));
|
||||||
|
i = write(1, &d.entry_ct, sizeof(d.entry_ct));
|
||||||
|
i = write(1, descs, d.entry_ct * sizeof(descs[0]));
|
||||||
|
return 0;
|
||||||
|
}
|
@ -7,4 +7,3 @@ CD-ROM's boot speed would be an advantage.
|
|||||||
|
|
||||||
To use this image file, burn the file onto CD-R (or CD-RW) media as you
|
To use this image file, burn the file onto CD-R (or CD-RW) media as you
|
||||||
normally would.
|
normally would.
|
||||||
|
|
||||||
|
@ -4,4 +4,3 @@ The following files are available:
|
|||||||
vmlinuz - the kernel used for the installer
|
vmlinuz - the kernel used for the installer
|
||||||
initrd.img - an initrd with support for all install methods and
|
initrd.img - an initrd with support for all install methods and
|
||||||
drivers supported for installation of @PRODUCT@
|
drivers supported for installation of @PRODUCT@
|
||||||
|
|
||||||
|
@ -4,7 +4,10 @@ mailspooldir = /mnt/sysimage/var/mail
|
|||||||
crypt_style = md5
|
crypt_style = md5
|
||||||
modules = files shadow
|
modules = files shadow
|
||||||
create_modules = files shadow
|
create_modules = files shadow
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
directory = /mnt/sysimage/etc
|
directory = /mnt/sysimage/etc
|
||||||
|
|
||||||
[shadow]
|
[shadow]
|
||||||
directory = /mnt/sysimage/etc
|
directory = /mnt/sysimage/etc
|
||||||
|
|
@ -1,2 +1,3 @@
|
|||||||
SELINUX=permissive
|
SELINUX=permissive
|
||||||
SELINUXTYPE=targeted
|
SELINUXTYPE=targeted
|
||||||
|
|
@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# lorax
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
@ -10,7 +9,7 @@ import pylorax
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
version = '%s 0.1' % os.path.basename(sys.argv[0])
|
version = '%s 0.1' % os.path.basename(sys.argv[0])
|
||||||
usage = '%prog -p PRODUCT -v VERSION -r RELEASE -o OUTPUT REPOSITORY'
|
usage = '%prog -p PRODUCT -v VERSION -r RELEASE -o OUTPUTDIR REPOSITORY'
|
||||||
|
|
||||||
parser = OptionParser(usage=usage)
|
parser = OptionParser(usage=usage)
|
||||||
|
|
||||||
@ -18,42 +17,42 @@ if __name__ == '__main__':
|
|||||||
if os.path.isdir(value):
|
if os.path.isdir(value):
|
||||||
setattr(parser.values, option.dest, value)
|
setattr(parser.values, option.dest, value)
|
||||||
else:
|
else:
|
||||||
parser.error('%s is not a directory.' % value)
|
parser.error('%s is not a directory' % value)
|
||||||
|
|
||||||
|
|
||||||
# XXX "options" should not be required
|
|
||||||
# required
|
# required
|
||||||
|
# XXX "options" should not be required
|
||||||
group = OptionGroup(parser, 'Required')
|
group = OptionGroup(parser, 'Required')
|
||||||
group.add_option('-p', '--product', help='Product name.',
|
group.add_option('-p', '--product', help='Product name',
|
||||||
metavar='STRING')
|
metavar='STRING')
|
||||||
group.add_option('-v', '--version', help='Version identifier.',
|
group.add_option('-v', '--version', help='Version identifier',
|
||||||
metavar='STRING')
|
metavar='STRING')
|
||||||
group.add_option('-r', '--release', help='Release information or comment.',
|
group.add_option('-r', '--release', help='Release information or comment',
|
||||||
metavar='STRING')
|
metavar='STRING')
|
||||||
group.add_option('-o', '--output', help='Destination directory.',
|
group.add_option('-o', '--output', help='Destination directory',
|
||||||
metavar='PATHSPEC')
|
metavar='PATHSPEC')
|
||||||
parser.add_option_group(group)
|
parser.add_option_group(group)
|
||||||
|
|
||||||
# XXX are all of these used?
|
|
||||||
# optional
|
# optional
|
||||||
|
# XXX are all of these used?
|
||||||
group = OptionGroup(parser, 'Optional')
|
group = OptionGroup(parser, 'Optional')
|
||||||
group.add_option('-d', '--debug', help='Enable debugging messages.',
|
group.add_option('-d', '--debug', help='Enable debugging messages',
|
||||||
action='store_true', default=False)
|
action='store_true', default=False)
|
||||||
group.add_option('-t', '--variant', help='Variant name.',
|
group.add_option('-t', '--variant', help='Variant name',
|
||||||
metavar='STRING')
|
metavar='STRING')
|
||||||
group.add_option('-b', '--bugurl', help='Bug reporting URL for the product.',
|
group.add_option('-b', '--bugurl', help='Bug reporting URL for the product',
|
||||||
metavar='URL', default='your distribution provided bug reporting tool.')
|
metavar='URL', default='your distribution provided bug reporting tool.')
|
||||||
group.add_option('-u', '--updates', help='Path to find updated RPMS.',
|
group.add_option('-u', '--updates', help='Directory containing updates',
|
||||||
metavar='PATHSPEC')
|
metavar='PATHSPEC')
|
||||||
group.add_option('-m', '--mirrorlist',
|
group.add_option('-m', '--mirrorlist',
|
||||||
help='Mirror list repository, may be listed multiple times.',
|
help='Mirror list repository (may be listed multiple times)',
|
||||||
metavar='REPOSITORY', action='append', default=[])
|
metavar='REPOSITORY', action='append', default=[])
|
||||||
group.add_option('-c', '--confdir', help='Path to config files (default: /etc/lorax).',
|
group.add_option('-c', '--confdir', help='Path to config files (default: /etc/lorax).',
|
||||||
metavar='PATHSPEC', action='callback', callback=check_dir,
|
metavar='PATHSPEC', action='callback', callback=check_dir,
|
||||||
type='string', default='/etc/lorax')
|
type='string', default='/etc/lorax')
|
||||||
group.add_option('-C', '--cleanup', help='Cleanup on exit.',
|
group.add_option('-C', '--cleanup', help='Cleanup on exit',
|
||||||
action='store_true', default=False)
|
action='store_true', default=False)
|
||||||
group.add_option('-V', help='Print version and exit.',
|
group.add_option('-V', help='Print version and exit',
|
||||||
action='store_true', default=False, dest='printver')
|
action='store_true', default=False, dest='printver')
|
||||||
parser.add_option_group(group)
|
parser.add_option_group(group)
|
||||||
|
|
||||||
@ -70,10 +69,10 @@ if __name__ == '__main__':
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if not opts.product or not opts.version or not opts.release or not opts.output:
|
if not opts.product or not opts.version or not opts.release or not opts.output:
|
||||||
parser.error('Missing required argument.')
|
parser.error('Missing required argument')
|
||||||
|
|
||||||
if not args:
|
if not args:
|
||||||
parser.error('Missing repository to use for image generation.')
|
parser.error('Missing repository')
|
||||||
|
|
||||||
config = pylorax.Config()
|
config = pylorax.Config()
|
||||||
config.set(confdir=opts.confdir,
|
config.set(confdir=opts.confdir,
|
||||||
@ -86,6 +85,7 @@ if __name__ == '__main__':
|
|||||||
release=opts.release,
|
release=opts.release,
|
||||||
outdir=opts.output,
|
outdir=opts.output,
|
||||||
repos=args)
|
repos=args)
|
||||||
|
|
||||||
# optional
|
# optional
|
||||||
config.set(variant=opts.variant,
|
config.set(variant=opts.variant,
|
||||||
bugurl=opts.bugurl,
|
bugurl=opts.bugurl,
|
||||||
|
@ -1,17 +1,21 @@
|
|||||||
# pylorax/__init__.py
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
import stat
|
||||||
|
import commands
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
|
import datetime
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
import re
|
import re
|
||||||
|
import fnmatch
|
||||||
|
import pwd
|
||||||
|
import grp
|
||||||
from errors import LoraxError
|
from errors import LoraxError
|
||||||
|
|
||||||
from config import Container
|
from config import Container
|
||||||
from utils.rpmutils import Yum
|
from utils.rpmutils import Yum
|
||||||
from utils.fileutils import rm
|
from utils.fileutils import cp, mv, rm, touch, edit, replace
|
||||||
|
|
||||||
import images
|
import images
|
||||||
|
|
||||||
@ -67,49 +71,63 @@ class Lorax(object):
|
|||||||
def run(self):
|
def run(self):
|
||||||
bold = ('\033[1m', '\033[0m')
|
bold = ('\033[1m', '\033[0m')
|
||||||
|
|
||||||
print('%sCollecting repos%s' % bold)
|
print("%sCollecting repos%s" % bold)
|
||||||
self.collectRepos()
|
self.collect_repos()
|
||||||
|
|
||||||
# check if we have at least one valid repository
|
# check if we have at least one valid repository
|
||||||
if not self.conf.repo:
|
if not self.conf.repo:
|
||||||
sys.stderr.write('ERROR: No valid repository\n')
|
sys.stderr.write("ERROR: No valid repository\n")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
print('%sInitializing directories%s' % bold)
|
print("%sInitializing temporary directories%s" % bold)
|
||||||
self.initDirs()
|
self.init_dirs()
|
||||||
|
|
||||||
print('%sInitializing yum%s' % bold)
|
print("%sInitializing yum%s" % bold)
|
||||||
self.initYum()
|
self.init_yum()
|
||||||
|
|
||||||
print('%sSetting build architecture%s' % bold)
|
print("%sSetting build architecture%s" % bold)
|
||||||
self.setBuildArch()
|
self.set_buildarch()
|
||||||
|
|
||||||
print('%sWriting .treeinfo%s' % bold)
|
print("%sWriting .treeinfo%s" % bold)
|
||||||
self.writeTreeInfo()
|
self.write_treeinfo()
|
||||||
|
|
||||||
print('%sWriting .discinfo%s' % bold)
|
print("%sWriting .discinfo%s" % bold)
|
||||||
self.writeDiscInfo()
|
self.write_discinfo()
|
||||||
|
|
||||||
print('%sPreparing the install tree%s' % bold)
|
print("%sPreparing the install tree%s" % bold)
|
||||||
self.prepareInstRoot()
|
self.prepare_treedir()
|
||||||
|
|
||||||
print('%sCreating the images%s' % bold)
|
print("%sScrubbing the install tree%s" % bold)
|
||||||
self.makeImages()
|
self.scrub_treedir()
|
||||||
|
|
||||||
|
print("%sWriting .buildstamp%s" % bold)
|
||||||
|
self.write_buildstamp()
|
||||||
|
|
||||||
|
print("%sInitializing output directories%s" % bold)
|
||||||
|
self.init_outputdirs()
|
||||||
|
|
||||||
|
print("%sCreating the initrd.img%s" % bold)
|
||||||
|
self.create_initrd()
|
||||||
|
|
||||||
|
print("%sCreating the install.img%s" % bold)
|
||||||
|
self.create_installimg()
|
||||||
|
|
||||||
if self.conf.cleanup:
|
if self.conf.cleanup:
|
||||||
print('%sCleaning up%s' % bold)
|
print("%sCleaning up%s" % bold)
|
||||||
self.cleanUp()
|
self.clean_up()
|
||||||
|
|
||||||
def collectRepos(self):
|
def collect_repos(self):
|
||||||
repolist = []
|
repolist = []
|
||||||
for repospec in self.conf.repos:
|
for repospec in self.conf.repos:
|
||||||
if repospec.startswith('/'):
|
if repospec.startswith('/'):
|
||||||
repo = 'file://%s' % repospec
|
repo = 'file://%s' % repospec
|
||||||
print('Adding local repo: %s' % repo)
|
print("Adding local repo: %s" % repo)
|
||||||
repolist.append(repo)
|
repolist.append(repo)
|
||||||
elif repospec.startswith('http://') or repospec.startswith('ftp://'):
|
elif repospec.startswith('http://') or repospec.startswith('ftp://'):
|
||||||
print('Adding remote repo: %s' % repospec)
|
print("Adding remote repo: %s" % repospec)
|
||||||
repolist.append(repospec)
|
repolist.append(repospec)
|
||||||
|
else:
|
||||||
|
print("Invalid repo path: %s" % repospec)
|
||||||
|
|
||||||
if not repolist:
|
if not repolist:
|
||||||
repo, extrarepos = None, []
|
repo, extrarepos = None, []
|
||||||
@ -119,10 +137,10 @@ class Lorax(object):
|
|||||||
self.conf.addAttr(['repo', 'extrarepos'])
|
self.conf.addAttr(['repo', 'extrarepos'])
|
||||||
self.conf.set(repo=repo, extrarepos=extrarepos)
|
self.conf.set(repo=repo, extrarepos=extrarepos)
|
||||||
|
|
||||||
# remove repos attribute, to get a traceback, if we use it later
|
# remove repos attribute, to get a traceback, if we use it later accidentaly
|
||||||
self.conf.delAttr('repos')
|
self.conf.delAttr('repos')
|
||||||
|
|
||||||
def initDirs(self):
|
def init_dirs(self):
|
||||||
if not os.path.isdir(self.conf.outdir):
|
if not os.path.isdir(self.conf.outdir):
|
||||||
os.makedirs(self.conf.outdir, mode=0755)
|
os.makedirs(self.conf.outdir, mode=0755)
|
||||||
|
|
||||||
@ -133,22 +151,22 @@ class Lorax(object):
|
|||||||
initrddir = os.path.join(self.conf.tempdir, 'initrddir')
|
initrddir = os.path.join(self.conf.tempdir, 'initrddir')
|
||||||
os.makedirs(initrddir)
|
os.makedirs(initrddir)
|
||||||
|
|
||||||
print('Working directories:')
|
print("Working directories:")
|
||||||
print(' tempdir = %s' % self.conf.tempdir)
|
print(" tempdir = %s" % self.conf.tempdir)
|
||||||
print(' treedir = %s' % treedir)
|
print(" treedir = %s" % treedir)
|
||||||
print(' cachedir = %s' % cachedir)
|
print(" cachedir = %s" % cachedir)
|
||||||
print(' initrddir = %s' % initrddir)
|
print(" initrddir = %s" % initrddir)
|
||||||
|
|
||||||
self.conf.addAttr(['treedir', 'cachedir', 'initrddir'])
|
self.conf.addAttr(['treedir', 'cachedir', 'initrddir'])
|
||||||
self.conf.set(treedir=treedir, cachedir=cachedir, initrddir=initrddir)
|
self.conf.set(treedir=treedir, cachedir=cachedir, initrddir=initrddir)
|
||||||
|
|
||||||
def initYum(self):
|
def init_yum(self):
|
||||||
yumconf = os.path.join(self.conf.tempdir, 'yum.conf')
|
yumconf = os.path.join(self.conf.tempdir, 'yum.conf')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
f = open(yumconf, 'w')
|
f = open(yumconf, 'w')
|
||||||
except IOError as why:
|
except IOError as why:
|
||||||
sys.stderr.write('ERROR: Unable to write yum.conf file: %s\n' % why)
|
sys.stderr.write("ERROR: Unable to write yum.conf file: %s\n" % why)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
f.write('[main]\n')
|
f.write('[main]\n')
|
||||||
@ -187,7 +205,7 @@ class Lorax(object):
|
|||||||
# remove not needed attributes
|
# remove not needed attributes
|
||||||
self.conf.delAttr(['repo', 'extrarepos', 'mirrorlist', 'cachedir'])
|
self.conf.delAttr(['repo', 'extrarepos', 'mirrorlist', 'cachedir'])
|
||||||
|
|
||||||
def setBuildArch(self):
|
def set_buildarch(self):
|
||||||
unamearch = os.uname()[4]
|
unamearch = os.uname()[4]
|
||||||
|
|
||||||
self.conf.addAttr('buildarch')
|
self.conf.addAttr('buildarch')
|
||||||
@ -197,9 +215,16 @@ class Lorax(object):
|
|||||||
try:
|
try:
|
||||||
self.conf.set(buildarch=available[0].arch)
|
self.conf.set(buildarch=available[0].arch)
|
||||||
except:
|
except:
|
||||||
# FIXME specify what exceptions can we get here
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# set basearch
|
||||||
|
self.conf.addAttr('basearch')
|
||||||
|
self.conf.set(basearch=self.conf.buildarch)
|
||||||
|
if re.match(r'i.86', self.conf.basearch):
|
||||||
|
self.conf.set(basearch='i386')
|
||||||
|
elif self.conf.buildarch == 'sparc64':
|
||||||
|
self.conf.set(basearch='sparc')
|
||||||
|
|
||||||
# set the libdir
|
# set the libdir
|
||||||
self.conf.addAttr('libdir')
|
self.conf.addAttr('libdir')
|
||||||
self.conf.set(libdir='lib')
|
self.conf.set(libdir='lib')
|
||||||
@ -207,7 +232,7 @@ class Lorax(object):
|
|||||||
if self.conf.buildarch.endswith('64') or self.conf.buildarch == 's390x':
|
if self.conf.buildarch.endswith('64') or self.conf.buildarch == 's390x':
|
||||||
self.conf.set(libdir='lib64')
|
self.conf.set(libdir='lib64')
|
||||||
|
|
||||||
def writeTreeInfo(self, discnum=1, totaldiscs=1, packagedir=''):
|
def write_treeinfo(self, discnum=1, totaldiscs=1, packagedir=''):
|
||||||
outfile = os.path.join(self.conf.outdir, '.treeinfo')
|
outfile = os.path.join(self.conf.outdir, '.treeinfo')
|
||||||
|
|
||||||
# don't print anything instead of None, if variant is not specified
|
# don't print anything instead of None, if variant is not specified
|
||||||
@ -218,7 +243,7 @@ class Lorax(object):
|
|||||||
data = { 'timestamp': time.time(),
|
data = { 'timestamp': time.time(),
|
||||||
'family': self.conf.product,
|
'family': self.conf.product,
|
||||||
'version': self.conf.version,
|
'version': self.conf.version,
|
||||||
'arch': self.conf.buildarch,
|
'arch': self.conf.basearch,
|
||||||
'variant': variant,
|
'variant': variant,
|
||||||
'discnum': str(discnum),
|
'discnum': str(discnum),
|
||||||
'totaldiscs': str(totaldiscs),
|
'totaldiscs': str(totaldiscs),
|
||||||
@ -231,17 +256,11 @@ class Lorax(object):
|
|||||||
for key, value in data.items():
|
for key, value in data.items():
|
||||||
c.set(section, key, value)
|
c.set(section, key, value)
|
||||||
|
|
||||||
section = 'images-%s' % self.conf.buildarch
|
section = 'images-%s' % self.conf.basearch
|
||||||
c.add_section(section)
|
c.add_section(section)
|
||||||
c.set(section, 'kernel', 'images/pxeboot/vmlinuz')
|
c.set(section, 'kernel', 'images/pxeboot/vmlinuz')
|
||||||
c.set(section, 'initrd', 'images/pxeboot/initrd.img')
|
c.set(section, 'initrd', 'images/pxeboot/initrd.img')
|
||||||
|
c.set(section, 'boot.iso', 'images/boot.iso')
|
||||||
# XXX actually create the boot iso somewhere before calling writeTreeInfo(),
|
|
||||||
# and set up this attribute properly
|
|
||||||
self.conf.addAttr('bootiso')
|
|
||||||
|
|
||||||
if self.conf.bootiso:
|
|
||||||
c.set(section, 'boot.iso', 'images/%s' % self.conf.bootiso)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
f = open(outfile, 'w')
|
f = open(outfile, 'w')
|
||||||
@ -252,7 +271,7 @@ class Lorax(object):
|
|||||||
f.close()
|
f.close()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def writeDiscInfo(self, discnum=0):
|
def write_discinfo(self, discnum='ALL'):
|
||||||
outfile = os.path.join(self.conf.outdir, '.discinfo')
|
outfile = os.path.join(self.conf.outdir, '.discinfo')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -262,25 +281,610 @@ class Lorax(object):
|
|||||||
else:
|
else:
|
||||||
f.write('%f\n' % time.time())
|
f.write('%f\n' % time.time())
|
||||||
f.write('%s\n' % self.conf.release)
|
f.write('%s\n' % self.conf.release)
|
||||||
f.write('%s\n' % self.conf.buildarch)
|
f.write('%s\n' % self.conf.basearch)
|
||||||
f.write('%d\n' % discnum)
|
f.write('%s\n' % discnum)
|
||||||
f.close()
|
f.close()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def prepareInstRoot(self):
|
def prepare_treedir(self):
|
||||||
# XXX do we need this?
|
# required packages
|
||||||
|
self.yum.addPackages(['anaconda', 'anaconda-runtime', 'kernel', '*firmware*', 'syslinux',
|
||||||
|
'/etc/gtk-2.0/gtkrc'])
|
||||||
|
|
||||||
|
# get packages from confdir
|
||||||
|
packages_files = []
|
||||||
|
packages_files.append(os.path.join(self.conf.confdir, 'packages', 'packages.all'))
|
||||||
|
packages_files.append(os.path.join(self.conf.confdir, 'packages', 'packages.%s' % self.conf.buildarch))
|
||||||
|
|
||||||
|
packages = set()
|
||||||
|
for pfile in packages_files:
|
||||||
|
if os.path.isfile(pfile):
|
||||||
|
f = open(pfile, 'r')
|
||||||
|
for line in f.readlines():
|
||||||
|
line, sep, comment = line.partition('#')
|
||||||
|
line = line.strip()
|
||||||
|
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('-'):
|
||||||
|
packages.discard(line[1:])
|
||||||
|
else:
|
||||||
|
packages.add(line)
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
self.yum.addPackages(list(packages))
|
||||||
|
|
||||||
|
# add logos
|
||||||
|
self.yum.addPackages(['%s-logos' % self.conf.product.lower(),
|
||||||
|
'%s-release' % self.conf.product.lower()])
|
||||||
|
|
||||||
|
# XXX why do we need this?
|
||||||
os.symlink(os.path.join(os.path.sep, 'tmp'),
|
os.symlink(os.path.join(os.path.sep, 'tmp'),
|
||||||
os.path.join(self.conf.treedir, 'var', 'lib', 'xkb'))
|
os.path.join(self.conf.treedir, 'var', 'lib', 'xkb'))
|
||||||
|
|
||||||
def makeImages(self):
|
# install packages
|
||||||
i = images.Images(self.conf, self.yum)
|
self.yum.install()
|
||||||
i.run()
|
|
||||||
|
|
||||||
def cleanUp(self, trash=[]):
|
# copy updates
|
||||||
|
if self.conf.updates and os.path.isdir(self.conf.updates):
|
||||||
|
cp(os.path.join(self.conf.updates, '*'), self.conf.treedir)
|
||||||
|
self.conf.delAttr('updates')
|
||||||
|
|
||||||
|
# XXX here comes a lot of crazy tree modification stuff, beware! XXX
|
||||||
|
|
||||||
|
# create dogtail conf files
|
||||||
|
dogtailconf = os.path.join(self.conf.datadir, 'dogtail', '%gconf.xml')
|
||||||
|
if os.path.isfile(dogtailconf):
|
||||||
|
dst = os.path.join(self.conf.treedir, '.gconf', 'desktop', 'gnome', 'interface')
|
||||||
|
os.makedirs(dst)
|
||||||
|
cp(dogtailconf, dst)
|
||||||
|
|
||||||
|
touch(os.path.join(self.conf.treedir, '.gconf', 'desktop', '%gconf.xml'))
|
||||||
|
touch(os.path.join(self.conf.treedir, '.gconf', 'desktop', 'gnome', '%gconf.xml'))
|
||||||
|
|
||||||
|
# XXX wth is this part useful for?
|
||||||
|
|
||||||
|
# XXX this one already exists
|
||||||
|
#os.makedirs(os.path.join(self.conf.treedir, 'lib'))
|
||||||
|
os.makedirs(os.path.join(self.conf.treedir, 'firmware'))
|
||||||
|
os.makedirs(os.path.join(self.conf.treedir, 'modules'))
|
||||||
|
|
||||||
|
# XXX this will overwrite the modules which are installed, why would i want to do that?
|
||||||
|
#os.symlink('/modules', os.path.join(self.conf.treedir, 'lib', 'modules'))
|
||||||
|
#os.symlink('/firmware', os.path.join(self.conf.treedir, 'lib', 'firmware'))
|
||||||
|
|
||||||
|
# create debug dirs
|
||||||
|
os.makedirs(os.path.join(self.conf.treedir, 'usr', 'lib', 'debug'))
|
||||||
|
os.makedirs(os.path.join(self.conf.treedir, 'usr', 'src', 'debug'))
|
||||||
|
|
||||||
|
# copy stubs
|
||||||
|
for file in ('raidstart', 'raidstop', 'losetup', 'list-harddrives', 'loadkeys', 'mknod',
|
||||||
|
'syslogd'):
|
||||||
|
src = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda', file + '-stub')
|
||||||
|
dst = os.path.join(self.conf.treedir, 'usr', 'bin', file)
|
||||||
|
cp(src, dst)
|
||||||
|
|
||||||
|
# move anaconda executable
|
||||||
|
src = os.path.join(self.conf.treedir, 'usr', 'sbin', 'anaconda')
|
||||||
|
dst = os.path.join(self.conf.treedir, 'usr', 'bin', 'anaconda')
|
||||||
|
mv(src, dst)
|
||||||
|
|
||||||
|
# move anaconda libraries
|
||||||
|
src = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime', 'lib*')
|
||||||
|
dst = os.path.join(self.conf.treedir, 'usr', self.conf.libdir)
|
||||||
|
mv(src, dst)
|
||||||
|
|
||||||
|
# change tree permissions
|
||||||
|
root_uid = pwd.getpwnam('root')[2]
|
||||||
|
root_gid = grp.getgrnam('root')[2]
|
||||||
|
|
||||||
|
for root, files, dirs in os.walk(self.conf.treedir):
|
||||||
|
os.chown(root, root_uid, root_gid)
|
||||||
|
os.chmod(root, 0755)
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
path = os.path.join(root, file)
|
||||||
|
os.chown(path, root_uid, root_gid)
|
||||||
|
|
||||||
|
mode = os.stat(path).st_mode
|
||||||
|
if (mode & stat.S_IXUSR) or (mode & stat.S_IXGRP) or (mode & stat.S_IXOTH):
|
||||||
|
os.chmod(path, 0555)
|
||||||
|
else:
|
||||||
|
os.chmod(path, 0444)
|
||||||
|
|
||||||
|
# create ld.so.conf
|
||||||
|
ldsoconf = os.path.join(self.conf.treedir, 'etc', 'ld.so.conf')
|
||||||
|
touch(ldsoconf)
|
||||||
|
|
||||||
|
procdir = os.path.join(self.conf.treedir, 'proc')
|
||||||
|
if not os.path.isdir(procdir):
|
||||||
|
os.makedirs(procdir)
|
||||||
|
os.system('mount -t proc proc %s' % procdir)
|
||||||
|
|
||||||
|
f = open(ldsoconf, 'w')
|
||||||
|
f.write('/usr/kerberos/%s\n' % self.conf.libdir)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
os.chdir(self.conf.treedir)
|
||||||
|
os.system('/usr/sbin/chroot %s /sbin/ldconfig' % self.conf.treedir)
|
||||||
|
os.chdir(cwd)
|
||||||
|
|
||||||
|
if self.conf.buildarch not in ('s390', 's390x'):
|
||||||
|
rm(os.path.join(self.conf.treedir, 'usr', 'sbin', 'ldconfig'))
|
||||||
|
|
||||||
|
rm(os.path.join(self.conf.treedir, 'etc', 'ld.so.conf'))
|
||||||
|
os.system('umount %s' % procdir)
|
||||||
|
|
||||||
|
def scrub_treedir(self):
|
||||||
|
# XXX another part of crazy tree modification XXX
|
||||||
|
|
||||||
|
# figure out the gtk+ theme to keep
|
||||||
|
gtkrc = os.path.join(self.conf.treedir, 'etc', 'gtk-2.0', 'gtkrc')
|
||||||
|
gtk_theme_name = None
|
||||||
|
gtk_engine = None
|
||||||
|
gtk_icon_themes = []
|
||||||
|
|
||||||
|
if os.path.isfile(gtkrc):
|
||||||
|
f = open(gtkrc, 'r')
|
||||||
|
lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
line = line.strip()
|
||||||
|
if line.startswith('gtk-theme-name'):
|
||||||
|
gtk_theme_name = line[line.find('=') + 1:]
|
||||||
|
gtk_theme_name = gtk_theme_name.replace('"', '').strip()
|
||||||
|
|
||||||
|
# find the engine for this theme
|
||||||
|
gtkrc = os.path.join(self.conf.treedir, 'usr', 'share', 'themes',
|
||||||
|
gtk_theme_name, 'gtk-2.0', 'gtkrc')
|
||||||
|
if os.path.isfile(gtkrc):
|
||||||
|
f = open(gtkrc, 'r')
|
||||||
|
engine_lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for engine_line in engine_lines:
|
||||||
|
engine_line = engine_line.strip()
|
||||||
|
if engine_line.find('engine') != -1:
|
||||||
|
gtk_engine = engine_line[engine_line.find('"') + 1:]
|
||||||
|
gtk_engine = gtk_engine.replace('"', '').strip()
|
||||||
|
break
|
||||||
|
|
||||||
|
elif line.startswith('gtk-icon-theme-name'):
|
||||||
|
icon_theme = line[line.find('=') + 1:]
|
||||||
|
icon_theme = icon_theme.replace('"', '').strip()
|
||||||
|
gtk_icon_themes.append(icon_theme)
|
||||||
|
|
||||||
|
# bring in all inherited themes
|
||||||
|
while True:
|
||||||
|
icon_theme_index = os.path.join(self.conf.treedir, 'usr', 'share', 'icons',
|
||||||
|
icon_theme, 'index.theme')
|
||||||
|
if os.path.isfile(icon_theme_index):
|
||||||
|
inherits = False
|
||||||
|
f = open(icon_theme_index, 'r')
|
||||||
|
icon_lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for icon_line in icon_lines:
|
||||||
|
icon_line = icon_line.strip()
|
||||||
|
if icon_line.startswith('Inherits='):
|
||||||
|
inherits = True
|
||||||
|
icon_theme = icon_line[icon_line.find('=') + 1:]
|
||||||
|
icon_theme = icon_theme.replace('"', '').strip()
|
||||||
|
gtk_icon_themes.append(icon_theme)
|
||||||
|
break
|
||||||
|
|
||||||
|
if not inherits:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
# remove themes we don't need
|
||||||
|
theme_path = os.path.join(self.conf.treedir, 'usr', 'share', 'themes')
|
||||||
|
if os.path.isdir(theme_path):
|
||||||
|
for theme in filter(lambda theme: theme != gtk_theme_name, os.listdir(theme_path)):
|
||||||
|
theme = os.path.join(theme_path, theme)
|
||||||
|
shutil.rmtree(theme, ignore_errors=True)
|
||||||
|
|
||||||
|
# remove icons we don't need
|
||||||
|
icon_path = os.path.join(self.conf.treedir, 'usr', 'share', 'icons')
|
||||||
|
if os.path.isdir(icon_path):
|
||||||
|
for icon in filter(lambda icon: icon not in gtk_icon_themes, os.listdir(icon_path)):
|
||||||
|
icon = os.path.join(icon_path, icon)
|
||||||
|
shutil.rmtree(icon, ignore_errors=True)
|
||||||
|
|
||||||
|
# remove engines we don't need
|
||||||
|
tmp_path = os.path.join(self.conf.treedir, 'usr', self.conf.libdir, 'gtk-2.0')
|
||||||
|
if os.path.isdir(tmp_path):
|
||||||
|
fnames = map(lambda fname: os.path.join(tmp_path, fname, 'engines'), os.listdir(tmp_path))
|
||||||
|
dnames = filter(lambda fname: os.path.isdir(fname), fnames)
|
||||||
|
for dir in dnames:
|
||||||
|
engines = filter(lambda engine: engine.find(gtk_engine) == -1, os.listdir(dir))
|
||||||
|
for engine in engines:
|
||||||
|
engine = os.path.join(dir, engine)
|
||||||
|
os.unlink(engine)
|
||||||
|
|
||||||
|
# remove locales
|
||||||
|
langtable = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda', 'lang-table')
|
||||||
|
localepath = os.path.join(self.conf.treedir, 'usr', 'share', 'locale')
|
||||||
|
if os.path.isfile(langtable):
|
||||||
|
locales = set()
|
||||||
|
all_locales = set()
|
||||||
|
|
||||||
|
f = open(langtable, 'r')
|
||||||
|
lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
line = line.strip()
|
||||||
|
if not line or line.startswith('#'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
fields = line.split('\t')
|
||||||
|
|
||||||
|
if os.path.isdir(os.path.join(localepath, fields[1])):
|
||||||
|
locales.add(fields[1])
|
||||||
|
|
||||||
|
locale = fields[3].split('.')[0]
|
||||||
|
if os.path.isdir(os.path.join(localepath, locale)):
|
||||||
|
locales.add(locale)
|
||||||
|
|
||||||
|
for locale in os.listdir(localepath):
|
||||||
|
all_locales.add(locale)
|
||||||
|
|
||||||
|
locales_to_remove = list(all_locales.difference(locales))
|
||||||
|
for locale in locales_to_remove:
|
||||||
|
rmpath = os.path.join(localepath, locale)
|
||||||
|
shutil.rmtree(rmpath, ignore_errors=True)
|
||||||
|
|
||||||
|
# fixup joe links
|
||||||
|
joedir = os.path.join(self.conf.treedir, 'etc', 'joe')
|
||||||
|
if os.path.isdir(joedir):
|
||||||
|
os.symlink('jpicorc', os.path.join(joedir, 'picorc'))
|
||||||
|
os.symlink('jpicorc', os.path.join(joedir, 'jnanorc'))
|
||||||
|
os.symlink('jpicorc', os.path.join(joedir, 'nanorc'))
|
||||||
|
os.symlink('jmacsrc', os.path.join(joedir, 'emacsrc'))
|
||||||
|
os.symlink('jmacs', os.path.join(self.conf.treedir, 'usr', 'bin', 'emacs'))
|
||||||
|
os.symlink('jpico', os.path.join(self.conf.treedir, 'usr', 'bin', 'pico'))
|
||||||
|
os.symlink('jpico', os.path.join(self.conf.treedir, 'usr', 'bin', 'nano'))
|
||||||
|
|
||||||
|
# fix up some links for man page related stuff
|
||||||
|
for file in ['nroff', 'groff', 'iconv', 'geqn', 'gtbl', 'gpic', 'grefer']:
|
||||||
|
src = os.path.join('mnt', 'sysimage', 'usr', 'bin', file)
|
||||||
|
dst = os.path.join(self.conf.treedir, 'usr', 'bin', file)
|
||||||
|
if not os.path.isfile(dst):
|
||||||
|
os.symlink(src, dst)
|
||||||
|
|
||||||
|
# create selinux config
|
||||||
|
if os.path.exists(os.path.join(self.conf.treedir, 'etc', 'selinux', 'targeted')):
|
||||||
|
src = os.path.join(self.conf.datadir, 'selinux', 'config')
|
||||||
|
dst = os.path.join(self.conf.treedir, 'etc', 'selinux', 'config')
|
||||||
|
cp(src, dst)
|
||||||
|
|
||||||
|
# create libuser.conf
|
||||||
|
src = os.path.join(self.conf.datadir, 'libuser', 'libuser.conf')
|
||||||
|
dst = os.path.join(self.conf.treedir, 'etc', 'libuser.conf')
|
||||||
|
cp(src, dst)
|
||||||
|
|
||||||
|
# configure fedorakmod
|
||||||
|
fedorakmodconf = os.path.join(self.conf.treedir, 'etc', 'yum', 'pluginconf.d',
|
||||||
|
'fedorakmod.conf')
|
||||||
|
replace(fedorakmodconf, r'\(installforallkernels\) = 0', r'\1 = 1')
|
||||||
|
|
||||||
|
# fix /etc/man.config to point into /mnt/sysimage
|
||||||
|
manconfig = os.path.join(self.conf.treedir, 'etc', 'man.config')
|
||||||
|
|
||||||
|
# don't change MANPATH_MAP lines now
|
||||||
|
replace(manconfig, r'^MANPATH[^_MAP][ \t]*', r'&/mnt/sysimage')
|
||||||
|
# change MANPATH_MAP lines now
|
||||||
|
replace(manconfig, r'^MANPATH_MAP[ \t]*[a-zA-Z0-9/]*[ \t]*', r'&/mnt/sysimage')
|
||||||
|
|
||||||
|
# move yum repos
|
||||||
|
src = os.path.join(self.conf.treedir, 'etc', 'yum.repos.d')
|
||||||
|
dst = os.path.join(self.conf.treedir, 'etc', 'anaconda.repos.d')
|
||||||
|
mv(src, dst)
|
||||||
|
|
||||||
|
# remove libunicode-lite
|
||||||
|
rm(os.path.join(self.conf.treedir, 'usr', self.conf.libdir, 'libunicode-lite*'))
|
||||||
|
|
||||||
|
# make bash link
|
||||||
|
# XXX already exists
|
||||||
|
#if os.path.isfile(os.path.join(self.conf.treedir, 'bin', 'bash')):
|
||||||
|
# rm(os.path.join(self.conf.treedir, 'bin', 'ash'))
|
||||||
|
# os.symlink('bash', os.path.join(self.conf.treedir, 'bin', 'sh'))
|
||||||
|
|
||||||
|
# make awk link
|
||||||
|
# XXX already exists
|
||||||
|
#if os.path.isfile(os.path.join(self.conf.treedir, 'bin', 'gawk')):
|
||||||
|
# os.symlink('awk', os.path.join(self.conf.treedir, 'bin', 'gawk'))
|
||||||
|
|
||||||
|
# copy bootloaders
|
||||||
|
bootpath = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime', 'boot')
|
||||||
|
if not os.path.isdir(bootpath):
|
||||||
|
os.makedirs(bootpath)
|
||||||
|
|
||||||
|
if self.conf.buildarch in ('i386', 'i586', 'x86_64'):
|
||||||
|
for file in os.listdir(os.path.join(self.conf.treedir, 'boot')):
|
||||||
|
if file.startswith('memtest'):
|
||||||
|
src = os.path.join(self.conf.treedir, 'boot', file)
|
||||||
|
dst = os.path.join(bootpath, file)
|
||||||
|
cp(src, dst)
|
||||||
|
elif self.conf.buildarch in ('sparc',):
|
||||||
|
for file in os.listdir(os.path.join(self.conf.treedir, 'boot')):
|
||||||
|
if file.endswith('.b'):
|
||||||
|
src = os.path.join(self.conf.treedir, 'boot', file)
|
||||||
|
dst = os.path.join(bootpath, file)
|
||||||
|
cp(src, dst)
|
||||||
|
elif self.conf.buildarch in ('ppc', 'ppc64'):
|
||||||
|
src = os.path.join(self.conf.treedir, 'boot', 'efika.forth')
|
||||||
|
cp(src, bootpath)
|
||||||
|
elif self.conf.buildarch in ('alpha',):
|
||||||
|
src = os.path.join(self.conf.treedir, 'boot', 'bootlx')
|
||||||
|
cp(src, bootpath)
|
||||||
|
elif self.conf.buildarch in ('ia64',):
|
||||||
|
src = os.path.join(self.conf.treedir, 'boot', 'efi', 'EFI', 'redhat', '*')
|
||||||
|
cp(src, bootpath)
|
||||||
|
|
||||||
|
# remove not needed directories
|
||||||
|
# XXX i need this for kernel
|
||||||
|
#for dir in ('boot', 'home', 'root', 'tmp'):
|
||||||
|
# rm(os.path.join(self.conf.treedir, dir))
|
||||||
|
|
||||||
|
# remove not needed files
|
||||||
|
to_remove = set()
|
||||||
|
for root, dirs, files in os.walk(self.conf.treedir):
|
||||||
|
for file in files:
|
||||||
|
path = os.path.join(root, file)
|
||||||
|
if fnmatch.fnmatch(path, '*.a'):
|
||||||
|
if path.find('kernel-wrapper/wrapper.a') == -1:
|
||||||
|
to_remove.add(path)
|
||||||
|
elif fnmatch.fnmatch(path, 'lib*.la'):
|
||||||
|
if path.find('usr/' + self.conf.libdir + '/gtk-2.0') == -1:
|
||||||
|
to_remove.add(path)
|
||||||
|
elif fnmatch.fnmatch(path, '*.py'):
|
||||||
|
to_remove.add(path + 'o')
|
||||||
|
|
||||||
|
rm(path + 'c')
|
||||||
|
os.symlink('/dev/null', path + 'c')
|
||||||
|
|
||||||
|
for file in to_remove:
|
||||||
|
rm(file)
|
||||||
|
|
||||||
|
# nuke some python stuff we don't need
|
||||||
|
for fname in ['idle', 'distutils', 'bsddb', 'lib-old', 'hotshot', 'doctest.py', 'pydoc.py',
|
||||||
|
'site-packages/japanese', 'site-packages/japanese.pth']:
|
||||||
|
rm(os.path.join(self.conf.treedir, fname))
|
||||||
|
|
||||||
|
for fname in ['distutils', 'lib-dynload/japanese', 'encodings', 'compiler', 'email/test',
|
||||||
|
'curses', 'pydoc.py']:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'usr', self.conf.libdir, 'python?.?', 'site-packages',
|
||||||
|
fname))
|
||||||
|
|
||||||
|
def write_buildstamp(self):
|
||||||
|
outfile = os.path.join(self.conf.treedir, '.buildstamp')
|
||||||
|
|
||||||
|
# make imageuuid
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
arch = self.conf.buildarch
|
||||||
|
imageuuid = '%s.%s' % (now.strftime('%Y%m%d%H%M'), arch)
|
||||||
|
|
||||||
|
try:
|
||||||
|
f = open(outfile, 'w')
|
||||||
|
except IOError:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
f.write('%s\n' % imageuuid)
|
||||||
|
f.write('%s\n' % self.conf.product)
|
||||||
|
f.write('%s\n' % self.conf.version)
|
||||||
|
f.write('%s\n' % self.conf.bugurl)
|
||||||
|
f.close()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def init_outputdirs(self):
|
||||||
|
# create the destination directories
|
||||||
|
imagesdir = os.path.join(self.conf.outdir, 'images')
|
||||||
|
if os.path.exists(imagesdir):
|
||||||
|
rm(imagesdir)
|
||||||
|
os.makedirs(imagesdir)
|
||||||
|
|
||||||
|
pxebootdir = os.path.join(imagesdir, 'pxeboot')
|
||||||
|
os.makedirs(pxebootdir)
|
||||||
|
|
||||||
|
# create the isolinux directory
|
||||||
|
isolinuxdir = os.path.join(self.conf.outdir, 'isolinux')
|
||||||
|
if os.path.exists(isolinuxdir):
|
||||||
|
rm(isolinuxdir)
|
||||||
|
os.makedirs(isolinuxdir)
|
||||||
|
|
||||||
|
self.conf.addAttr(['imagesdir', 'pxebootdir', 'isolinuxdir'])
|
||||||
|
self.conf.set(imagesdir=imagesdir, pxebootdir=pxebootdir, isolinuxdir=isolinuxdir)
|
||||||
|
|
||||||
|
# write the images/README
|
||||||
|
src = os.path.join(self.conf.datadir, 'images', 'README')
|
||||||
|
dst = os.path.join(self.conf.imagesdir, 'README')
|
||||||
|
cp(src, dst)
|
||||||
|
replace(dst, r'@PRODUCT@', self.conf.product)
|
||||||
|
|
||||||
|
# write the images/pxeboot/README
|
||||||
|
src = os.path.join(self.conf.datadir, 'images', 'pxeboot', 'README')
|
||||||
|
dst = os.path.join(self.conf.pxebootdir, 'README')
|
||||||
|
cp(src, dst)
|
||||||
|
replace(dst, r'@PRODUCT@', self.conf.product)
|
||||||
|
|
||||||
|
|
||||||
|
# populate the isolinux directory
|
||||||
|
|
||||||
|
# XXX don't see this used anywhere...
|
||||||
|
syslinux = os.path.join(self.conf.treedir, 'usr', 'lib', 'syslinux', 'syslinux-nomtools')
|
||||||
|
if not os.path.isfile(syslinux):
|
||||||
|
sys.stderr.write('WARNING: %s does not exist\n' % syslinux)
|
||||||
|
syslinux = os.path.join(self.conf.treedir, 'usr', 'bin', 'syslinux')
|
||||||
|
if not os.path.isfile(syslinux):
|
||||||
|
sys.stderr.write('ERROR: %s does not exist\n' % syslinux)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# set up some dir variables for further use
|
||||||
|
anacondadir = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime')
|
||||||
|
bootdiskdir = os.path.join(anacondadir, 'boot')
|
||||||
|
syslinuxdir = os.path.join(self.conf.treedir, 'usr', 'lib', 'syslinux')
|
||||||
|
isolinuxbin = os.path.join(syslinuxdir, 'isolinux.bin')
|
||||||
|
|
||||||
|
if not os.path.isfile(isolinuxbin):
|
||||||
|
sys.stderr.write('ERROR: %s does not exist\n' % isolinuxbin)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if os.path.exists(isolinuxbin):
|
||||||
|
# copy the isolinux.bin
|
||||||
|
cp(isolinuxbin, self.conf.isolinuxdir)
|
||||||
|
|
||||||
|
# copy the syslinux.cfg to isolinux/isolinux.cfg
|
||||||
|
isolinuxcfg = os.path.join(self.conf.isolinuxdir, 'isolinux.cfg')
|
||||||
|
cp(os.path.join(bootdiskdir, 'syslinux.cfg'), isolinuxcfg)
|
||||||
|
|
||||||
|
# set the product and version in isolinux.cfg
|
||||||
|
replace(isolinuxcfg, r'@PRODUCT@', self.conf.product)
|
||||||
|
replace(isolinuxcfg, r'@VERSION@', self.conf.version)
|
||||||
|
|
||||||
|
# set up the label for finding stage2 with a hybrid iso
|
||||||
|
replace(isolinuxcfg, r'initrd=initrd.img', 'initrd=initrd.img stage2=hd:LABEL=%s' % self.conf.product)
|
||||||
|
|
||||||
|
# copy the grub.conf
|
||||||
|
cp(os.path.join(bootdiskdir, 'grub.conf'), self.conf.isolinuxdir)
|
||||||
|
|
||||||
|
# copy the splash files
|
||||||
|
vesasplash = os.path.join(anacondadir, 'syslinux-vesa-splash.jpg')
|
||||||
|
if os.path.isfile(vesasplash):
|
||||||
|
cp(vesasplash, os.path.join(self.conf.isolinuxdir, 'splash.jpg'))
|
||||||
|
vesamenu = os.path.join(syslinuxdir, 'vesamenu.c32')
|
||||||
|
cp(vesamenu, self.conf.isolinuxdir)
|
||||||
|
replace(isolinuxcfg, r'default linux', r'default vesamenu.c32')
|
||||||
|
replace(isolinuxcfg, r'prompt 1', r'#prompt 1')
|
||||||
|
else:
|
||||||
|
splashtools = os.path.join(anacondadir, 'splashtools.sh')
|
||||||
|
splashlss = os.path.join(bootdiskdir, 'splash.lss')
|
||||||
|
if os.path.isfile(splashtools):
|
||||||
|
cmd = '%s %s %s' % (splashtools,
|
||||||
|
os.path.join(bootdiskdir, 'syslinux-splash.jpg'),
|
||||||
|
splashlss)
|
||||||
|
os.system(cmd)
|
||||||
|
if os.path.isfile(splashlss):
|
||||||
|
cp(splashlss, self.conf.isolinuxdir)
|
||||||
|
|
||||||
|
# copy the .msg files
|
||||||
|
for file in os.listdir(bootdiskdir):
|
||||||
|
if file.endswith('.msg'):
|
||||||
|
cp(os.path.join(bootdiskdir, file), self.conf.isolinuxdir)
|
||||||
|
replace(os.path.join(self.conf.isolinuxdir, file), r'@VERSION@', self.conf.version)
|
||||||
|
|
||||||
|
# if present, copy the memtest
|
||||||
|
cp(os.path.join(self.conf.treedir, 'boot', 'memtest*'),
|
||||||
|
os.path.join(self.conf.isolinuxdir, 'memtest'))
|
||||||
|
if os.path.isfile(os.path.join(self.conf.isolinuxdir, 'memtest')):
|
||||||
|
text = "label memtest86\n"
|
||||||
|
text = text + " menu label ^Memory test\n"
|
||||||
|
text = text + " kernel memtest\n"
|
||||||
|
text = text + " append -\n"
|
||||||
|
edit(isolinuxcfg, text, append=True)
|
||||||
|
else:
|
||||||
|
sys.stderr.write('No isolinux binaries found\n')
|
||||||
|
|
||||||
|
def create_initrd(self):
|
||||||
|
# get installed kernel file
|
||||||
|
kernelfile = None
|
||||||
|
kerneldir = os.path.join(self.conf.treedir, 'boot')
|
||||||
|
|
||||||
|
if self.conf.buildarch in ('ia64',):
|
||||||
|
kerneldir = os.path.join(self.conf.treedir, 'boot', 'efi', 'EFI', 'redhat')
|
||||||
|
|
||||||
|
for file in os.listdir(kerneldir):
|
||||||
|
if fnmatch.fnmatch(file, 'vmlinuz-*'):
|
||||||
|
kernelfile = os.path.join(self.conf.treedir, 'boot', file)
|
||||||
|
|
||||||
|
if not kernelfile:
|
||||||
|
sys.stderr.write('ERROR: No kernel image found\n')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
initrd = images.InitRD(self.conf, self.yum, kernelfile)
|
||||||
|
|
||||||
|
# install needed packages
|
||||||
|
packages = initrd.get_packages()
|
||||||
|
self.yum.addPackages(list(packages))
|
||||||
|
self.yum.install()
|
||||||
|
|
||||||
|
# copy the kernel file
|
||||||
|
cp(kernelfile, os.path.join(self.conf.isolinuxdir, 'vmlinuz'))
|
||||||
|
cp(kernelfile, os.path.join(self.conf.pxebootdir, 'vmlinuz'))
|
||||||
|
|
||||||
|
# create the initrd.img
|
||||||
|
initrd.create(os.path.join(self.conf.isolinuxdir, 'initrd.img'))
|
||||||
|
initrd.clean_up()
|
||||||
|
|
||||||
|
cp(os.path.join(self.conf.isolinuxdir, 'initrd.img'), self.conf.pxebootdir)
|
||||||
|
|
||||||
|
# XEN
|
||||||
|
if self.conf.buildarch in ('i386',):
|
||||||
|
self.yum.addPackages('kernel-PAE')
|
||||||
|
self.yum.install()
|
||||||
|
|
||||||
|
xenkernel = None
|
||||||
|
for file in os.listdir(kerneldir):
|
||||||
|
if fnmatch.fnmatch(file, 'vmlinuz-*.PAE'):
|
||||||
|
xenkernel = os.path.join(self.conf.treedir, 'boot', file)
|
||||||
|
|
||||||
|
if not xenkernel:
|
||||||
|
sys.stderr.write('ERROR: No XEN kernel image found\n')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
initrd = images.InitRD(self.conf, self.yum, xenkernel)
|
||||||
|
|
||||||
|
cp(xenkernel, os.path.join(self.conf.pxebootdir, 'vmlinuz-PAE'))
|
||||||
|
|
||||||
|
initrd.create(os.path.join(self.conf.pxebootdir, 'initrd-PAE.img'))
|
||||||
|
#initrd.clean_up()
|
||||||
|
|
||||||
|
# add xen kernel files to .treeinfo
|
||||||
|
text = '[images-xen]\n'
|
||||||
|
text += 'kernel = images/pxeboot/vmlinuz-PAE\n'
|
||||||
|
text += 'initrd = images/pxeboot/initrd-PAE.img\n'
|
||||||
|
edit(os.path.join(self.conf.outdir, '.treeinfo'), append=True, text=text)
|
||||||
|
|
||||||
|
def create_installimg(self, type='squashfs'):
|
||||||
|
print('Removing not needed files from install tree')
|
||||||
|
i = images.Install(self.conf)
|
||||||
|
i.scrub()
|
||||||
|
i.fix_links()
|
||||||
|
|
||||||
|
print('Creating the image file')
|
||||||
|
if type == 'squashfs':
|
||||||
|
cmd = 'mksquashfs %s %s -all-root -no-fragments -no-progress' % (self.conf.treedir,
|
||||||
|
os.path.join(self.conf.imagesdir, 'install.img'))
|
||||||
|
err, output = commands.getstatusoutput(cmd)
|
||||||
|
elif type == 'cramfs':
|
||||||
|
if self.conf.buildarch == 'sparc64':
|
||||||
|
crambs = '--blocksize 8192'
|
||||||
|
elif self.conf.buildarch == 'sparc':
|
||||||
|
crambs = '--blocksize 4096'
|
||||||
|
else:
|
||||||
|
crambs = ''
|
||||||
|
|
||||||
|
cmd = 'mkfs.cramfs %s %s %s' % (crambs, self.conf.treedir, os.path.join(self.conf.imagesdir, 'install.img'))
|
||||||
|
err, output = commands.getstatusoutput(cmd)
|
||||||
|
elif type == 'ext2':
|
||||||
|
# TODO
|
||||||
|
pass
|
||||||
|
|
||||||
|
text = '\n[stage2]\n'
|
||||||
|
text += 'mainimage = %s/install.img\n' % self.conf.imagesdir
|
||||||
|
edit(os.path.join(self.conf.outdir, '.treeinfo'), append=True, text=text)
|
||||||
|
|
||||||
|
def clean_up(self, trash=[]):
|
||||||
for item in trash:
|
for item in trash:
|
||||||
if os.path.exists(item):
|
if os.path.exists(item):
|
||||||
rm(item)
|
rm(item)
|
||||||
|
|
||||||
# remove the whole lorax tempdir
|
# remove the whole lorax temp directory
|
||||||
if os.path.isdir(self.conf.tempdir):
|
if os.path.exists(self.conf.tempdir):
|
||||||
rm(self.conf.tempdir)
|
rm(self.conf.tempdir)
|
||||||
|
@ -1,610 +1,3 @@
|
|||||||
#
|
|
||||||
# pylorax instroot module
|
|
||||||
# Install image and tree support data generation tool -- Python module.
|
|
||||||
#
|
|
||||||
# Copyright (C) 2008, 2009 Red Hat, Inc.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# Author(s): David Cantrell <dcantrell@redhat.com>
|
|
||||||
# Martin Gracik <mgracik@redhat.com>
|
|
||||||
#
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import stat
|
|
||||||
import shutil
|
|
||||||
import glob
|
|
||||||
import fnmatch
|
|
||||||
import re
|
|
||||||
import fileinput
|
|
||||||
import subprocess
|
|
||||||
import pwd
|
|
||||||
import grp
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
from fileutils import cp, mv, touch
|
|
||||||
from yumutils import extract_rpm
|
|
||||||
|
|
||||||
import utils
|
|
||||||
|
|
||||||
|
|
||||||
class InstRoot:
|
|
||||||
"""InstRoot(config, options, yum)
|
|
||||||
|
|
||||||
Create a instroot tree for the specified architecture. The list of
|
|
||||||
packages to install are specified in the /etc/lorax/packages and
|
|
||||||
/etc/lorax/ARCH/packages files.
|
|
||||||
|
|
||||||
yumconf is the path to the yum configuration file created for this run of
|
|
||||||
lorax. arch is the platform name we are building for, treedir is
|
|
||||||
the location where the instroot tree should go
|
|
||||||
(will be treedir + '/install'). updates is an optional path to a
|
|
||||||
directory of updated RPM packages for the instroot.
|
|
||||||
|
|
||||||
The conf, yumconf, arch, and treedir parameters are all required.
|
|
||||||
|
|
||||||
On success, this function returns True. On failure, False is
|
|
||||||
returned or the program is aborted immediately.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, config, options, yum):
|
|
||||||
self.conf = config
|
|
||||||
self.opts = options
|
|
||||||
self.yum = yum
|
|
||||||
|
|
||||||
self.destdir = self.conf.treedir
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
"""run()
|
|
||||||
|
|
||||||
Generate the instroot tree and prepare it for building images.
|
|
||||||
"""
|
|
||||||
|
|
||||||
self.packages = self.__getPackageList()
|
|
||||||
self.__installPackages()
|
|
||||||
|
|
||||||
if not self.__installKernel():
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# XXX
|
|
||||||
#self.__scrubInstRoot()
|
|
||||||
|
|
||||||
def __getPackageList(self):
|
|
||||||
packages = set()
|
|
||||||
|
|
||||||
packages_files = []
|
|
||||||
packages_files.append(os.path.join(self.conf.confdir, 'packages'))
|
|
||||||
packages_files.append(os.path.join(self.conf.confdir, self.opts.buildarch, 'packages'))
|
|
||||||
|
|
||||||
for pfile in packages_files:
|
|
||||||
if os.path.isfile(pfile):
|
|
||||||
f = open(pfile, 'r')
|
|
||||||
for line in f.readlines():
|
|
||||||
line = line.strip()
|
|
||||||
|
|
||||||
if not line or line.startswith('#'):
|
|
||||||
continue
|
|
||||||
|
|
||||||
if line.startswith('-'):
|
|
||||||
packages.discard(line[1:])
|
|
||||||
else:
|
|
||||||
packages.add(line)
|
|
||||||
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
packages = list(packages)
|
|
||||||
packages.sort()
|
|
||||||
|
|
||||||
return packages
|
|
||||||
|
|
||||||
def __installPackages(self):
|
|
||||||
# XXX i don't think this is needed
|
|
||||||
# do some prep work on the destdir before calling yum
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'boot'))
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'usr', 'sbin'))
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'usr', 'lib', 'debug'))
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'usr', 'src', 'debug'))
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'tmp'))
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'var', 'log'))
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'var', 'lib', 'yum'))
|
|
||||||
|
|
||||||
# XXX maybe only this...
|
|
||||||
#os.makedirs(os.path.join(self.destdir, 'var', 'lib'))
|
|
||||||
os.symlink(os.path.join(os.path.sep, 'tmp'), os.path.join(self.destdir, 'var', 'lib', 'xkb'))
|
|
||||||
|
|
||||||
self.yum.install(self.packages)
|
|
||||||
|
|
||||||
# copy updates to treedir
|
|
||||||
if self.opts.updates and os.path.isdir(self.opts.updates):
|
|
||||||
cp(os.path.join(self.opts.updates, '*'), self.destdir)
|
|
||||||
|
|
||||||
# XXX
|
|
||||||
def __installKernel(self):
|
|
||||||
arches = [self.opts.buildarch]
|
|
||||||
efiarch = []
|
|
||||||
kerneltags = ['kernel']
|
|
||||||
kernelxen = []
|
|
||||||
|
|
||||||
if self.opts.buildarch == 'ppc':
|
|
||||||
arches = ['ppc64', 'ppc']
|
|
||||||
elif self.opts.buildarch == 'i386':
|
|
||||||
arches = ['i586']
|
|
||||||
efiarch = ['ia32']
|
|
||||||
kerneltags = ['kernel', 'kernel-PAE']
|
|
||||||
kernelxen = ['kernel-PAE']
|
|
||||||
elif self.opts.buildarch == 'x86_64':
|
|
||||||
efiarch = ['x64']
|
|
||||||
elif self.opts.buildarch == 'ia64':
|
|
||||||
efiarch = ['ia64']
|
|
||||||
|
|
||||||
kpackages = self.yum.find(kerneltags)
|
|
||||||
|
|
||||||
if not kpackages:
|
|
||||||
sys.stderr.write('ERROR: Unable to find any kernel package\n')
|
|
||||||
return False
|
|
||||||
|
|
||||||
# create the modinfo file
|
|
||||||
(fd, modinfo) = tempfile.mkstemp(prefix='modinfo-%s.' % self.opts.buildarch,
|
|
||||||
dir=self.conf.tempdir)
|
|
||||||
self.conf.addAttr('modinfo')
|
|
||||||
self.conf.set(modinfo=modinfo)
|
|
||||||
|
|
||||||
for kernel in kpackages:
|
|
||||||
fn = self.yum.download(kernel)
|
|
||||||
kernelroot = os.path.join(self.conf.kernelbase, kernel.arch)
|
|
||||||
extract_rpm(fn, kernelroot)
|
|
||||||
os.unlink(fn)
|
|
||||||
|
|
||||||
# get vmlinuz and version
|
|
||||||
dir = os.path.join(kernelroot, 'boot')
|
|
||||||
if self.opts.buildarch == 'ia64':
|
|
||||||
dir = os.path.join(dir, 'efi', 'EFI', 'redhat')
|
|
||||||
|
|
||||||
vmlinuz = None
|
|
||||||
for file in os.listdir(dir):
|
|
||||||
if file.startswith('vmlinuz'):
|
|
||||||
vmlinuz = file
|
|
||||||
prefix, sep, version = file.partition('-')
|
|
||||||
|
|
||||||
if not vmlinuz:
|
|
||||||
sys.stderr.write('ERROR: vmlinuz file not found\n')
|
|
||||||
return False
|
|
||||||
|
|
||||||
modules_dir = os.path.join(kernelroot, 'lib', 'modules', version)
|
|
||||||
if not os.path.isdir(modules_dir):
|
|
||||||
sys.stderr.write('ERROR: modules directory not found\n')
|
|
||||||
return False
|
|
||||||
|
|
||||||
allmods = []
|
|
||||||
for file in os.listdir(modules_dir):
|
|
||||||
if file.endswith('.ko'):
|
|
||||||
allmods.append(os.path.join(modules_dir, file))
|
|
||||||
|
|
||||||
# install firmware
|
|
||||||
fpackages = self.yum.find('*firmware*')
|
|
||||||
for firmware in fpackages:
|
|
||||||
fn = self.yum.download(firmware)
|
|
||||||
extract_rpm(fn, kernelroot)
|
|
||||||
os.unlink(fn)
|
|
||||||
|
|
||||||
utils.genmodinfo(modules_dir, self.conf.modinfo)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def __scrubInstRoot(self):
|
|
||||||
self.__createConfigFiles()
|
|
||||||
self.__removeGtkThemes()
|
|
||||||
self.__removeLocales()
|
|
||||||
self.__fixManPages()
|
|
||||||
self.__installStubs()
|
|
||||||
self.__copyBootloaders()
|
|
||||||
self.__moveYumRepos()
|
|
||||||
self.__configureKmod()
|
|
||||||
self.__moveAnacondaFiles()
|
|
||||||
self.__setShellLinks()
|
|
||||||
#self.__moveBins()
|
|
||||||
self.__removeUnwanted()
|
|
||||||
self.__changeDestDirPermissions()
|
|
||||||
self.__createLDConfig()
|
|
||||||
self.__setBusyboxLinks()
|
|
||||||
self.__strip()
|
|
||||||
#self.__fixBrokenLinks()
|
|
||||||
|
|
||||||
def __createConfigFiles(self):
|
|
||||||
# create %gconf.xml
|
|
||||||
dogtailconf = os.path.join(self.conf.datadir, 'dogtail-%gconf.xml')
|
|
||||||
if os.path.isfile(dogtailconf):
|
|
||||||
os.makedirs(os.path.join(self.destdir, '.gconf', 'desktop', 'gnome', 'interface'))
|
|
||||||
touch(os.path.join(self.destdir, '.gconf', 'desktop', '%gconf.xml'))
|
|
||||||
touch(os.path.join(self.destdir, '.gconf', 'desktop', 'gnome', '%gconf.xml'))
|
|
||||||
|
|
||||||
dst = os.path.join(self.destdir, '.gconf', 'desktop', 'gnome', 'interface', '%gconf.xml')
|
|
||||||
cp(dogtailconf, dst)
|
|
||||||
|
|
||||||
# create selinux config
|
|
||||||
if os.path.isfile(os.path.join(self.destdir, 'etc', 'selinux', 'targeted')):
|
|
||||||
selinuxconf = os.path.join(self.conf.datadir, 'selinux-config')
|
|
||||||
if os.path.isfile(selinuxconf):
|
|
||||||
dst = os.path.join(self.destdir, 'etc', 'selinux', 'config')
|
|
||||||
cp(selinuxconf, dst)
|
|
||||||
|
|
||||||
# create libuser.conf
|
|
||||||
libuserconf = os.path.join(self.conf.datadir, 'libuser.conf')
|
|
||||||
if os.path.isfile(libuserconf):
|
|
||||||
dst = os.path.join(self.destdir, 'etc', 'libuser.conf')
|
|
||||||
cp(libuserconf, dst)
|
|
||||||
|
|
||||||
def __removeGtkThemes(self):
|
|
||||||
# figure out the gtk+ theme to keep
|
|
||||||
gtkrc = os.path.join(self.destdir, 'etc', 'gtk-2.0', 'gtkrc')
|
|
||||||
gtk_theme_name = None
|
|
||||||
gtk_engine = None
|
|
||||||
gtk_icon_themes = []
|
|
||||||
|
|
||||||
if os.path.isfile(gtkrc):
|
|
||||||
f = open(gtkrc, 'r')
|
|
||||||
lines = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
for line in lines:
|
|
||||||
line = line.strip()
|
|
||||||
if line.startswith('gtk-theme-name'):
|
|
||||||
gtk_theme_name = line[line.find('=') + 1:]
|
|
||||||
gtk_theme_name = gtk_theme_name.replace('"', '').strip()
|
|
||||||
|
|
||||||
# find the engine for this theme
|
|
||||||
gtkrc = os.path.join(self.destdir, 'usr', 'share', 'themes',
|
|
||||||
gtk_theme_name, 'gtk-2.0', 'gtkrc')
|
|
||||||
if os.path.isfile(gtkrc):
|
|
||||||
f = open(gtkrc, 'r')
|
|
||||||
engine_lines = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
for engine_line in engine_lines:
|
|
||||||
engine_line = engine_line.strip()
|
|
||||||
if engine_line.find('engine') != -1:
|
|
||||||
gtk_engine = engine_line[engine_line.find('"') + 1:]
|
|
||||||
gtk_engine = gtk_engine.replace('"', '').strip()
|
|
||||||
break
|
|
||||||
|
|
||||||
elif line.startswith('gtk-icon-theme-name'):
|
|
||||||
icon_theme = line[line.find('=') + 1:]
|
|
||||||
icon_theme = icon_theme.replace('"', '').strip()
|
|
||||||
gtk_icon_themes.append(icon_theme)
|
|
||||||
|
|
||||||
# bring in all inherited themes
|
|
||||||
while True:
|
|
||||||
icon_theme_index = os.path.join(self.destdir, 'usr', 'share', 'icons',
|
|
||||||
icon_theme, 'index.theme')
|
|
||||||
if os.path.isfile(icon_theme_index):
|
|
||||||
inherits = False
|
|
||||||
f = open(icon_theme_index, 'r')
|
|
||||||
icon_lines = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
for icon_line in icon_lines:
|
|
||||||
icon_line = icon_line.strip()
|
|
||||||
if icon_line.startswith('Inherits='):
|
|
||||||
inherits = True
|
|
||||||
icon_theme = icon_line[icon_line.find('=') + 1:]
|
|
||||||
icon_theme = icon_theme.replace('"', '').strip()
|
|
||||||
gtk_icon_themes.append(icon_theme)
|
|
||||||
break
|
|
||||||
|
|
||||||
if not inherits:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
|
|
||||||
# remove themes we don't need
|
|
||||||
theme_path = os.path.join(self.destdir, 'usr', 'share', 'themes')
|
|
||||||
if os.path.isdir(theme_path):
|
|
||||||
for theme in filter(lambda theme: theme != gtk_theme_name, os.listdir(theme_path)):
|
|
||||||
theme = os.path.join(theme_path, theme)
|
|
||||||
shutil.rmtree(theme, ignore_errors=True)
|
|
||||||
|
|
||||||
# remove icons we don't need
|
|
||||||
icon_path = os.path.join(self.destdir, 'usr', 'share', 'icons')
|
|
||||||
if os.path.isdir(icon_path):
|
|
||||||
for icon in filter(lambda icon: icon not in gtk_icon_themes, os.listdir(icon_path)):
|
|
||||||
icon = os.path.join(icon_path, icon)
|
|
||||||
shutil.rmtree(icon, ignore_errors=True)
|
|
||||||
|
|
||||||
# remove engines we don't need
|
|
||||||
tmp_path = os.path.join(self.destdir, 'usr', self.opts.libdir, 'gtk-2.0')
|
|
||||||
if os.path.isdir(tmp_path):
|
|
||||||
fnames = map(lambda fname: os.path.join(tmp_path, fname, 'engines'), os.listdir(tmp_path))
|
|
||||||
dnames = filter(lambda fname: os.path.isdir(fname), fnames)
|
|
||||||
for dir in dnames:
|
|
||||||
engines = filter(lambda engine: engine.find(gtk_engine) == -1, os.listdir(dir))
|
|
||||||
for engine in engines:
|
|
||||||
engine = os.path.join(dir, engine)
|
|
||||||
os.unlink(engine)
|
|
||||||
|
|
||||||
def __removeLocales(self):
|
|
||||||
langtable = os.path.join(self.destdir, 'usr', 'lib', 'anaconda', 'lang-table')
|
|
||||||
localepath = os.path.join(self.destdir, 'usr', 'share', 'locale')
|
|
||||||
if os.path.isfile(langtable):
|
|
||||||
locales = set()
|
|
||||||
all_locales = set()
|
|
||||||
|
|
||||||
f = open(langtable, 'r')
|
|
||||||
lines = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
for line in lines:
|
|
||||||
line = line.strip()
|
|
||||||
if not line or line.startswith('#'):
|
|
||||||
continue
|
|
||||||
|
|
||||||
fields = line.split('\t')
|
|
||||||
|
|
||||||
if os.path.isdir(os.path.join(localepath, fields[1])):
|
|
||||||
locales.add(fields[1])
|
|
||||||
|
|
||||||
locale = fields[3].split('.')[0]
|
|
||||||
if os.path.isdir(os.path.join(localepath, locale)):
|
|
||||||
locales.add(locale)
|
|
||||||
|
|
||||||
for locale in os.listdir(localepath):
|
|
||||||
all_locales.add(locale)
|
|
||||||
|
|
||||||
locales_to_remove = list(all_locales.difference(locales))
|
|
||||||
for locale in locales_to_remove:
|
|
||||||
rmpath = os.path.join(localepath, locale)
|
|
||||||
shutil.rmtree(rmpath, ignore_errors=True)
|
|
||||||
|
|
||||||
def __fixManPages(self):
|
|
||||||
for file in ['nroff', 'groff', 'iconv', 'geqn', 'gtbl', 'gpic', 'grefer']:
|
|
||||||
src = os.path.join('mnt', 'sysimage', 'usr', 'bin', file)
|
|
||||||
dst = os.path.join(self.destdir, 'usr', 'bin', file)
|
|
||||||
if not os.path.isfile(dst):
|
|
||||||
os.symlink(src, dst)
|
|
||||||
|
|
||||||
# fix /etc/man.config to point to /mnt/sysimage
|
|
||||||
manconfig = os.path.join(self.destdir, 'etc', 'man.config')
|
|
||||||
|
|
||||||
# XXX WHY?
|
|
||||||
# don't change MANPATH_MAP lines now
|
|
||||||
fin = fileinput.input(manconfig, inplace=1)
|
|
||||||
for line in fin:
|
|
||||||
line = re.sub(r'^MANPATH[^_MAP][ \t]*', r'&/mnt/sysimage', line)
|
|
||||||
sys.stdout.write(line)
|
|
||||||
fin.close()
|
|
||||||
|
|
||||||
# change MANPATH_MAP lines
|
|
||||||
fin = fileinput.input(manconfig, inplace=1)
|
|
||||||
for line in fin:
|
|
||||||
line = re.sub(r'^MANPATH_MAP[ \t]*[a-zA-Z0-9/]*[ \t]*', r'&/mnt/sysimage', line)
|
|
||||||
sys.stdout.write(line)
|
|
||||||
fin.close()
|
|
||||||
|
|
||||||
def __installStubs(self):
|
|
||||||
for subdir in ['lib', 'firmware']:
|
|
||||||
subdir = os.path.join(self.destdir, subdir)
|
|
||||||
if not os.path.isdir(subdir):
|
|
||||||
os.makedirs(subdir)
|
|
||||||
|
|
||||||
for subdir in ['modules', 'firmware']:
|
|
||||||
src = os.path.join(os.path.sep, subdir)
|
|
||||||
dst = os.path.join(self.destdir, 'lib', subdir)
|
|
||||||
shutil.rmtree(dst, ignore_errors=True)
|
|
||||||
os.symlink(src, dst)
|
|
||||||
|
|
||||||
for prog in ['raidstart', 'raidstop', 'losetup', 'list-harddrives', 'loadkeys', 'mknod',
|
|
||||||
'syslogd']:
|
|
||||||
stub = "%s-stub" % (prog,)
|
|
||||||
src = os.path.join(self.destdir, 'usr', 'lib', 'anaconda', stub)
|
|
||||||
dst = os.path.join(self.destdir, 'usr', 'bin', prog)
|
|
||||||
if os.path.isfile(src) and not os.path.isfile(dst):
|
|
||||||
cp(src, dst)
|
|
||||||
|
|
||||||
def __copyBootloaders(self):
|
|
||||||
bootpath = os.path.join(self.destdir, 'usr', 'lib', 'anaconda-runtime', 'boot')
|
|
||||||
if not os.path.isdir(bootpath):
|
|
||||||
os.makedirs(bootpath)
|
|
||||||
|
|
||||||
if self.opts.buildarch == 'i386' or self.opts.buildarch == 'x86_64':
|
|
||||||
for bootfile in os.listdir(os.path.join(self.destdir, 'boot')):
|
|
||||||
if bootfile.startswith('memtest'):
|
|
||||||
src = os.path.join(self.destdir, 'boot', bootfile)
|
|
||||||
dst = os.path.join(bootpath, bootfile)
|
|
||||||
cp(src, dst)
|
|
||||||
elif self.opts.buildarch.startswith('sparc'):
|
|
||||||
for bootfile in os.listdir(os.path.join(self.destdir, 'boot')):
|
|
||||||
if bootfile.endswith('.b'):
|
|
||||||
src = os.path.join(self.destdir, 'boot', bootfile)
|
|
||||||
dst = os.path.join(bootpath, bootfile)
|
|
||||||
cp(src, dst)
|
|
||||||
elif self.opts.buildarch.startswith('ppc'):
|
|
||||||
src = os.path.join(self.destdir, 'boot', 'efika.forth')
|
|
||||||
dst = os.path.join(bootpath, 'efika.forth')
|
|
||||||
cp(src, dst)
|
|
||||||
elif self.opts.buildarch == 'alpha':
|
|
||||||
src = os.path.join(self.destdir, 'boot', 'bootlx')
|
|
||||||
dst = os.path.join(bootpath, 'bootlx')
|
|
||||||
cp(src, dst)
|
|
||||||
elif self.opts.buildarch == 'ia64':
|
|
||||||
src = os.path.join(self.destdir, 'boot', 'efi', 'EFI', 'redhat')
|
|
||||||
shutil.rmtree(bootpath, ignore_errors=True)
|
|
||||||
cp(src, bootpath)
|
|
||||||
|
|
||||||
def __moveYumRepos(self):
|
|
||||||
src = os.path.join(self.destdir, 'etc', 'yum.repos.d')
|
|
||||||
dst = os.path.join(self.destdir, 'etc', 'anaconda.repos.d')
|
|
||||||
if os.path.isdir(src):
|
|
||||||
shutil.rmtree(dst, ignore_errors=True)
|
|
||||||
mv(src, dst)
|
|
||||||
|
|
||||||
def __configureKmod(self):
|
|
||||||
fedorakmodconf = os.path.join(self.destdir, 'etc', 'yum', 'pluginconf.d', 'fedorakmod.conf')
|
|
||||||
|
|
||||||
# XXX this file does not exist, what package provides it?
|
|
||||||
if not os.path.exists(fedorakmodconf):
|
|
||||||
return
|
|
||||||
|
|
||||||
fin = fileinput.input(fedorakmodconf, inplace=1)
|
|
||||||
for line in fin:
|
|
||||||
line = re.sub(r'\(installforallkernels\) = 0', r'\1 = 1', line)
|
|
||||||
sys.stdout.write(line)
|
|
||||||
fin.close()
|
|
||||||
|
|
||||||
def __moveAnacondaFiles(self):
|
|
||||||
# move executable
|
|
||||||
src = os.path.join(self.destdir, 'usr', 'sbin', 'anaconda')
|
|
||||||
dst = os.path.join(self.destdir, 'usr', 'bin', 'anaconda')
|
|
||||||
mv(src, dst)
|
|
||||||
|
|
||||||
# move libraries
|
|
||||||
src = os.path.join(self.destdir, 'usr', 'lib', 'anaconda-runtime', 'lib')
|
|
||||||
dst = os.path.join(self.destdir, 'usr', self.libdir)
|
|
||||||
for fname in glob.glob(src + '*'):
|
|
||||||
mv(fname, dst)
|
|
||||||
|
|
||||||
def __setShellLinks(self):
|
|
||||||
bash = os.path.join(self.destdir, 'bin', 'bash')
|
|
||||||
ash = os.path.join(self.destdir, 'bin', 'ash')
|
|
||||||
sh = os.path.join(self.destdir, 'bin', 'sh')
|
|
||||||
busybox = os.path.join(self.destdir, 'bin', 'busybox')
|
|
||||||
|
|
||||||
if os.path.exists(bash):
|
|
||||||
# XXX is this needed? i don't have ash in the tree...
|
|
||||||
try:
|
|
||||||
os.unlink(ash)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
os.unlink(sh)
|
|
||||||
os.symlink(bash, sh)
|
|
||||||
else:
|
|
||||||
os.unlink(sh)
|
|
||||||
os.symlink(busybox, sh)
|
|
||||||
|
|
||||||
def __moveBins(self):
|
|
||||||
# XXX why do we want to move everything to /usr when in mk-images we copy it back?
|
|
||||||
bin = os.path.join(self.destdir, 'bin')
|
|
||||||
sbin = os.path.join(self.destdir, 'sbin')
|
|
||||||
|
|
||||||
if not os.path.exists(bin) or not os.path.exists(sbin):
|
|
||||||
raise Error, 'bin or sbin directory missing'
|
|
||||||
|
|
||||||
dst = os.path.join(self.destdir, 'usr')
|
|
||||||
for src in (bin, sbin):
|
|
||||||
mv(src, dst)
|
|
||||||
|
|
||||||
def __removeUnwanted(self):
|
|
||||||
for subdir in ['boot', 'home', 'root', 'tmp']:
|
|
||||||
shutil.rmtree(os.path.join(self.destdir, subdir), ignore_errors=True)
|
|
||||||
|
|
||||||
for subdir in ['doc', 'info']:
|
|
||||||
shutil.rmtree(os.path.join(self.destdir, 'usr', 'share', subdir), ignore_errors=True)
|
|
||||||
|
|
||||||
for libname in glob.glob(os.path.join(self.destdir, 'usr', self.libdir, 'libunicode-lite*')):
|
|
||||||
shutil.rmtree(libname, ignore_errors=True)
|
|
||||||
|
|
||||||
to_remove = set()
|
|
||||||
for root, files, dirs in os.walk(self.destdir):
|
|
||||||
for file in files:
|
|
||||||
path = os.path.join(root, file)
|
|
||||||
if fnmatch.fnmatch(path, '*.a'):
|
|
||||||
if path.find('kernel-wrapper/wrapper.a') == -1:
|
|
||||||
to_remove.append(path)
|
|
||||||
elif fnmatch.fnmatch(path, 'lib*.la'):
|
|
||||||
if path.find('usr/' + self.libdir + '/gtk-2.0') == -1:
|
|
||||||
to_remove.append(path)
|
|
||||||
elif fnmatch.fnmatch(path, '*.py'):
|
|
||||||
to_remove.append(path + 'o')
|
|
||||||
to_remove.append(path + 'c')
|
|
||||||
os.symlink('/dev/null', path + 'c')
|
|
||||||
|
|
||||||
for file in to_remove:
|
|
||||||
if os.path.isdir(file):
|
|
||||||
shutil.rmtree(file)
|
|
||||||
else:
|
|
||||||
os.unlink(file)
|
|
||||||
|
|
||||||
# nuke some python stuff we don't need
|
|
||||||
for fname in ['idle', 'distutils', 'bsddb', 'lib-old', 'hotshot', 'doctest.py', 'pydoc.py',
|
|
||||||
'site-packages/japanese', 'site-packages/japanese.pth']:
|
|
||||||
path = os.path.join(self.destdir, fname)
|
|
||||||
if os.path.isdir(path):
|
|
||||||
shutil.rmtree(path)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
os.unlink(path)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
for fname in ['distutils', 'lib-dynload/japanese', 'encodings', 'compiler', 'email/test',
|
|
||||||
'curses', 'pydoc.py']:
|
|
||||||
path = os.path.join(self.destdir, 'usr', self.libdir, 'python?.?', 'site-packages',
|
|
||||||
fname)
|
|
||||||
for item in glob.glob(path):
|
|
||||||
if os.path.isdir(item):
|
|
||||||
shutil.rmtree(item)
|
|
||||||
else:
|
|
||||||
os.unlink(item)
|
|
||||||
|
|
||||||
def __changeDestDirPermissions(self):
|
|
||||||
root_uid = pwd.getpwnam('root')[2]
|
|
||||||
root_gid = grp.getgrnam('root')[2]
|
|
||||||
|
|
||||||
for root, files, dirs in os.walk(self.destdir):
|
|
||||||
os.chown(root, root_uid, root_gid)
|
|
||||||
os.chmod(root, 0755)
|
|
||||||
|
|
||||||
for file in files:
|
|
||||||
path = os.path.join(root, file)
|
|
||||||
os.chown(path, root_uid, root_gid)
|
|
||||||
|
|
||||||
mode = os.stat(path).st_mode
|
|
||||||
if (mode & stat.S_IXUSR) or (mode & stat.S_IXGRP) or (mode & stat.S_IXOTH):
|
|
||||||
os.chmod(path, 0555)
|
|
||||||
else:
|
|
||||||
os.chmod(path, 0444)
|
|
||||||
|
|
||||||
def __createLDConfig(self):
|
|
||||||
ldsoconf = os.path.join(self.destdir, 'etc', 'ld.so.conf')
|
|
||||||
touch(ldsoconf)
|
|
||||||
|
|
||||||
proc_dir = os.path.join(self.destdir, 'proc')
|
|
||||||
if not os.path.isdir(proc_dir):
|
|
||||||
os.makedirs(proc_dir)
|
|
||||||
|
|
||||||
os.system('mount -t proc proc %s' % proc_dir)
|
|
||||||
|
|
||||||
f = open(ldsoconf, 'w')
|
|
||||||
|
|
||||||
x11_libdir = os.path.join(self.destdir, 'usr', 'X11R6', self.opts.libdir)
|
|
||||||
if os.path.exists(x11_libdir):
|
|
||||||
f.write('/usr/X11R6/%s\n' % self.opts.libdir)
|
|
||||||
|
|
||||||
f.write('/usr/kerberos/%s\n' % self.opts.libdir)
|
|
||||||
|
|
||||||
cwd = os.getcwd()
|
|
||||||
os.chdir(self.destdir)
|
|
||||||
os.system('/usr/sbin/chroot %s /sbin/ldconfig' % self.destdir)
|
|
||||||
os.chdir(cwd)
|
|
||||||
|
|
||||||
if self.opts.buildarch not in ('s390', 's390x'):
|
|
||||||
os.unlink(os.path.join(self.destdir, 'sbin', 'ldconfig'))
|
|
||||||
|
|
||||||
os.unlink(os.path.join(self.destdir, 'etc', 'ld.so.conf'))
|
|
||||||
|
|
||||||
os.system('umount %s' % proc_dir)
|
|
||||||
|
|
||||||
def __setBusyboxLinks(self):
|
def __setBusyboxLinks(self):
|
||||||
src = os.path.join(self.destdir, 'sbin', 'busybox.anaconda')
|
src = os.path.join(self.destdir, 'sbin', 'busybox.anaconda')
|
||||||
dst = os.path.join(self.destdir, 'bin', 'busybox')
|
dst = os.path.join(self.destdir, 'bin', 'busybox')
|
||||||
@ -679,29 +72,3 @@ class InstRoot:
|
|||||||
|
|
||||||
p = subprocess.Popen(cmd + arglist)
|
p = subprocess.Popen(cmd + arglist)
|
||||||
p.wait()
|
p.wait()
|
||||||
|
|
||||||
def __fixBrokenLinks(self):
|
|
||||||
for dir in ['bin', 'sbin']:
|
|
||||||
dir = os.path.join(self.destdir, 'usr', dir)
|
|
||||||
|
|
||||||
brokenlinks = []
|
|
||||||
for root, fnames, dnames in os.walk(dir):
|
|
||||||
for fname in fnames:
|
|
||||||
fname = os.path.join(root, fname)
|
|
||||||
if os.path.islink(fname) and not os.path.lexists(fname):
|
|
||||||
brokenlinks.append(fname)
|
|
||||||
|
|
||||||
for link in brokenlinks:
|
|
||||||
target = os.readlink(link)
|
|
||||||
|
|
||||||
for dir in ['bin', 'sbin']:
|
|
||||||
newtarget = re.sub(r'^\.\./\.\./%s/\(.*\)' % dir, r'\.\./%s/\1' % dir, target)
|
|
||||||
if newtarget != target:
|
|
||||||
os.symlink(newtarget, link)
|
|
||||||
|
|
||||||
def __makeAdditionalDirs(self):
|
|
||||||
os.makedirs(os.path.join(self.destdir, 'modules'))
|
|
||||||
os.makedirs(os.path.join(self.destdir, 'tmp'))
|
|
||||||
for dir in ('a', 'b', 'd', 'l', 's', 'v', 'x'):
|
|
||||||
os.makedirs(os.path.join(self.destdir, 'etc', 'terminfo', dir))
|
|
||||||
os.makedirs(os.path.join(self.destdir, 'var', 'lock', 'rpm'))
|
|
||||||
|
@ -35,59 +35,6 @@ def filtermoddeps(input):
|
|||||||
|
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
|
|
||||||
# XXX what are the inputs for this thing?
|
|
||||||
def trimpciids(pciids, *paths):
|
|
||||||
vendors = []
|
|
||||||
devices = []
|
|
||||||
|
|
||||||
for file in paths:
|
|
||||||
try:
|
|
||||||
f = open(file, 'r')
|
|
||||||
except IOError:
|
|
||||||
logger.error('cannot open file %s', file)
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
pcitable = f.readlines()
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
for line in pcitable:
|
|
||||||
if line.startswith('alias pci:'):
|
|
||||||
vend = '0x%s' % line[15:19]
|
|
||||||
dev = '0x%s' % line[24:28]
|
|
||||||
elif line.startswith('alias pcivideo:'):
|
|
||||||
vend = '0x%s' % line[20:24]
|
|
||||||
dev = '0x%s' % line[29:33]
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
vend = vend.upper()
|
|
||||||
dev = dev.upper()
|
|
||||||
if vend not in vendors:
|
|
||||||
vendors.append(vend)
|
|
||||||
if (vend, dev) not in devices:
|
|
||||||
devices.append((vend, dev))
|
|
||||||
|
|
||||||
current_vend = 0
|
|
||||||
for line in pciids:
|
|
||||||
if line.startswith('#') or line.startswith('\t\t') or line == '\n':
|
|
||||||
continue
|
|
||||||
|
|
||||||
# XXX print or return?
|
|
||||||
if not line.startswith('\t'):
|
|
||||||
current_vend = '0x%s' % line.split()[0]
|
|
||||||
current_vend = current_vend.upper()
|
|
||||||
if current_vend in vendors:
|
|
||||||
print line,
|
|
||||||
continue
|
|
||||||
|
|
||||||
# XXX print or return?
|
|
||||||
dev = '0x%s' % line.split()[0]
|
|
||||||
dev = dev.upper()
|
|
||||||
if (current_vend, dev) in devices:
|
|
||||||
print line,
|
|
||||||
|
|
||||||
|
|
||||||
# XXX what is this whole thing for?
|
# XXX what is this whole thing for?
|
||||||
def geninitrdsz(size, filename):
|
def geninitrdsz(size, filename):
|
||||||
size = socket.htonl(size)
|
size = socket.htonl(size)
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
# pylorax/config.py
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
# pylorax/errors.py
|
|
||||||
|
|
||||||
class LoraxError(Exception):
|
class LoraxError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
# pylorax/images.py
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import commands
|
import commands
|
||||||
import re
|
import re
|
||||||
import datetime
|
|
||||||
import fnmatch
|
import fnmatch
|
||||||
|
import datetime
|
||||||
|
import glob
|
||||||
|
|
||||||
import actions
|
import actions
|
||||||
import actions.base
|
import actions.base
|
||||||
@ -17,13 +16,19 @@ from utils.genmodinfo import genmodinfo
|
|||||||
|
|
||||||
|
|
||||||
class InitRD(object):
|
class InitRD(object):
|
||||||
def __init__(self, config, yum):
|
def __init__(self, config, yum, kernelfile):
|
||||||
self.conf = config
|
self.conf = config
|
||||||
self.yum = yum
|
self.yum = yum
|
||||||
|
self.kernelfile = kernelfile
|
||||||
|
|
||||||
|
# get the kernel version
|
||||||
|
m = re.match(r'.*vmlinuz-(?P<ver>.*)', self.kernelfile)
|
||||||
|
self.kernelver = m.group('ver')
|
||||||
|
|
||||||
# get supported actions
|
# get supported actions
|
||||||
supported_actions = actions.getActions()
|
supported_actions = actions.getActions()
|
||||||
|
|
||||||
|
# vars supported in template
|
||||||
vars = { 'instroot': self.conf.treedir,
|
vars = { 'instroot': self.conf.treedir,
|
||||||
'initrd': self.conf.initrddir,
|
'initrd': self.conf.initrddir,
|
||||||
'libdir': self.conf.libdir,
|
'libdir': self.conf.libdir,
|
||||||
@ -31,27 +36,32 @@ class InitRD(object):
|
|||||||
'confdir' : self.conf.confdir,
|
'confdir' : self.conf.confdir,
|
||||||
'datadir': self.conf.datadir }
|
'datadir': self.conf.datadir }
|
||||||
|
|
||||||
initrd_template = (os.path.join(self.conf.confdir, 'templates',
|
initrd_template = os.path.join(self.conf.confdir, 'templates',
|
||||||
'initrd.%s' % self.conf.buildarch))
|
'initrd.%s' % self.conf.buildarch)
|
||||||
self.template = Template()
|
self.template = Template()
|
||||||
self.template.preparse(initrd_template)
|
self.template.preparse(initrd_template)
|
||||||
self.template.parse(supported_actions, vars)
|
self.template.parse(supported_actions, vars)
|
||||||
|
|
||||||
|
# additional actions that need to be processed
|
||||||
self._actions = []
|
self._actions = []
|
||||||
|
|
||||||
def getPackages(self):
|
if not os.path.isdir(self.conf.initrddir):
|
||||||
packages = []
|
os.makedirs(self.conf.initrddir)
|
||||||
|
|
||||||
|
def get_packages(self):
|
||||||
|
packages = set()
|
||||||
for action in filter(lambda action: action.install, self.template.actions):
|
for action in filter(lambda action: action.install, self.template.actions):
|
||||||
m = re.match(r'%s(.*)' % self.conf.treedir, action.install)
|
m = re.match(r'%s(.*)' % self.conf.treedir, action.install)
|
||||||
if m:
|
if m:
|
||||||
packages.append(m.group(1))
|
packages.add(m.group(1))
|
||||||
|
|
||||||
return packages
|
return packages
|
||||||
|
|
||||||
def getDeps(self):
|
def get_deps(self):
|
||||||
libroots = []
|
libroots = []
|
||||||
libroots.append(os.path.join(self.conf.treedir, self.conf.libdir))
|
libroots.append(os.path.join(self.conf.treedir, self.conf.libdir))
|
||||||
libroots.append(os.path.join(self.conf.treedir, 'usr', self.conf.libdir))
|
libroots.append(os.path.join(self.conf.treedir, 'usr', self.conf.libdir))
|
||||||
|
|
||||||
# on 64 bit systems, add also normal lib directories
|
# on 64 bit systems, add also normal lib directories
|
||||||
if self.conf.libdir.endswith('64'):
|
if self.conf.libdir.endswith('64'):
|
||||||
libroots.append(os.path.join(self.conf.treedir, self.conf.libdir[:-2]))
|
libroots.append(os.path.join(self.conf.treedir, self.conf.libdir[:-2]))
|
||||||
@ -75,23 +85,39 @@ class InitRD(object):
|
|||||||
new_action = actions.base.Copy(**kwargs)
|
new_action = actions.base.Copy(**kwargs)
|
||||||
self._actions.append(new_action)
|
self._actions.append(new_action)
|
||||||
|
|
||||||
def processActions(self):
|
def process_actions(self):
|
||||||
if os.path.isdir(self.conf.initrddir):
|
|
||||||
rm(self.conf.initrddir)
|
|
||||||
os.makedirs(self.conf.initrddir)
|
|
||||||
|
|
||||||
for action in self.template.actions + self._actions:
|
for action in self.template.actions + self._actions:
|
||||||
action.execute()
|
action.execute()
|
||||||
|
|
||||||
def getModules(self):
|
def get_keymaps(self):
|
||||||
|
override = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime',
|
||||||
|
'keymaps-override-%s' % self.conf.buildarch)
|
||||||
|
if os.path.exists(override):
|
||||||
|
print('Found keymap override, using it')
|
||||||
|
cp(override, os.path.join(self.conf.treedir, 'keymaps'))
|
||||||
|
else:
|
||||||
|
cmd = '%s %s %s %s' % \
|
||||||
|
(os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime', 'getkeymaps'),
|
||||||
|
self.conf.buildarch, os.path.join(self.conf.treedir, 'keymaps'), self.conf.treedir)
|
||||||
|
rc = commands.getstatus(cmd)
|
||||||
|
if rc != 0:
|
||||||
|
sys.stderr.write('Unable to create keymaps and thus can\'t create initrd\n')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def create_locales(self):
|
||||||
|
os.makedirs(os.path.join(self.conf.initrddir, 'usr', 'lib', 'locale'))
|
||||||
|
rc, output = commands.getstatusoutput('localedef -c -i en_US -f UTF-8 --prefix %s en_US' % self.conf.initrddir)
|
||||||
|
|
||||||
|
def get_modules(self):
|
||||||
modlist = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime', 'modlist')
|
modlist = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime', 'modlist')
|
||||||
modinfo = os.path.join(self.conf.tempdir, 'modinfo')
|
modinfo = os.path.join(self.conf.tempdir, 'modinfo')
|
||||||
genmodinfo(os.path.join(self.conf.treedir, 'lib', 'modules', self.conf.kernelver), modinfo)
|
genmodinfo(os.path.join(self.conf.treedir, 'lib', 'modules', self.kernelver), modinfo)
|
||||||
|
|
||||||
modfiles = []
|
modfiles = []
|
||||||
modfiles.append(os.path.join(self.conf.confdir, 'modules', 'modules'))
|
modfiles.append(os.path.join(self.conf.confdir, 'modules', 'modules'))
|
||||||
modfiles.append(os.path.join(self.conf.confdir, 'modules', self.conf.buildarch, 'modules'))
|
modfiles.append(os.path.join(self.conf.confdir, 'modules', self.conf.buildarch, 'modules'))
|
||||||
|
|
||||||
|
# expand modules
|
||||||
modules = set()
|
modules = set()
|
||||||
for file in modfiles:
|
for file in modfiles:
|
||||||
if os.path.isfile(file):
|
if os.path.isfile(file):
|
||||||
@ -100,8 +126,12 @@ class InitRD(object):
|
|||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
line = line.strip()
|
|
||||||
line, sep, comment = line.partition('#')
|
line, sep, comment = line.partition('#')
|
||||||
|
line = line.strip()
|
||||||
|
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
|
||||||
if line.startswith('-'):
|
if line.startswith('-'):
|
||||||
modules.discard(line[1:])
|
modules.discard(line[1:])
|
||||||
elif line.startswith('='):
|
elif line.startswith('='):
|
||||||
@ -113,7 +143,7 @@ class InitRD(object):
|
|||||||
modules.add(line)
|
modules.add(line)
|
||||||
|
|
||||||
# resolve deps
|
# resolve deps
|
||||||
depfile = os.path.join(self.conf.treedir, 'lib', 'modules', self.conf.kernelver, 'modules.dep')
|
depfile = os.path.join(self.conf.treedir, 'lib', 'modules', self.kernelver, 'modules.dep')
|
||||||
f = open(depfile, 'r')
|
f = open(depfile, 'r')
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
f.close()
|
f.close()
|
||||||
@ -133,16 +163,26 @@ class InitRD(object):
|
|||||||
print('Adding module dependency %s' % m.group('name'))
|
print('Adding module dependency %s' % m.group('name'))
|
||||||
modules.add(m.group('name'))
|
modules.add(m.group('name'))
|
||||||
|
|
||||||
srcdir = os.path.join(self.conf.treedir, 'lib', 'modules')
|
srcdir = os.path.join(self.conf.treedir, 'lib', 'modules', self.kernelver)
|
||||||
dstdir = os.path.join(self.conf.initrddir, 'lib', 'modules')
|
dstdir = os.path.join(self.conf.initrddir, 'lib', 'modules')
|
||||||
cp(os.path.join(srcdir, '*'), dstdir)
|
cp(os.path.join(srcdir, '*'), dstdir)
|
||||||
|
|
||||||
for root, dirs, files in os.walk(dstdir):
|
for root, dirs, files in os.walk(dstdir):
|
||||||
for file in files:
|
for file in files:
|
||||||
name, ext = os.path.splitext(file)
|
name, ext = os.path.splitext(file)
|
||||||
if ext == '.ko' and name not in modules:
|
if ext == '.ko':
|
||||||
print('Removing %s module' % name)
|
if name not in modules:
|
||||||
rm(os.path.join(root, file))
|
rm(os.path.join(root, file))
|
||||||
|
else:
|
||||||
|
# copy the required firmware
|
||||||
|
output = commands.getoutput('modinfo -F firmware %s' % os.path.join(root, name + ext))
|
||||||
|
for fw in output.split():
|
||||||
|
dst = os.path.join(self.conf.initrddir, 'lib', 'firmware', fw)
|
||||||
|
dir = os.path.dirname(dst)
|
||||||
|
|
||||||
|
if not os.path.exists(dir):
|
||||||
|
os.makedirs(dir)
|
||||||
|
cp(os.path.join(self.conf.treedir, 'lib', 'firmware', fw), dst)
|
||||||
|
|
||||||
# copy firmware
|
# copy firmware
|
||||||
srcdir = os.path.join(self.conf.treedir, 'lib', 'firmware')
|
srcdir = os.path.join(self.conf.treedir, 'lib', 'firmware')
|
||||||
@ -158,7 +198,7 @@ class InitRD(object):
|
|||||||
|
|
||||||
for module, file in fw:
|
for module, file in fw:
|
||||||
if module in modules:
|
if module in modules:
|
||||||
print('Copying %s firmware' % module)
|
print('Copying firmware %s' % module)
|
||||||
cp(os.path.join(srcdir, file), dstdir)
|
cp(os.path.join(srcdir, file), dstdir)
|
||||||
|
|
||||||
# create modinfo
|
# create modinfo
|
||||||
@ -174,218 +214,251 @@ class InitRD(object):
|
|||||||
|
|
||||||
# run depmod
|
# run depmod
|
||||||
cmd = '/sbin/depmod -a -F %s -b %s %s' % \
|
cmd = '/sbin/depmod -a -F %s -b %s %s' % \
|
||||||
(os.path.join(self.conf.treedir, 'boot', 'System.map-%s' % self.conf.kernelver),
|
(os.path.join(self.conf.treedir, 'boot', 'System.map-%s' % self.kernelver),
|
||||||
self.conf.initrddir, self.conf.kernelver)
|
self.conf.initrddir, self.kernelver)
|
||||||
commands.getoutput(cmd)
|
commands.getoutput(cmd)
|
||||||
|
|
||||||
# remove leftovers
|
# remove leftovers
|
||||||
rm(os.path.join(self.conf.initrddir, 'lib', 'modules', self.conf.kernelver, 'modules.*map'))
|
rm(os.path.join(self.conf.initrddir, 'lib', 'modules', self.kernelver, 'modules.*map'))
|
||||||
rm(os.path.join(self.conf.initrddir, 'lib', 'modules', self.conf.kernelver, 'source'))
|
rm(os.path.join(self.conf.initrddir, 'lib', 'modules', self.kernelver, 'source'))
|
||||||
rm(os.path.join(self.conf.initrddir, 'lib', 'modules', self.conf.kernelver, 'build'))
|
rm(os.path.join(self.conf.initrddir, 'lib', 'modules', self.kernelver, 'build'))
|
||||||
|
|
||||||
|
# trim pci ids
|
||||||
|
vendors = set()
|
||||||
|
devices = set()
|
||||||
|
|
||||||
|
modulesalias = os.path.join(self.conf.treedir, 'lib', 'modules', self.kernelver, 'modules.alias')
|
||||||
|
f = open(modulesalias)
|
||||||
|
pcitable = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for line in pcitable:
|
||||||
|
if not line.startswith('alias pci:'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
vend = '0x%s' % line[15:19]
|
||||||
|
vend.upper()
|
||||||
|
dev = '0x%s' % line[24:28]
|
||||||
|
dev = dev.upper()
|
||||||
|
|
||||||
|
vendors.add(vend)
|
||||||
|
devices.add((vend, dev))
|
||||||
|
|
||||||
|
videoaliases = os.path.join(self.conf.treedir, 'usr', 'share', 'hwdata', 'videoaliases', '*')
|
||||||
|
for file in glob.iglob(videoaliases):
|
||||||
|
f = open(file)
|
||||||
|
pcitable = f.readlines()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for line in pcitable:
|
||||||
|
if not line.startswith('alias pcivideo:'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
vend = '0x%s' % line[20:24]
|
||||||
|
vend = vend.upper()
|
||||||
|
dev = '0x%s' % line[29:33]
|
||||||
|
dev = dev.upper()
|
||||||
|
|
||||||
|
vendors.add(vend)
|
||||||
|
devices.add((vend, dev))
|
||||||
|
|
||||||
|
# create pci.ids
|
||||||
|
src = os.path.join(self.conf.treedir, 'usr', 'share', 'hwdata', 'pci.ids')
|
||||||
|
dst = os.path.join(self.conf.initrddir, 'pci.ids')
|
||||||
|
|
||||||
|
input = open(src, 'r')
|
||||||
|
pcitable = input.readlines()
|
||||||
|
input.close()
|
||||||
|
|
||||||
|
output = open(dst, 'w')
|
||||||
|
|
||||||
|
current_vend = 0
|
||||||
|
for line in pcitable:
|
||||||
|
# skip lines that start with 2 tabs or #
|
||||||
|
if line.startswith('\t\t') or line.startswith('#'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
# skip empty lines
|
||||||
|
if line == '\n':
|
||||||
|
continue
|
||||||
|
|
||||||
|
# end of file
|
||||||
|
if line == 'ffff Illegal Vendor ID':
|
||||||
|
break
|
||||||
|
|
||||||
|
if not line.startswith('\t'):
|
||||||
|
current_vend = '0x%s' % line.split()[0]
|
||||||
|
current_vend = current_vend.upper()
|
||||||
|
if current_vend in vendors:
|
||||||
|
output.write(line)
|
||||||
|
continue
|
||||||
|
|
||||||
|
dev = '0x%s' % line.split()[0]
|
||||||
|
dev = dev.upper()
|
||||||
|
if (current_vend, dev) in devices:
|
||||||
|
output.write(line)
|
||||||
|
|
||||||
|
output.close()
|
||||||
|
|
||||||
def create(self, dst):
|
def create(self, dst):
|
||||||
# create the productfile
|
# copy the productfile
|
||||||
text = '%s\n' % self.conf.imageuuid
|
cp(os.path.join(self.conf.treedir, '.buildstamp'),
|
||||||
text = text + '%s\n' % self.conf.product
|
os.path.join(self.conf.initrddir, '.buildstamp'))
|
||||||
text = text + '%s\n' % self.conf.version
|
|
||||||
text = text + '%s\n' % self.conf.bugurl
|
|
||||||
edit(os.path.join(self.conf.initrddir, '.buildstamp'), text)
|
|
||||||
|
|
||||||
# get modules
|
print('Getting dependencies')
|
||||||
self.getModules()
|
self.get_deps()
|
||||||
|
print('Processing actions')
|
||||||
|
self.process_actions()
|
||||||
|
print('Getting keymaps')
|
||||||
|
self.get_keymaps()
|
||||||
|
print('Creating locales')
|
||||||
|
self.create_locales()
|
||||||
|
print('Getting modules')
|
||||||
|
self.get_modules()
|
||||||
|
|
||||||
# create the initrd
|
# create the initrd
|
||||||
|
print('Creating the %s' % dst)
|
||||||
err, output = commands.getstatusoutput('find %s | cpio --quiet -c -o | gzip -9 > %s' %
|
err, output = commands.getstatusoutput('find %s | cpio --quiet -c -o | gzip -9 > %s' %
|
||||||
(self.conf.initrddir, dst))
|
(self.conf.initrddir, dst))
|
||||||
|
|
||||||
def cleanUp(self):
|
def clean_up(self):
|
||||||
rm(self.conf.initrddir)
|
rm(self.conf.initrddir)
|
||||||
|
|
||||||
|
|
||||||
class Images(object):
|
class Install(object):
|
||||||
def __init__(self, config, yum):
|
def __init__(self, config):
|
||||||
self.conf = config
|
self.conf = config
|
||||||
self.yum = yum
|
|
||||||
|
|
||||||
# make imageuuid
|
def scrub(self):
|
||||||
now = datetime.datetime.now()
|
# move bin to usr/bin
|
||||||
arch = os.uname()[4] # XXX system arch, or build arch?
|
cp(os.path.join(self.conf.treedir, 'bin', '*'),
|
||||||
imageuuid = '%s.%s' % (now.strftime('%Y%m%d%H%M'), arch)
|
os.path.join(self.conf.treedir, 'usr', 'bin'))
|
||||||
self.conf.addAttr('imageuuid')
|
rm(os.path.join(self.conf.treedir, 'bin'))
|
||||||
self.conf.set(imageuuid=imageuuid)
|
|
||||||
|
|
||||||
self.initrd = InitRD(self.conf, self.yum)
|
# move sbin to /usr/sbin
|
||||||
|
cp(os.path.join(self.conf.treedir, 'sbin', '*'),
|
||||||
|
os.path.join(self.conf.treedir, 'usr', 'sbin'))
|
||||||
|
rm(os.path.join(self.conf.treedir, 'sbin'))
|
||||||
|
|
||||||
# XXX don't see this used anywhere... maybe in some other script, have to check...
|
# remove dirs from root
|
||||||
#syslinux = os.path.join(self.conf.treedir, 'usr', 'lib', 'syslinux', 'syslinux-nomtools')
|
dirs = ('boot', 'dev', 'home', 'media', 'mnt', 'opt', 'root', 'selinux', 'srv', 'sys', 'tmp', 'keymaps')
|
||||||
#if not os.path.isfile(syslinux):
|
for dir in dirs:
|
||||||
# print('WARNING: %s does not exist' % syslinux)
|
rm(os.path.join(self.conf.treedir, dir))
|
||||||
# syslinux = os.path.join(self.conf.treedir, 'usr', 'bin', 'syslinux')
|
|
||||||
# if not os.path.isfile(syslinux):
|
|
||||||
# print('ERROR: %s does not exist' % syslinux)
|
|
||||||
# sys.exit(1)
|
|
||||||
|
|
||||||
def run(self):
|
# remove dirs from usr
|
||||||
bold = ('\033[1m', '\033[0m')
|
dirs = ('etc', 'games', 'include', 'kerberos', 'local', 'tmp')
|
||||||
|
for dir in dirs:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'usr', dir))
|
||||||
|
|
||||||
print('%sInstalling needed packages%s' % bold)
|
# remove dirs from var
|
||||||
self.installPackages()
|
dirs = ('db', 'empty', 'games', 'local', 'lock', 'log', 'mail', 'nis', 'opt', 'preserve', 'spool', 'tmp', 'yp')
|
||||||
|
for dir in dirs:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'var', dir))
|
||||||
|
|
||||||
print('%sCopying updates%s' % bold)
|
# remove modules and firmware
|
||||||
self.copyUpdates()
|
rm(os.path.join(self.conf.treedir, 'lib', 'modules'))
|
||||||
|
rm(os.path.join(self.conf.treedir, 'lib', 'firmware'))
|
||||||
|
|
||||||
print('%sInitializing output directory%s' % bold)
|
# remove dirs from usr/lib
|
||||||
self.initOutputDirs()
|
dirs = ('ConsoleKit', 'X11', 'alsa-lib', 'asterisk', 'avahi', 'booty', 'db4.5*', 'enchant', 'games', 'gio', 'gnome-keyring', 'gnome-vfs-2.0',
|
||||||
|
'krb5', 'libglade', 'libxslt-plugins', 'lua', 'notification-daemon*', 'nss', 'openssl', 'orbit-2.0', 'perl5', 'pkgconfig', 'plymouth',
|
||||||
|
'pm-utils', 'pppd', 'pygtk', 'rsyslog', 'samba', 'sasl2', 'sse2', 'syslinux', 'tc', 'tls', 'udev', 'window-manager-settings')
|
||||||
|
for dir in dirs:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'usr', 'lib', dir))
|
||||||
|
|
||||||
print('%sPopulating the isolinux directory%s' % bold)
|
# remove dirs from usr/share
|
||||||
self.populateIsolinuxDir()
|
dirs = ('GConf', 'NetworkManager', 'aclocal', 'alsa', 'application-registry', 'applications', 'asterisk', 'augeas', 'authconfig', 'avahi',
|
||||||
|
'awk', 'createrepo', 'desktop-directories', 'dict', 'doc', 'dogtail', 'emacs', 'empty', 'enchant', 'file', 'firmware', 'firmware-tools',
|
||||||
|
'firstboot', 'games', 'gnome*', 'gnupg', 'groff', 'gtk-*', 'help', 'i18n', 'info', 'kde*', 'librarian', 'libthai', 'lua',
|
||||||
|
'makebootfat', 'man', 'metacity', 'mime*', 'misc', 'myspell', 'octave', 'omf', 'pkgconfig', 'plymouth', 'pygtk', 'selinux',
|
||||||
|
'setuptool', 'sgml', 'system-config-firewall', 'system-config-network', 'system-config-users', 'tabset', 'tc', 'usermode', 'xml',
|
||||||
|
'xsessions', 'yum-cli', 'magic')
|
||||||
|
for dir in dirs:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'usr', 'share', dir))
|
||||||
|
|
||||||
# XXX a lot of other stuff needs to be done here
|
# remove dirs from usr/share/themes
|
||||||
pass
|
dirs = ('AgingGorilla', 'Atlanta', 'Bright', 'Clearlooks', 'ClearlooksClassic', 'Crux', 'Default', 'Emacs', 'Esco', 'Glider', 'Glossy',
|
||||||
|
'HighContrast*', 'Industrial', 'Inverted', 'LargePrint', 'LowContrast*', 'Metabox', 'Mist', 'Raleigh', 'Simple', 'ThinIce')
|
||||||
|
for dir in dirs:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'usr', 'share', 'themes', dir))
|
||||||
|
|
||||||
print('%sDONE%s' % bold)
|
# remove dirs from etc
|
||||||
|
dirs = ('ConsoleKit', 'X11', 'alternatives', 'asterisk', 'avahi', 'blkid', 'bonobo-activation', 'chkconfig.d', 'cron.*', 'default', 'depmod.d',
|
||||||
|
'dirmngr', 'dnsmasq.d', 'event.d', 'firmware', 'firstaidkit', 'gconf', 'gcrypt', 'gnome-vfs*', 'gnupg', 'gtk', 'hotplug', 'init.d',
|
||||||
|
'iproute2', 'iscsi', 'kernel', 'ld.so.conf.d', 'logrotate.d', 'lvm', 'makedev.d', 'modprobe.d', 'netplug*', 'ntp', 'openldap', 'opt',
|
||||||
|
'pam.d', 'pki', 'pm', 'popt.d', 'ppp', 'prelink.conf.d', 'profile.d', 'rc[0-6].d', 'rwtab.d', 'samba', 'sasl2', 'security', 'setuptool.d',
|
||||||
|
'skel', 'ssh', 'statetab.d', 'terminfo', 'xdg', 'xinetd.d', 'yum.repos.d')
|
||||||
|
for dir in dirs:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'etc', dir))
|
||||||
|
|
||||||
def installPackages(self):
|
# remove dirs from lib
|
||||||
# required packages
|
dirs = ('i686', 'kbd', 'rtkaio', 'security', 'tls', 'xtables')
|
||||||
self.yum.addPackages(['anaconda', 'anaconda-runtime', 'kernel', '*firmware*', 'syslinux'])
|
for dir in dirs:
|
||||||
|
rm(os.path.join(self.conf.treedir, 'lib', dir))
|
||||||
|
|
||||||
# optional packages from confdir
|
# remove dirs from usr/libexec
|
||||||
packages_files = []
|
dirs = ('awk', 'gcc', 'getconf', 'openssh', 'plymouth')
|
||||||
packages_files.append(os.path.join(self.conf.confdir, 'packages', 'packages'))
|
for dir in dirs:
|
||||||
packages_files.append(os.path.join(self.conf.confdir, 'packages', self.conf.buildarch,
|
rm(os.path.join(self.conf.treedir, 'usr', 'libexec', dir))
|
||||||
'packages'))
|
|
||||||
|
|
||||||
packages = set()
|
# remove dirs from usr/share/locale
|
||||||
for pfile in packages_files:
|
dirs = ('af_ZA', 'ca_ES', 'cs_CZ', 'de_DE', 'el_GR', 'en', 'en_US', 'es_ES', 'et_EE', 'fa_IR', 'fr_FR', 'he_IL', 'hr_HR', 'it_IT', 'ja_JP',
|
||||||
if os.path.isfile(pfile):
|
'ko_KR', 'nb_NO', 'nl_NL', 'nso', 'pl_PL', 'pt_PT', 'ru_RU', 'sr', 'sv_SE', 'uk_UA')
|
||||||
f = open(pfile, 'r')
|
for dir in dirs:
|
||||||
for line in f.readlines():
|
rm(os.path.join(self.conf.treedir, 'usr', 'share', 'locale'))
|
||||||
line = line.strip()
|
|
||||||
|
|
||||||
if not line or line.startswith('#'):
|
# remove dirs from var/cache
|
||||||
continue
|
dirs = ('dirmngr', 'fontconfig', 'man', 'yum')
|
||||||
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'var', 'cache', dir)), dirs)
|
||||||
|
|
||||||
if line.startswith('-'):
|
# remove dirs from var/lib
|
||||||
packages.discard(line[1:])
|
dirs = ('alternatives', 'asterisk', 'authconfig', 'dhclient', 'dhcpv6', 'dirmngr', 'dnsmasq', 'games', 'iscsi', 'nfs', 'ntp', 'plymouth',
|
||||||
else:
|
'rpcbind', 'rpm', 'samba', 'selinux', 'sepolgen', 'stateless', 'udev', 'yum', 'logrotate.status')
|
||||||
packages.add(line)
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'var', 'lib', dir)), dirs)
|
||||||
|
|
||||||
f.close()
|
# remove dirs from var/run
|
||||||
|
dirs = ('ConsoleKit', 'NetworkManager', 'asterisk', 'avahi-daemon', 'console', 'dirmngr', 'hald', 'mdadm', 'netreport', 'plymouth',
|
||||||
|
'pm-utils', 'ppp', 'sepermit', 'setrans', 'winbindd', 'wpa_supplicant', 'utmp')
|
||||||
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'var', 'run', dir)), dirs)
|
||||||
|
|
||||||
self.yum.addPackages(list(packages))
|
# remove dirs from usr/share/terminfo
|
||||||
|
dirs = ('A', 'E', 'a', 'c', 'd', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'r', 's', 't', 'w')
|
||||||
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'usr', 'share', 'terminfo', dir)), dirs)
|
||||||
|
|
||||||
# packages required for initrd image
|
# remove dirs from usr/share/pixmaps
|
||||||
packages = self.initrd.getPackages()
|
dirs = ('redhat', 'splash')
|
||||||
self.yum.addPackages(packages)
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'usr', 'share', 'pixmaps', dir)), dirs)
|
||||||
|
|
||||||
# install all packages
|
# remove dirs form usr/share/X11/fonts
|
||||||
self.yum.install()
|
dirs = ('OTF', 'encodings', 'util')
|
||||||
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'usr', 'share', 'X11', 'fonts', dir)), dirs)
|
||||||
|
|
||||||
def copyUpdates(self):
|
# remove dirs from usr/lib/python2.5/site-packages
|
||||||
if self.conf.updates and os.path.isdir(self.conf.updates):
|
dirs = ('firmware_addon_dell', 'firmwaretools')
|
||||||
cp(os.path.join(self.conf.updates, '*'), self.conf.treedir)
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'usr', 'lib', 'python2.5', 'site-packages', dir)), dirs)
|
||||||
self.conf.delAttr('updates')
|
|
||||||
|
|
||||||
def initOutputDirs(self):
|
# remove dirs from etc/rc.d
|
||||||
# create the destination directories
|
dirs = ('rc?.d', 'rc', 'rc.local', 'rc.sysinit')
|
||||||
self.imgdir = os.path.join(self.conf.outdir, 'images')
|
map(lambda dir: rm(os.path.join(self.conf.treedir, 'etc', 'rc.d', dir)), dirs)
|
||||||
if os.path.exists(self.imgdir):
|
|
||||||
rm(self.imgdir)
|
|
||||||
os.makedirs(self.imgdir)
|
|
||||||
|
|
||||||
self.pxedir = os.path.join(self.imgdir, 'pxeboot')
|
def fix_links(self):
|
||||||
os.makedirs(self.pxedir)
|
print("Fixing broken links")
|
||||||
|
for dir in ('bin', 'sbin'):
|
||||||
|
dir = os.path.join(self.conf.treedir, 'usr', dir)
|
||||||
|
|
||||||
# write the images/README
|
brokenlinks = []
|
||||||
src = os.path.join(self.conf.datadir, 'images', 'README')
|
for root, dnames, fnames in os.walk(dir):
|
||||||
dst = os.path.join(self.imgdir, 'README')
|
for fname in fnames:
|
||||||
cp(src, dst)
|
fname = os.path.join(root, fname)
|
||||||
replace(dst, r'@PRODUCT@', self.conf.product)
|
if os.path.islink(fname):
|
||||||
|
target = os.readlink(fname)
|
||||||
|
if not os.path.exists(fname):
|
||||||
|
brokenlinks.append(fname)
|
||||||
|
|
||||||
# write the images/pxeboot/README
|
for link in brokenlinks:
|
||||||
src = os.path.join(self.conf.datadir, 'images', 'pxeboot', 'README')
|
target = os.readlink(link)
|
||||||
dst = os.path.join(self.pxedir, 'README')
|
for dir in ('bin', 'sbin'):
|
||||||
cp(src, dst)
|
newtarget = re.sub(r'^\.\./\.\./%s/(.*)' % dir, '../%s/\g<1>' % dir, target)
|
||||||
replace(dst, r'@PRODUCT@', self.conf.product)
|
if newtarget != target:
|
||||||
|
os.unlink(link)
|
||||||
# create the isolinux directory
|
os.symlink(newtarget, link)
|
||||||
self.isodir = os.path.join(self.conf.outdir, 'isolinux')
|
|
||||||
if os.path.exists(self.isodir):
|
|
||||||
rm(self.isodir)
|
|
||||||
os.makedirs(self.isodir)
|
|
||||||
|
|
||||||
def populateIsolinuxDir(self):
|
|
||||||
# set up some dir variables for further use
|
|
||||||
anacondadir = os.path.join(self.conf.treedir, 'usr', 'lib', 'anaconda-runtime')
|
|
||||||
bootdiskdir = os.path.join(anacondadir, 'boot')
|
|
||||||
syslinuxdir = os.path.join(self.conf.treedir, 'usr', 'lib', 'syslinux')
|
|
||||||
|
|
||||||
isolinuxbin = os.path.join(syslinuxdir, 'isolinux.bin')
|
|
||||||
if os.path.isfile(isolinuxbin):
|
|
||||||
# copy the isolinux.bin
|
|
||||||
cp(isolinuxbin, self.isodir)
|
|
||||||
|
|
||||||
# copy the syslinux.cfg to isolinux/isolinux.cfg
|
|
||||||
isolinuxcfg = os.path.join(self.isodir, 'isolinux.cfg')
|
|
||||||
cp(os.path.join(bootdiskdir, 'syslinux.cfg'), isolinuxcfg)
|
|
||||||
|
|
||||||
# set the product and version in isolinux.cfg
|
|
||||||
replace(isolinuxcfg, r'@PRODUCT@', self.conf.product)
|
|
||||||
replace(isolinuxcfg, r'@VERSION@', self.conf.version)
|
|
||||||
|
|
||||||
# copy the grub.conf
|
|
||||||
cp(os.path.join(bootdiskdir, 'grub.conf'), self.isodir)
|
|
||||||
|
|
||||||
# copy the vmlinuz
|
|
||||||
self.conf.addAttr('kernelver')
|
|
||||||
for file in os.listdir(os.path.join(self.conf.treedir, 'boot')):
|
|
||||||
if fnmatch.fnmatch(file, 'vmlinuz-*'):
|
|
||||||
vmlinuz = os.path.join(self.conf.treedir, 'boot', file)
|
|
||||||
m = re.match(r'.*vmlinuz-(?P<ver>.*)', vmlinuz)
|
|
||||||
self.conf.set(kernelver=m.group('ver'))
|
|
||||||
cp(vmlinuz, os.path.join(self.isodir, 'vmlinuz'))
|
|
||||||
|
|
||||||
# XXX do we want this here?
|
|
||||||
# create the initrd.img
|
|
||||||
print('Creating the initrd.img')
|
|
||||||
self.initrd.getDeps()
|
|
||||||
self.initrd.processActions()
|
|
||||||
self.initrd.create(os.path.join(self.isodir, 'initrd.img'))
|
|
||||||
#self.initrd.cleanUp()
|
|
||||||
|
|
||||||
# copy the splash files
|
|
||||||
vesasplash = os.path.join(anacondadir, 'syslinux-vesa-splash.jpg')
|
|
||||||
if os.path.isfile(vesasplash):
|
|
||||||
cp(vesasplash, os.path.join(self.isodir, 'splash.jpg'))
|
|
||||||
vesamenu = os.path.join(syslinuxdir, 'vesamenu.c32')
|
|
||||||
cp(vesamenu, self.isodir)
|
|
||||||
replace(isolinuxcfg, r'default linux', r'default vesamenu.c32')
|
|
||||||
replace(isolinuxcfg, r'prompt 1', r'#prompt 1')
|
|
||||||
else:
|
|
||||||
splashtools = os.path.join(anacondadir, 'splashtools.sh')
|
|
||||||
splashlss = os.path.join(bootdiskdir, 'splash.lss')
|
|
||||||
if os.path.isfile(splashtools):
|
|
||||||
cmd = '%s %s %s' % (splashtools,
|
|
||||||
os.path.join(bootdiskdir, 'syslinux-splash.jpg'),
|
|
||||||
splashlss)
|
|
||||||
os.system(cmd)
|
|
||||||
if os.path.isfile(splashlss):
|
|
||||||
cp(splashlss, self.isodir)
|
|
||||||
|
|
||||||
# copy the .msg files
|
|
||||||
for file in os.listdir(bootdiskdir):
|
|
||||||
if file.endswith('.msg'):
|
|
||||||
cp(os.path.join(bootdiskdir, file), self.isodir)
|
|
||||||
replace(os.path.join(self.isodir, file), r'@VERSION@', self.conf.version)
|
|
||||||
|
|
||||||
# if present, copy the memtest
|
|
||||||
cp(os.path.join(self.conf.treedir, 'boot', 'memtest*'),
|
|
||||||
os.path.join(self.isodir, 'memtest'))
|
|
||||||
if os.path.isfile(os.path.join(self.isodir, 'memtest')):
|
|
||||||
text = "label memtest86\n"
|
|
||||||
text = text + " menu label ^Memory test\n"
|
|
||||||
text = text + " kernel memtest\n"
|
|
||||||
text = text + " append -\n"
|
|
||||||
edit(isolinuxcfg, text, append=True)
|
|
||||||
else:
|
|
||||||
sys.stderr.write('No isolinux binary found, skipping isolinux creation\n')
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
# pylorax/utils/fileutil.py
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
@ -13,7 +11,7 @@ def cp(src, dst, mode=None, verbose=False):
|
|||||||
for name in glob.iglob(src):
|
for name in glob.iglob(src):
|
||||||
rc = __copy(name, dst, verbose=verbose)
|
rc = __copy(name, dst, verbose=verbose)
|
||||||
if not rc:
|
if not rc:
|
||||||
errors.append('unable to copy "%s" to "%s"' % (name, dst))
|
errors.append("unable to copy '%s' to '%s'" % (name, dst))
|
||||||
else:
|
else:
|
||||||
if mode:
|
if mode:
|
||||||
os.chmod(dst, int(mode))
|
os.chmod(dst, int(mode))
|
||||||
@ -25,7 +23,7 @@ def mv(src, dst, mode=None, verbose=False):
|
|||||||
for name in glob.iglob(src):
|
for name in glob.iglob(src):
|
||||||
rc = __copy(name, dst, verbose=verbose, remove=True)
|
rc = __copy(name, dst, verbose=verbose, remove=True)
|
||||||
if not rc:
|
if not rc:
|
||||||
errors.append('unable to move "%s" to "%s"' % (name, dst))
|
errors.append("unable to move '%s' to '%s'" % (name, dst))
|
||||||
else:
|
else:
|
||||||
if mode:
|
if mode:
|
||||||
os.chmod(dst, int(mode))
|
os.chmod(dst, int(mode))
|
||||||
@ -34,20 +32,24 @@ def mv(src, dst, mode=None, verbose=False):
|
|||||||
|
|
||||||
def rm(target, verbose=False):
|
def rm(target, verbose=False):
|
||||||
for name in glob.iglob(target):
|
for name in glob.iglob(target):
|
||||||
|
if os.path.islink(name):
|
||||||
|
os.unlink(name)
|
||||||
|
else:
|
||||||
if os.path.isdir(name):
|
if os.path.isdir(name):
|
||||||
if verbose:
|
if verbose:
|
||||||
print('removing directory "%s"' % name)
|
print("removing directory '%s'" % name)
|
||||||
shutil.rmtree(name, ignore_errors=True)
|
shutil.rmtree(name, ignore_errors=True)
|
||||||
else:
|
else:
|
||||||
if verbose:
|
if verbose:
|
||||||
print('removing file "%s"' % name)
|
print("removing file '%s'" % name)
|
||||||
os.unlink(name)
|
os.unlink(name)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def __copy(src, dst, verbose=False, remove=False):
|
def __copy(src, dst, verbose=False, remove=False):
|
||||||
if not os.path.exists(src):
|
if not os.path.exists(src):
|
||||||
sys.stderr.write('cannot stat "%s": No such file or directory\n' % src)
|
sys.stderr.write("cannot stat '%s': No such file or directory\n" % src)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if os.path.isdir(dst):
|
if os.path.isdir(dst):
|
||||||
@ -56,7 +58,7 @@ def __copy(src, dst, verbose=False, remove=False):
|
|||||||
|
|
||||||
if os.path.isdir(src):
|
if os.path.isdir(src):
|
||||||
if os.path.isfile(dst):
|
if os.path.isfile(dst):
|
||||||
sys.stderr.write('omitting directory "%s"\n' % src)
|
sys.stderr.write("omitting directory '%s'\n" % src)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not os.path.isdir(dst):
|
if not os.path.isdir(dst):
|
||||||
@ -67,20 +69,24 @@ def __copy(src, dst, verbose=False, remove=False):
|
|||||||
__copy(name, dst, verbose=verbose, remove=remove)
|
__copy(name, dst, verbose=verbose, remove=remove)
|
||||||
else:
|
else:
|
||||||
if os.path.isdir(dst):
|
if os.path.isdir(dst):
|
||||||
sys.stderr.write('cannot overwrite directory "%s" with non-directory\n' % dst)
|
sys.stderr.write("cannot overwrite directory '%s' with non-directory\n" % dst)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if verbose:
|
if verbose:
|
||||||
print('copying "%s" to "%s"' % (src, dst))
|
print("copying '%s' to '%s'" % (src, dst))
|
||||||
|
|
||||||
|
if os.path.exists(dst):
|
||||||
|
os.unlink(dst)
|
||||||
|
|
||||||
shutil.copy2(src, dst)
|
shutil.copy2(src, dst)
|
||||||
except (shutil.Error, IOError) as why:
|
except (shutil.Error, IOError) as why:
|
||||||
sys.stderr.write('cannot copy "%s" to "%s": %s\n' % (src, dst, why))
|
sys.stderr.write("cannot copy '%s' to '%s': %s\n" % (src, dst, why))
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
if remove:
|
if remove:
|
||||||
if verbose:
|
if verbose:
|
||||||
print('removing "%s"' % src)
|
print("removing '%s'" % src)
|
||||||
os.unlink(src)
|
os.unlink(src)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
@ -89,13 +95,13 @@ def __copy(src, dst, verbose=False, remove=False):
|
|||||||
def touch(filename, verbose=False):
|
def touch(filename, verbose=False):
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
if verbose:
|
if verbose:
|
||||||
print('touching file "%s"' % filename)
|
print("touching file '%s'" % filename)
|
||||||
os.utime(filename, None)
|
os.utime(filename, None)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if verbose:
|
if verbose:
|
||||||
print('creating file "%s"' % filename)
|
print("creating file '%s'" % filename)
|
||||||
f = open(filename, 'w')
|
f = open(filename, 'w')
|
||||||
except IOError:
|
except IOError:
|
||||||
return False
|
return False
|
||||||
@ -110,7 +116,7 @@ def edit(filename, text, append=False, verbose=False):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if verbose:
|
if verbose:
|
||||||
print('editing file "%s"' % filename)
|
print("editing file '%s'" % filename)
|
||||||
f = open(filename, mode)
|
f = open(filename, mode)
|
||||||
except IOError:
|
except IOError:
|
||||||
return False
|
return False
|
||||||
@ -121,7 +127,7 @@ def edit(filename, text, append=False, verbose=False):
|
|||||||
|
|
||||||
def replace(filename, find, replace, verbose=False):
|
def replace(filename, find, replace, verbose=False):
|
||||||
if verbose:
|
if verbose:
|
||||||
print('replacing "%s" for "%s" in file "%s"' % (find, replace, filename))
|
print("replacing '%s' for '%s' in file '%s'" % (find, replace, filename))
|
||||||
fin = fileinput.input(filename, inplace=1)
|
fin = fileinput.input(filename, inplace=1)
|
||||||
for line in fin:
|
for line in fin:
|
||||||
line = re.sub(find, replace, line)
|
line = re.sub(find, replace, line)
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
# pylorax/utils/rpmutils.py
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import stat
|
import stat
|
||||||
@ -39,7 +37,7 @@ class Callback(yum.rpmtrans.SimpleCliCallBack):
|
|||||||
self.height, self.width = getConsoleSize()
|
self.height, self.width = getConsoleSize()
|
||||||
|
|
||||||
def event(self, package, action, te_current, te_total, ts_current, ts_total):
|
def event(self, package, action, te_current, te_total, ts_current, ts_total):
|
||||||
# XXX crazy output stuff
|
# XXX crazy output format stuff
|
||||||
progress = float(te_current) / float(te_total)
|
progress = float(te_current) / float(te_total)
|
||||||
|
|
||||||
percentage = int(progress * 100)
|
percentage = int(progress * 100)
|
||||||
@ -62,7 +60,7 @@ class Callback(yum.rpmtrans.SimpleCliCallBack):
|
|||||||
msg = total_progress_str + action_str + package_progress_str
|
msg = total_progress_str + action_str + package_progress_str
|
||||||
|
|
||||||
sys.stdout.write(msg)
|
sys.stdout.write(msg)
|
||||||
sys.stdout.write('\b' * len(msg))
|
sys.stdout.write('\r')
|
||||||
|
|
||||||
if percentage == 100:
|
if percentage == 100:
|
||||||
sys.stdout.write('\n')
|
sys.stdout.write('\n')
|
||||||
@ -91,7 +89,7 @@ class Yum(object):
|
|||||||
|
|
||||||
def download(self, packages):
|
def download(self, packages):
|
||||||
for package in seq(packages):
|
for package in seq(packages):
|
||||||
print('Downloading package %s' % package)
|
print("Downloading package %s" % package)
|
||||||
fn = urlgrabber.urlgrab(package.remote_url)
|
fn = urlgrabber.urlgrab(package.remote_url)
|
||||||
shutil.copy(fn, self.installroot)
|
shutil.copy(fn, self.installroot)
|
||||||
|
|
||||||
@ -99,14 +97,14 @@ class Yum(object):
|
|||||||
|
|
||||||
def addPackages(self, patterns):
|
def addPackages(self, patterns):
|
||||||
for pattern in seq(patterns):
|
for pattern in seq(patterns):
|
||||||
print('Adding package matching %s' % pattern)
|
print("Adding package matching %s" % pattern)
|
||||||
try:
|
try:
|
||||||
self.yb.install(name=pattern)
|
self.yb.install(name=pattern)
|
||||||
except yum.Errors.InstallError:
|
except yum.Errors.InstallError:
|
||||||
try:
|
try:
|
||||||
self.yb.install(pattern=pattern)
|
self.yb.install(pattern=pattern)
|
||||||
except yum.Errors.InstallError:
|
except yum.Errors.InstallError:
|
||||||
sys.stderr.write('ERROR: No package matching %s available\n' % pattern)
|
sys.stderr.write("ERROR: No package matching %s available\n" % pattern)
|
||||||
|
|
||||||
def install(self):
|
def install(self):
|
||||||
self.yb.resolveDeps()
|
self.yb.resolveDeps()
|
||||||
@ -142,7 +140,7 @@ def extractRPM(rpmfile, destdir):
|
|||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
else:
|
else:
|
||||||
print('Extracting %s' % entry.name)
|
print("Extracting %s" % entry.name)
|
||||||
dir = os.path.dirname(path)
|
dir = os.path.dirname(path)
|
||||||
if not os.path.isdir(dir):
|
if not os.path.isdir(dir):
|
||||||
os.makedirs(dir)
|
os.makedirs(dir)
|
||||||
@ -150,7 +148,7 @@ def extractRPM(rpmfile, destdir):
|
|||||||
try:
|
try:
|
||||||
f = open(path, 'w')
|
f = open(path, 'w')
|
||||||
except IOError:
|
except IOError:
|
||||||
sys.stderr.write('ERROR: Unable to extract file %s\n' % path)
|
sys.stderr.write("ERROR: Unable to extract file %s\n" % path)
|
||||||
else:
|
else:
|
||||||
f.write(entry.read())
|
f.write(entry.read())
|
||||||
f.close()
|
f.close()
|
||||||
|
Loading…
Reference in New Issue
Block a user