Migrate bootstrap to centos
This commit is contained in:
parent
845ecff449
commit
1e90f1438c
|
@ -1,496 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
#set -x
|
||||
set -e
|
||||
|
||||
[ X`whoami` = X'root' ] || { echo "You must be root to run this script."; exit 1; }
|
||||
[ -n "$BINARIES_DIR" ] || { echo "BINARIES_DIR variable should be defined."; exit 1; }
|
||||
[ -n "$BASEDIR" ] || { echo "BASEDIR variable should be defined."; exit 1; }
|
||||
|
||||
BASEDIR=`readlink -f $BASEDIR`
|
||||
BINARIES_DIR=`readlink -f $BINARIES_DIR`
|
||||
|
||||
###########################
|
||||
# VARIABLES
|
||||
###########################
|
||||
STAMP=`date +%Y%m%d%H%M%S`
|
||||
|
||||
SCRIPT=`readlink -f "$0"`
|
||||
SCRIPTDIR=`dirname "${SCRIPT}"`
|
||||
REPO=${SCRIPTDIR}/..
|
||||
SOLO=${SCRIPTDIR}/solo
|
||||
SYNC=${SCRIPTDIR}/sync
|
||||
SSH=${SCRIPTDIR}/ssh
|
||||
|
||||
GNUPG=${REPO}/gnupg
|
||||
|
||||
RELEASE=precise
|
||||
VERSION=12.04
|
||||
|
||||
ORIGISO=${BINARIES_DIR}/ubuntu-12.04-server-amd64.iso
|
||||
BOOTSTRAPNAME=""
|
||||
BOOTSTRAPDIR=${BASEDIR}
|
||||
|
||||
INITRD=${BOOTSTRAPNAME}initrd
|
||||
INITRDGZ=${INITRD}.gz
|
||||
INITRD_SIZE=614400 #kilobytes
|
||||
LINUX=${BOOTSTRAPNAME}linux
|
||||
|
||||
MIRROR="http://ru.archive.ubuntu.com/ubuntu"
|
||||
REQDEB=`cat ${REPO}/requirements-deb.txt | grep -v "^\s*$" | grep -v "^\s*#"`
|
||||
|
||||
INITRD_FS=${BASEDIR}/initrd-fs
|
||||
INITRD_LOOP=${BASEDIR}/initrd-loop
|
||||
INITRD_MODULES=${BASEDIR}/modules
|
||||
|
||||
DEBOOTSTRAP_INCLUDE=less,vim,bash,net-tools,isc-dhcp-client,rsyslog,cron,iputils-ping,openssh-server,ruby-httpclient,ruby-json,ohai,rubygems\
|
||||
,mcollective,python-scapy,vlan,tcpdump,python-pypcap
|
||||
DEBOOTSTRAP_EXCLUDE=
|
||||
|
||||
ORIG=${BASEDIR}/orig
|
||||
NEW=${BASEDIR}/new
|
||||
EXTRAS=${BASEDIR}/extras
|
||||
KEYRING=${BASEDIR}/keyring
|
||||
INDICES=${BASEDIR}/indices
|
||||
|
||||
TMPGNUPG=${BASEDIR}/gnupg
|
||||
GPGKEYID=F8AF89DD
|
||||
GPGKEYNAME="Mirantis Product"
|
||||
GPGKEYEMAIL="<product@mirantis.com>"
|
||||
GPGKEY="${GPGKEYNAME} ${GPGKEYEMAIL}"
|
||||
GPGPASSWDFILE=${TMPGNUPG}/keyphrase
|
||||
|
||||
ARCHITECTURES="i386 amd64"
|
||||
SECTIONS="main restricted universe multiverse"
|
||||
|
||||
|
||||
|
||||
###########################
|
||||
# CLEANING
|
||||
###########################
|
||||
echo "Cleaning ..."
|
||||
if (mount | grep -q ${ORIG}); then
|
||||
echo "Umounting ${ORIG} ..."
|
||||
umount ${ORIG}
|
||||
fi
|
||||
|
||||
if (mount | grep -q ${INITRD_LOOP}); then
|
||||
echo "Umounting ${INITRD_LOOP} ..."
|
||||
umount ${INITRD_LOOP}
|
||||
fi
|
||||
|
||||
# echo "Removing ${BASEDIR} ..."
|
||||
# rm -rf ${BASEDIR}
|
||||
|
||||
echo "Removing ${ORIG} ..."
|
||||
rm -rf ${ORIG}
|
||||
|
||||
echo "Removing ${INDICES} ..."
|
||||
rm -rf ${INDICES}
|
||||
|
||||
# echo "Removing ${EXTRAS} ..."
|
||||
# rm -rf ${EXTRAS}
|
||||
|
||||
echo "Removing ${TMPGNUPG} ..."
|
||||
rm -rf ${TMPGNUPG}
|
||||
|
||||
echo "Removing ${KEYRING} ..."
|
||||
rm -rf ${KEYRING}
|
||||
|
||||
|
||||
###########################
|
||||
# MOUNTING AND SYNCING ORIG ISO
|
||||
###########################
|
||||
|
||||
mkdir -p ${ORIG}
|
||||
mkdir -p ${NEW}
|
||||
|
||||
echo "Mounting original iso image ..."
|
||||
mount -o loop ${ORIGISO} ${ORIG}
|
||||
|
||||
echo "Syncing original iso to new iso ..."
|
||||
rsync -a ${ORIG}/ ${NEW}
|
||||
chmod -R u+w ${NEW}
|
||||
|
||||
|
||||
###########################
|
||||
# DOWNLOADING INDICES
|
||||
###########################
|
||||
echo "Downloading indices ..."
|
||||
mkdir -p ${INDICES}
|
||||
|
||||
for s in ${SECTIONS}; do
|
||||
wget -qO- ${MIRROR}/indices/override.${RELEASE}.${s}.debian-installer > \
|
||||
${INDICES}/override.${RELEASE}.${s}.debian-installer
|
||||
|
||||
wget -qO- ${MIRROR}/indices/override.${RELEASE}.${s} > \
|
||||
${INDICES}/override.${RELEASE}.${s}
|
||||
|
||||
wget -qO- ${MIRROR}/indices/override.${RELEASE}.extra.${s} > \
|
||||
${INDICES}/override.${RELEASE}.extra.${s}
|
||||
done
|
||||
|
||||
###########################
|
||||
# REORGANIZE POOL
|
||||
###########################
|
||||
echo "Reorganizing pool ..."
|
||||
(
|
||||
cd ${NEW}/pool
|
||||
find -type f \( -name "*.deb" -o -name "*.udeb" \) | while read debfile; do
|
||||
debbase=`basename ${debfile}`
|
||||
packname=`echo ${debbase} | awk -F_ '{print $1}'`
|
||||
section=`grep "^${packname}\s" ${INDICES}/* | \
|
||||
grep -v extra | head -1 | awk -F: '{print $1}' | \
|
||||
awk -F. '{print $3}'`
|
||||
test -z ${section} && section=main
|
||||
mkdir -p ${NEW}/pools/${RELEASE}/${section}
|
||||
mv ${debfile} ${NEW}/pools/${RELEASE}/${section}
|
||||
done
|
||||
)
|
||||
rm -fr ${NEW}/pool
|
||||
|
||||
|
||||
###########################
|
||||
# DOWNLOADING REQUIRED DEBS
|
||||
###########################
|
||||
mkdir -p ${EXTRAS}/state
|
||||
touch ${EXTRAS}/state/status
|
||||
|
||||
mkdir -p ${EXTRAS}/archives
|
||||
mkdir -p ${EXTRAS}/cache
|
||||
|
||||
mkdir -p ${EXTRAS}/etc/preferences.d
|
||||
mkdir -p ${EXTRAS}/etc/apt.conf.d
|
||||
cat > ${EXTRAS}/etc/sources.list <<EOF
|
||||
deb ${MIRROR} precise main restricted universe multiverse
|
||||
deb-src ${MIRROR} precise main restricted universe multiverse
|
||||
deb http://apt.opscode.com ${RELEASE}-0.10 main
|
||||
EOF
|
||||
|
||||
cat > ${EXTRAS}/etc/preferences.d/opscode <<EOF
|
||||
Package: *
|
||||
Pin: origin "apt.opscode.com"
|
||||
Pin-Priority: 999
|
||||
EOF
|
||||
|
||||
|
||||
# possible apt configs
|
||||
# Install-Recommends "true";
|
||||
# Install-Suggests "true";
|
||||
|
||||
cat > ${EXTRAS}/etc/apt.conf <<EOF
|
||||
APT
|
||||
{
|
||||
Architecture "amd64";
|
||||
Default-Release "${RELEASE}";
|
||||
Get::AllowUnauthenticated "true";
|
||||
};
|
||||
|
||||
Dir
|
||||
{
|
||||
State "${EXTRAS}/state";
|
||||
State::status "status";
|
||||
|
||||
Cache::archives "${EXTRAS}/archives";
|
||||
Cache "${EXTRAS}/cache";
|
||||
|
||||
Etc "${EXTRAS}/etc";
|
||||
};
|
||||
|
||||
Debug::NoLocking "true";
|
||||
EOF
|
||||
|
||||
echo "Linking files that already in pool ..."
|
||||
find ${NEW}/pools/${RELEASE} -name "*.deb" -o -name "*.udeb" | while read debfile; do
|
||||
debbase=`basename ${debfile}`
|
||||
ln -sf ${debfile} ${EXTRAS}/archives/${debbase}
|
||||
done
|
||||
|
||||
echo "Downloading requied packages ..."
|
||||
apt-get -c=${EXTRAS}/etc/apt.conf update
|
||||
for package in ${REQDEB}; do
|
||||
apt-get -c=${EXTRAS}/etc/apt.conf -d -y install ${package}
|
||||
done
|
||||
|
||||
find ${EXTRAS}/archives -type f \( -name "*.deb" -o -name "*.udeb" \) | while read debfile; do
|
||||
debbase=`basename ${debfile}`
|
||||
packname=`echo ${debbase} | awk -F_ '{print $1}'`
|
||||
section=`grep "^${packname}\s" ${INDICES}/* | \
|
||||
grep -v extra | head -1 | awk -F: '{print $1}' | \
|
||||
awk -F. '{print $3}'`
|
||||
test -z ${section} && section=main
|
||||
mkdir -p ${NEW}/pools/${RELEASE}/${section}
|
||||
cp ${debfile} ${NEW}/pools/${RELEASE}/${section}
|
||||
done
|
||||
|
||||
|
||||
###########################
|
||||
# REBUILDING KEYRING
|
||||
###########################
|
||||
echo "Rebuilding ubuntu-keyring packages ..."
|
||||
|
||||
mkdir -p ${KEYRING}
|
||||
|
||||
(
|
||||
cd ${KEYRING} && apt-get -c=${EXTRAS}/etc/apt.conf source ubuntu-keyring
|
||||
)
|
||||
|
||||
KEYRING_PACKAGE=`find ${KEYRING} -maxdepth 1 \
|
||||
-name "ubuntu-keyring*" -type d -print | xargs basename`
|
||||
if [ -z ${KEYRING_PACKAGE} ]; then
|
||||
echo "Cannot grab keyring source! Exiting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp -rp ${GNUPG} ${TMPGNUPG}
|
||||
chown -R root:root ${TMPGNUPG}
|
||||
chmod 700 ${TMPGNUPG}
|
||||
chmod 600 ${TMPGNUPG}/*
|
||||
|
||||
GNUPGHOME=${TMPGNUPG} gpg --import < \
|
||||
${KEYRING}/${KEYRING_PACKAGE}/keyrings/ubuntu-archive-keyring.gpg
|
||||
|
||||
GNUPGHOME=${TMPGNUPG} gpg --yes --export \
|
||||
--output ${KEYRING}/${KEYRING_PACKAGE}/keyrings/ubuntu-archive-keyring.gpg \
|
||||
FBB75451 437D05B5 ${GPGKEYID}
|
||||
|
||||
(
|
||||
cd ${KEYRING}/${KEYRING_PACKAGE} && \
|
||||
dpkg-buildpackage -m"Mirantis Nailgun" -k"${GPGKEYID}" -uc -us
|
||||
)
|
||||
|
||||
rm -f ${NEW}/pools/${RELEASE}/main/ubuntu-keyring*deb
|
||||
cp ${KEYRING}/ubuntu-keyring*deb ${NEW}/pools/${RELEASE}/main || \
|
||||
{ echo "Error occured while moving rebuilded ubuntu-keyring packages into pool"; exit 1; }
|
||||
|
||||
|
||||
###########################
|
||||
# UPDATING REPO
|
||||
###########################
|
||||
|
||||
for s in ${SECTIONS}; do
|
||||
for a in ${ARCHITECTURES}; do
|
||||
for t in deb udeb; do
|
||||
[ X${t} = Xudeb ] && di="/debian-installer" || di=""
|
||||
mkdir -p ${NEW}/dists/${RELEASE}/${s}${di}/binary-${a}
|
||||
|
||||
if [ X${t} = Xdeb ]; then
|
||||
cat > ${NEW}/dists/${RELEASE}/${s}/binary-${a}/Release <<EOF
|
||||
Archive: ${RELEASE}
|
||||
Version: ${VERSION}
|
||||
Component: ${s}
|
||||
Origin: Mirantis
|
||||
Label: Mirantis
|
||||
Architecture: ${a}
|
||||
EOF
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
cat > ${BASEDIR}/extraoverride.pl <<EOF
|
||||
#!/usr/bin/env perl
|
||||
while (<>) {
|
||||
chomp; next if /^ /;
|
||||
if (/^\$/ && defined(\$task)) {
|
||||
print "\$package Task \$task\n";
|
||||
undef \$package;
|
||||
undef \$task;
|
||||
}
|
||||
(\$key, \$value) = split /: /, \$_, 2;
|
||||
if (\$key eq 'Package') {
|
||||
\$package = \$value;
|
||||
}
|
||||
if (\$key eq 'Task') {
|
||||
\$task = \$value;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
chmod +x ${BASEDIR}/extraoverride.pl
|
||||
|
||||
gunzip -c ${NEW}/dists/${RELEASE}/main/binary-amd64/Packages.gz | \
|
||||
${BASEDIR}/extraoverride.pl >> \
|
||||
${INDICES}/override.${RELEASE}.extra.main
|
||||
|
||||
for s in ${SECTIONS}; do
|
||||
for a in ${ARCHITECTURES}; do
|
||||
for t in deb udeb; do
|
||||
echo "Scanning section=${s} arch=${a} type=${t} ..."
|
||||
|
||||
if [ X${t} = Xudeb ]; then
|
||||
di="/debian-installer"
|
||||
diover=".debian-installer"
|
||||
else
|
||||
di=""
|
||||
diover=""
|
||||
fi
|
||||
|
||||
[ -r ${INDICES}/override.${RELEASE}.${s}${diover} ] && \
|
||||
override=${INDICES}/override.${RELEASE}.${s}${diover} || \
|
||||
unset override
|
||||
[ -r ${INDICES}/override.${RELEASE}.extra.${s} ] && \
|
||||
extraoverride="-e ${INDICES}/override.${RELEASE}.extra.${s}" || \
|
||||
unset extraoverride
|
||||
|
||||
mkdir -p ${NEW}/pools/${RELEASE}/${s}
|
||||
|
||||
(
|
||||
cd ${NEW} && dpkg-scanpackages -m -a${a} -t${t} ${extraoverride} \
|
||||
pools/${RELEASE}/${s} \
|
||||
${override} > \
|
||||
${NEW}/dists/${RELEASE}/${s}${di}/binary-${a}/Packages
|
||||
)
|
||||
|
||||
gzip -c ${NEW}/dists/${RELEASE}/${s}${di}/binary-${a}/Packages > \
|
||||
${NEW}/dists/${RELEASE}/${s}${di}/binary-${a}/Packages.gz
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
echo "Creating main Release file in cdrom repo"
|
||||
|
||||
cat > ${BASEDIR}/release.conf <<EOF
|
||||
APT::FTPArchive::Release::Origin "Mirantis";
|
||||
APT::FTPArchive::Release::Label "Mirantis";
|
||||
APT::FTPArchive::Release::Suite "${RELEASE}";
|
||||
APT::FTPArchive::Release::Version "${VERSION}";
|
||||
APT::FTPArchive::Release::Codename "${RELEASE}";
|
||||
APT::FTPArchive::Release::Architectures "${ARCHITECTURES}";
|
||||
APT::FTPArchive::Release::Components "${SECTIONS}";
|
||||
APT::FTPArchive::Release::Description "Mirantis Nailgun Repo";
|
||||
EOF
|
||||
|
||||
|
||||
apt-ftparchive -c ${BASEDIR}/release.conf release ${NEW}/dists/${RELEASE} > \
|
||||
${NEW}/dists/${RELEASE}/Release
|
||||
|
||||
|
||||
echo "Signing main Release file in cdrom repo ..."
|
||||
GNUPGHOME=${TMPGNUPG} gpg --yes --no-tty --default-key ${GPGKEYID} \
|
||||
--passphrase-file ${GPGPASSWDFILE} --output ${NEW}/dists/${RELEASE}/Release.gpg \
|
||||
-ba ${NEW}/dists/${RELEASE}/Release
|
||||
|
||||
|
||||
###########################
|
||||
# CREATING INITRD
|
||||
###########################
|
||||
|
||||
echo "Creating zero file ${INITRD_FS} 1024 * ${INITRD_SIZE} bytes size ..."
|
||||
dd if=/dev/zero of=${INITRD_FS} bs=1024 count=${INITRD_SIZE}
|
||||
echo "Creating ext2 file system in ${INITRD_FS} ..."
|
||||
mkfs.ext2 -F -m0 ${INITRD_FS}
|
||||
echo "Creating loop directory to mount initrd file system ..."
|
||||
mkdir -p ${INITRD_LOOP}
|
||||
echo "Mounting ${INITRD_FS} to ${INITRD_LOOP}"
|
||||
mount -o loop -t ext2 ${INITRD_FS} ${INITRD_LOOP}
|
||||
|
||||
###########################
|
||||
# DEBOOTSTRAPING
|
||||
###########################
|
||||
|
||||
echo "Debootstraping ..."
|
||||
|
||||
[ -n "${DEBOOTSTRAP_INCLUDE}" ] && DEBOOTSTRAP_INCLUDE_OPTION=--include=${DEBOOTSTRAP_INCLUDE}
|
||||
[ -n "${DEBOOTSTRAP_EXCLUDE}" ] && DEBOOTSTRAP_EXCLUDE_OPTION=--exclude=${DEBOOTSTRAP_EXCLUDE}
|
||||
|
||||
debootstrap --variant=minbase --components=main,restricted,universe,multiverse \
|
||||
${DEBOOTSTRAP_INCLUDE_OPTION} \
|
||||
${DEBOOTSTRAP_EXCLUDE_OPTION} \
|
||||
--no-check-gpg \
|
||||
--arch=amd64 ${RELEASE} ${INITRD_LOOP} file:${NEW}
|
||||
|
||||
|
||||
###########################
|
||||
# MODULES AND FIRMWARE
|
||||
###########################
|
||||
|
||||
echo "Extracting modules and firmware from packages ..."
|
||||
mkdir -p ${INITRD_MODULES}
|
||||
find ${NEW}/pools/${RELEASE} \( -name "linux-image*.deb" -o -name "linux-firmware*.deb" \) -exec dpkg -x {} ${INITRD_MODULES} \;
|
||||
|
||||
echo "Copying modules and firmware ..."
|
||||
cp -r ${INITRD_MODULES}/lib/modules/* ${INITRD_LOOP}/lib/modules
|
||||
cp -r ${INITRD_MODULES}/lib/firmware/* ${INITRD_LOOP}/lib/firmware
|
||||
|
||||
|
||||
echo "Updating modules.dep in order to fix modprobe errors ..."
|
||||
for version in `ls -1 ${INITRD_LOOP}/lib/modules`; do
|
||||
depmod -b ${INITRD_LOOP} $version
|
||||
done
|
||||
|
||||
###########################
|
||||
# CONFIGURING SYSTEM
|
||||
###########################
|
||||
|
||||
echo "Setting default password for root into r00tme ..."
|
||||
sed -i -e '/^root/c\root:$6$oC7haQNQ$LtVf6AI.QKn9Jb89r83PtQN9fBqpHT9bAFLzy.YVxTLiFgsoqlPY3awKvbuSgtxYHx4RUcpUqMotp.WZ0Hwoj.:15441:0:99999:7:::' ${INITRD_LOOP}/etc/shadow
|
||||
|
||||
echo "Adding root autologin on tty1 ..."
|
||||
sed -i -e '/exec/c\exec /sbin/getty -8 -l /usr/bin/autologin 38400 tty1' ${INITRD_LOOP}/etc/init/tty1.conf
|
||||
|
||||
###########################
|
||||
# INJECTING EXTRA FILES
|
||||
###########################
|
||||
echo "Syncing system ..."
|
||||
cp -r ${SYNC}/* ${INITRD_LOOP}
|
||||
|
||||
NAILGUN_DIR=${INITRD_LOOP}/opt/nailgun
|
||||
|
||||
#echo "Injecting cookbooks and configs for chef-solo ..."
|
||||
#mkdir -p ${NAILGUN_DIR}/solo
|
||||
#cp ${SOLO}/solo.json ${NAILGUN_DIR}/solo/solo.json
|
||||
#cp ${SOLO}/solo.rb ${NAILGUN_DIR}/solo/solo.rb
|
||||
|
||||
#echo "Disabling chef-client ..."
|
||||
#chroot ${INITRD_LOOP} /usr/sbin/update-rc.d chef-client disable
|
||||
|
||||
echo "Injecting agent ..."
|
||||
mkdir -p ${NAILGUN_DIR}/bin
|
||||
cp -r ${REPO}/bin/agent ${NAILGUN_DIR}/bin
|
||||
|
||||
echo "Injecting bootstrap file..."
|
||||
echo "bootstrap" > ${NAILGUN_DIR}/system_type
|
||||
|
||||
echo "Injecting bootstrap ssh key ..."
|
||||
mkdir -p ${INITRD_LOOP}/root/.ssh
|
||||
cp ${SSH}/id_rsa.pub ${INITRD_LOOP}/root/.ssh/authorized_keys
|
||||
|
||||
echo "Removing cached debs ..."
|
||||
rm ${INITRD_LOOP}/var/cache/apt/archives/*.deb
|
||||
|
||||
echo "Removing sources.list ..."
|
||||
rm ${INITRD_LOOP}/etc/apt/sources.list
|
||||
|
||||
###########################
|
||||
# UMOUNTING
|
||||
###########################
|
||||
|
||||
echo "Trying to umount initrd loop ..."
|
||||
if (mount | grep -q `readlink -f ${INITRD_LOOP}`); then
|
||||
echo "Umounting ${INITRD_LOOP} ..."
|
||||
umount ${INITRD_LOOP}
|
||||
fi
|
||||
|
||||
###########################
|
||||
# LINKING
|
||||
###########################
|
||||
echo "Gzipping initrd ..."
|
||||
# gzip -9 -c ${INITRD_FS} > ${BOOTSTRAPDIR}/${INITRDGZ}.${STAMP}
|
||||
# chmod 644 ${BOOTSTRAPDIR}/${INITRDGZ}.${STAMP}
|
||||
gzip -9 -c ${INITRD_FS} > ${BOOTSTRAPDIR}/${INITRDGZ}
|
||||
chmod 644 ${BOOTSTRAPDIR}/${INITRDGZ}
|
||||
|
||||
echo "Coping linux ..."
|
||||
linuxfile=`ls -1 ${INITRD_MODULES}/boot/vmlinuz*generic | head -1`
|
||||
# cp ${linuxfile} ${BOOTSTRAPDIR}/${LINUX}.${STAMP}
|
||||
# chmod 644 ${BOOTSTRAPDIR}/${LINUX}.${STAMP}
|
||||
cp ${linuxfile} ${BOOTSTRAPDIR}/${LINUX}
|
||||
chmod 644 ${BOOTSTRAPDIR}/${LINUX}
|
||||
|
||||
# rm -f ${BOOTSTRAPDIR}/${INITRDGZ}.last
|
||||
# rm -f ${BOOTSTRAPDIR}/${LINUX}.last
|
||||
# (
|
||||
# cd ${BOOTSTRAPDIR}
|
||||
# ln -s ${INITRDGZ}.${STAMP} ${INITRDGZ}.last
|
||||
# ln -s ${LINUX}.${STAMP} ${LINUX}.last
|
||||
# )
|
|
@ -1,42 +1,102 @@
|
|||
|
||||
/:=$(BUILD_DIR)/bootstrap/
|
||||
INITRAM_DIR=$/initram-root
|
||||
INITRAM_FS=$/initramfs.img
|
||||
LINUX=$/linux
|
||||
|
||||
.PHONY: bootstrap
|
||||
.PHONY: bootstrap clean
|
||||
all: bootstrap
|
||||
|
||||
.PHONY: clean
|
||||
clean: $/umount_orig $/umount_initrd-loop $/rm_bootstrap
|
||||
YUM_PACKAGES=yum puppet openssh-server wget cronie-noanacron crontabs ntp \
|
||||
mcollective \
|
||||
less vim bash net-tools dhclient rsyslog iputils openssh-server \
|
||||
ruby-json rubygems mcollective vconfig tcpdump scapy
|
||||
|
||||
$/umount_orig:
|
||||
-sudo umount $/orig
|
||||
NAILGUN_DIR=$(INITRAM_DIR)/opt/nailgun
|
||||
REPO=/home/hex/Code/product
|
||||
SYNC=$(REPO)/bootstrap/sync
|
||||
SSH=$(REPO)/bootstrap/ssh
|
||||
CACHE_DIR=$(REPO)/bootstrap/cache
|
||||
|
||||
$/umount_initrd-loop:
|
||||
-sudo umount $/initrd-loop
|
||||
RPM=sudo rpm --root=`readlink -f $(INITRAM_DIR)`
|
||||
YUM=sudo yum --installroot=`readlink -f $(INITRAM_DIR)` -y --nogpgcheck
|
||||
CHROOT_CMD=sudo chroot $(INITRAM_DIR)
|
||||
|
||||
$/rm_bootstrap:
|
||||
sudo rm -rf $/
|
||||
clean: clean-bootstrap
|
||||
|
||||
|
||||
ifndef BINARIES_DIR
|
||||
$/%:
|
||||
$(error BINARIES_DIR variable is not defined)
|
||||
else
|
||||
|
||||
ISO_IMAGE:=$(BINARIES_DIR)/ubuntu-12.04-server-amd64.iso
|
||||
clean-bootstrap:
|
||||
-sudo umount $(INITRAM_DIR)/proc
|
||||
-sudo umount $(INITRAM_DIR)/dev
|
||||
sudo rm -rf $(INITRAM_DIR)
|
||||
|
||||
%: /:=$/
|
||||
|
||||
bootstrap: $/linux $/initrd.gz
|
||||
|
||||
# it is needed in order to create BUILD_DIR with owner different from root
|
||||
$/bootstrap.prepare:
|
||||
bootstrap: $(LINUX) $(INITRAM_FS)
|
||||
|
||||
|
||||
$(INITRAM_FS): | $(NAILGUN_DIR)
|
||||
sudo rm -rf $(INITRAM_DIR)/var/cache/yum $(INITRAM_DIR)/usr/share/doc \
|
||||
$(INITRAM_DIR)/usr/share/locale $(INITRAM_DIR)/src
|
||||
sudo sh -c "cd $(INITRAM_DIR) && find . -xdev | cpio --create \
|
||||
--format='newc' | gzip -9 > `readlink -f $(INITRAM_FS)`"
|
||||
|
||||
|
||||
$(LINUX):
|
||||
mkdir -p $/
|
||||
find $(CACHE_DIR) -name 'kernel-2.*' | xargs rpm2cpio | cpio -imdv './boot/vmlinuz*'
|
||||
mv boot/vmlinuz* $(LINUX)
|
||||
|
||||
$/bootstrap.build:
|
||||
sudo BINARIES_DIR=$(BINARIES_DIR) BASEDIR=$/ bootstrap/bootstrapbuild.sh
|
||||
|
||||
.PHONY: $/bootstrap.prepare $/bootstrap.build
|
||||
$(NAILGUN_DIR): | $(INITRAM_DIR)/etc/init
|
||||
find $(CACHE_DIR) -name 'kernel-2.*' | xargs rpm2cpio | \
|
||||
( cd $(INITRAM_DIR); sudo cpio -idm './lib/modules/*' './boot/vmlinuz*' )
|
||||
find $(CACHE_DIR) -name 'kernel-firmware-2.*' | xargs rpm2cpio | \
|
||||
( cd $(INITRAM_DIR); sudo cpio -idm './lib/firmware/*' )
|
||||
for version in `ls -1 $(INITRAM_DIR)/lib/modules`; do \
|
||||
sudo depmod -b $(INITRAM_DIR) $$version; \
|
||||
done
|
||||
sudo sed -i -e '/^root/c\root:$$6$$oC7haQNQ$$LtVf6AI.QKn9Jb89r83PtQN9fBqpHT9bAFLzy.YVxTLiFgsoqlPY3awKvbuSgtxYHx4RUcpUqMotp.WZ0Hwoj.:15441:0:99999:7:::' $(INITRAM_DIR)/etc/shadow
|
||||
sudo cp -r $(SYNC)/* $(INITRAM_DIR)
|
||||
sudo mkdir -p $(NAILGUN_DIR)/bin
|
||||
sudo cp -r $(REPO)/bin/agent $(NAILGUN_DIR)/bin
|
||||
echo "bootstrap" | sudo tee $(NAILGUN_DIR)/system_type
|
||||
sudo mkdir -p $(INITRAM_DIR)/root/.ssh
|
||||
sudo cp $(SSH)/id_rsa.pub $(INITRAM_DIR)/root/.ssh/authorized_keys
|
||||
|
||||
$/linux $/initrd.gz: $/bootstrap.prepare $/bootstrap.build
|
||||
|
||||
endif
|
||||
$(INITRAM_DIR)/etc/init: | $(INITRAM_DIR)/dev/urandom $(INITRAM_DIR)/proc/1
|
||||
sudo mkdir -p $(INITRAM_DIR)/var/cache/yum
|
||||
sudo cp -r $(CACHE_DIR)/yum/* $(INITRAM_DIR)/var/cache/yum/
|
||||
sudo mkdir -p $(INITRAM_DIR)/var/lib/rpm
|
||||
$(RPM) --rebuilddb
|
||||
-$(RPM) -i http://mirror.yandex.ru/centos/6.3/os/x86_64/Packages/centos-release-6-3.el6.centos.9.x86_64.rpm
|
||||
$(YUM) install bash
|
||||
-$(RPM) -i http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-6.noarch.rpm
|
||||
-$(RPM) -i http://fedora-mirror01.rbc.ru/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
|
||||
$(YUM) install $(YUM_PACKAGES) mingetty
|
||||
sudo cp /etc/resolv.conf $(INITRAM_DIR)/etc/resolv.conf
|
||||
-$(CHROOT_CMD) rpm -i http://mirror.yandex.ru/centos/6.3/os/x86_64/Packages/centos-release-6-3.el6.centos.9.x86_64.rpm
|
||||
$(CHROOT_CMD) yum install -y ruby-devel make gcc flex byacc python-devel
|
||||
$(CHROOT_CMD) gem install --no-rdoc --no-ri httpclient
|
||||
$(CHROOT_CMD) gem install --no-rdoc --no-ri ohai
|
||||
sudo mkdir -p $(INITRAM_DIR)/src
|
||||
cd $(INITRAM_DIR)/src && sudo wget -c http://pypcap.googlecode.com/files/pypcap-1.1.tar.gz \
|
||||
http://www.tcpdump.org/release/libpcap-1.3.0.tar.gz
|
||||
cd $(INITRAM_DIR)/src && sudo tar zxf libpcap-1.3.0.tar.gz
|
||||
cd $(INITRAM_DIR)/src && sudo tar zxf pypcap-1.1.tar.gz
|
||||
(cd $(INITRAM_DIR)/src && sudo patch -p1) < bootstrap/pypcap.diff
|
||||
$(CHROOT_CMD) /bin/sh -c "cd /src/libpcap-1.3.0 && ./configure && make"
|
||||
$(CHROOT_CMD) /bin/sh -c "cd /src/pypcap-1.1 && make && make install"
|
||||
$(CHROOT_CMD) yum erase -y ruby-devel libpcap-devel python-devel glibc-devel flex \
|
||||
byacc glibc-headers kernel-headers gcc
|
||||
sudo touch $(INITRAM_DIR)/etc/fstab
|
||||
sudo rm $(INITRAM_DIR)/etc/resolv.conf
|
||||
sudo cp $(INITRAM_DIR)/sbin/init $(INITRAM_DIR)/init
|
||||
sudo umount $(INITRAM_DIR)/proc
|
||||
sudo umount $(INITRAM_DIR)/dev
|
||||
|
||||
|
||||
$(INITRAM_DIR)/dev/urandom $(INITRAM_DIR)/proc/1:
|
||||
mkdir -p $(INITRAM_DIR) $(INITRAM_DIR)/proc $(INITRAM_DIR)/dev
|
||||
mount | grep $(INITRAM_DIR)/proc || sudo mount --bind /proc $(INITRAM_DIR)/proc
|
||||
mount | grep $(INITRAM_DIR)/dev || sudo mount --bind /dev $(INITRAM_DIR)/dev
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
diff -u -r a/pypcap-1.1/pcap_ex.c b/pypcap-1.1/pcap_ex.c
|
||||
--- a/pypcap-1.1/pcap_ex.c 2005-10-17 02:58:14.000000000 +0400
|
||||
+++ b/pypcap-1.1/pcap_ex.c 2012-10-10 15:51:39.689673638 +0400
|
||||
@@ -13,13 +13,14 @@
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
+#include "config.h"
|
||||
+
|
||||
#include <pcap.h>
|
||||
#ifdef HAVE_PCAP_INT_H
|
||||
# include <pcap-int.h>
|
||||
#endif
|
||||
#include "pcap_ex.h"
|
||||
|
||||
-#include "config.h"
|
||||
|
||||
/* XXX - hack around older Python versions */
|
||||
#include "patchlevel.h"
|
||||
diff -u -r a/pypcap-1.1/setup.py b/pypcap-1.1/setup.py
|
||||
--- a/pypcap-1.1/setup.py 2005-10-17 03:07:03.000000000 +0400
|
||||
+++ b/pypcap-1.1/setup.py 2012-10-10 15:51:39.689673638 +0400
|
||||
@@ -46,7 +46,7 @@
|
||||
incdirs = [ os.path.join(d, sd) ]
|
||||
if os.path.exists(os.path.join(d, sd, 'pcap.h')):
|
||||
cfg['include_dirs'] = [ os.path.join(d, sd) ]
|
||||
- for sd in ('lib', ''):
|
||||
+ for sd in ('lib', 'lib64', ''):
|
||||
for lib in (('pcap', 'libpcap.a'),
|
||||
('pcap', 'libpcap.dylib'),
|
||||
('wpcap', 'wpcap.lib')):
|
|
@ -1 +0,0 @@
|
|||
bootstrap
|
|
@ -1,5 +0,0 @@
|
|||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
auto eth0
|
||||
iface eth0 inet dhcp
|
|
@ -1,8 +1,8 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
apt-get update
|
||||
mount -t devpts devpts /dev/pts
|
||||
|
||||
flock -w 0 -o /var/lock/agent.lock -c "/opt/nailgun/bin/agent > /var/log/agent.log 2>&1" || true
|
||||
fix-mcollective-config || true
|
||||
|
||||
exit 0
|
||||
touch /var/lock/subsys/local
|
|
@ -0,0 +1,2 @@
|
|||
HOSTNAME=bootstrap
|
||||
NETWORKING=yes
|
|
@ -0,0 +1,3 @@
|
|||
DEVICE=eth0
|
||||
BOOTPROTO=dhcp
|
||||
ONBOOT=yes
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
/bin/login -f root
|
|
@ -26,14 +26,13 @@ end
|
|||
|
||||
cobbler_distro "bootstrap" do
|
||||
kernel "#{node.cobbler.ks_mirror_dir}/bootstrap/linux"
|
||||
initrd "#{node.cobbler.ks_mirror_dir}/bootstrap/initrd.gz"
|
||||
initrd "#{node.cobbler.ks_mirror_dir}/bootstrap/initramfs.img"
|
||||
arch "x86_64"
|
||||
breed "ubuntu"
|
||||
osversion "precise"
|
||||
breed "redhat"
|
||||
osversion "rhel6"
|
||||
end
|
||||
|
||||
cobbler_profile "bootstrap" do
|
||||
kopts "root=/dev/ram0 rw ramdisk_size=614400"
|
||||
distro "bootstrap"
|
||||
menu true
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue