Make infrastructure refactored. Not finished yet (some bugs are still here).

This commit is contained in:
Vladimir Kozhukalov 2013-01-24 12:56:48 +04:00
parent 69ec0cbe24
commit d8f0b44869
29 changed files with 763 additions and 631 deletions

View File

@ -1,62 +1,51 @@
PWD:=$(shell pwd -P)
SOURCE_DIR:=$(PWD)
BUILD_DIR:=$(PWD)/build
MODULES=gnupg bootstrap nailgun test mirror iso packages/rpm naily astute
include $(SOURCE_DIR)/config.mk
include $(SOURCE_DIR)/mirror/module.mk
include $(SOURCE_DIR)/packages/module.mk
include $(SOURCE_DIR)/bootstrap/module.mk
include $(SOURCE_DIR)/iso/module.mk
.PHONY: all clean test test-unit help mirror FORCE deep_clean
# MODULES=gnupg bootstrap nailgun test mirror iso packages/rpm naily astute
help:
@echo 'Available targets:'
@echo ' all - build product'
@echo ' bootstrap - build nailgun bootstrap'
@echo ' iso - build nailgun iso'
@echo ' sdist-nailgun - build nailgun sdist'
@echo ' test - run all tests'
@echo ' test-unit - run unit tests'
@echo ' test-integration - run integration tests'
@echo ' test-cookbooks - run cookbooks tests'
@echo ' clean-integration-test - clean integration test environment'
@echo ' clean-cookbooks-test - clean cookbooks test environment'
@echo ' clean - remove build directory and resetting .done flags'
@echo ' deep_clean - clean + removing $(LOCAL_MIRROR) directory'
.PHONY:
all:
# .PHONY: all clean test test-unit help mirror FORCE deep_clean
test: test-unit
test-unit:
# help:
# @echo 'Available targets:'
# @echo ' all - build product'
# @echo ' bootstrap - build nailgun bootstrap'
# @echo ' iso - build nailgun iso'
# @echo ' sdist-nailgun - build nailgun sdist'
# @echo ' test - run all tests'
# @echo ' test-unit - run unit tests'
# @echo ' test-integration - run integration tests'
# @echo ' test-cookbooks - run cookbooks tests'
# @echo ' clean-integration-test - clean integration test environment'
# @echo ' clean-cookbooks-test - clean cookbooks test environment'
# @echo ' clean - remove build directory and resetting .done flags'
# @echo ' deep_clean - clean + removing $(LOCAL_MIRROR) directory'
# target to force rebuild of other targets
FORCE:
# all:
clean:
rm -rf $(BUILD_DIR)
[ ! -d $(LOCAL_MIRROR) ] || find $(LOCAL_MIRROR) -name *.done -exec rm {} \;
deep_clean: clean
rm -rf $(LOCAL_MIRROR)
# test: test-unit
distclean: deep_clean clean-integration-test
# test-unit:
assert-variable=$(if $($1),,$(error Variable $1 need to be defined))
find-files=$(shell test -d $1 && find $1 -type f 2> /dev/null)
# # target to force rebuild of other targets
# FORCE:
include config.mk
include repo.mk
# clean:
# rm -rf $(BUILD_DIR)
# test -d $(LOCAL_MIRROR) && find $(LOCAL_MIRROR) -name "*.done" -delete
# deep_clean: clean
# rm -rf $(LOCAL_MIRROR)
define include-module-template
MODULE_SOURCE_DIR:=$1
MODULE_BUILD_DIR:=$(BUILD_DIR)/$1
.:=$$(MODULE_SOURCE_DIR)
/:=$$(MODULE_BUILD_DIR)/
$$/%: .:=$$.
$$/%: /:=$$/
include $1/module.mk
endef
include-module=$(eval $(call include-module-template,$1))
$(foreach module,$(MODULES),$(call include-module,$(module)))
include rules.mk
# distclean: deep_clean clean-integration-test
include $(SOURCE_DIR)/rules.mk

View File

@ -1,11 +1,10 @@
ASTUTE_VERSION:=$(shell ruby -e "require '$(SOURCE_DIR)/astute/lib/astute/version.rb'; puts Astute::VERSION")
/:=$(BUILD_DIR)/gems/
$/astute-0.0.1.gem: astute/astute.gemspec \
$(BUILD_DIR)/packages/gems/astute-$(ASTUTE_VERSION).gem: \
$(SOURCE_DIR)/astute/astute.gemspec \
$(call find-files,astute/bin) \
$(call find-files,astute/lib) \
$(call find-files,astute/spec)
@mkdir -p $(@D)
cd $(<D) && \
gem build $(<F)
mv $(<D)/astute-*.gem $@
cd $(SOURCE_DIR)/astute && gem build astute.gemspec
mv $(SOURCE_DIR)/astute/astute-$(ASTUTE_VERSION).gem $@

View File

@ -1,11 +1,3 @@
BS_DIR:=$(BUILD_DIR)/bootstrap
INITRAM_DIR:=$(BS_DIR)/initram-root
INITRAM_FS:=$(BS_DIR)/initramfs.img
LINUX:=$(BS_DIR)/linux
/:=$(BS_DIR)/
$/%: /:=$/
.PHONY: bootstrap clean
all: bootstrap
@ -15,92 +7,101 @@ rubygems mcollective vconfig tcpdump scapy mingetty ntp nailgun-net-check dmidec
YUM_BUILD_PACKAGES:=ruby-devel.x86_64 make gcc flex byacc
NAILGUN_DIR:=$(INITRAM_DIR)/opt/nailgun
NAILGUN_DIR:=$(BUILD_DIR)/bootstrap/initram-root/opt/nailgun
RPM:=sudo rpm --root=`readlink -f $(INITRAM_DIR)`
YUM:=sudo yum --installroot=`readlink -f $(INITRAM_DIR)` -y --nogpgcheck
RPM:=sudo rpm --root=`readlink -f $(BUILD_DIR)/bootstrap/initram-root`
YUM:=sudo yum --installroot=`readlink -f $(BUILD_DIR)/bootstrap/initram-root` -y --nogpgcheck
RPM_DIR:=$(CENTOS_REPO_DIR)
CHROOT_CMD:=sudo chroot $(INITRAM_DIR)
CHROOT_CMD:=sudo chroot $(BUILD_DIR)/bootstrap/initram-root
clean: clean-bootstrap
clean-bootstrap:
sudo rm -rf $(INITRAM_DIR)
sudo rm -rf $(BUILD_DIR)/bootstrap/initram-root
bootstrap: $(LINUX) $(INITRAM_FS)
bootstrap: $(BUILD_DIR)/bootstrap/bootstrap.done
$/bootstrap.done: $(LINUX) $(INITRAM_FS)
$(BUILD_DIR)/bootstrap/bootstrap.done: \
$(BUILD_DIR)/bootstrap/linux \
$(BUILD_DIR)/bootstrap/initramfs.img
$(ACTION.TOUCH)
$(INITRAM_FS): $(INITRAM_DIR)/etc/nailgun_systemtype
sudo cp -f $(INITRAM_DIR)/etc/skel/.bash* $(INITRAM_DIR)/root/
sudo rm -rf $(INITRAM_DIR)/var/cache/yum $(INITRAM_DIR)/var/lib/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)`"
$(BUILD_DIR)/bootstrap/initramfs.img: $(BUILD_DIR)/bootstrap/initram-root/etc/nailgun_systemtype
sudo cp -f $(BUILD_DIR)/bootstrap/initram-root/etc/skel/.bash* $(BUILD_DIR)/bootstrap/initram-root/root/
sudo rm -rf $(BUILD_DIR)/bootstrap/initram-root/var/cache/yum $(BUILD_DIR)/bootstrap/initram-root/var/lib/yum $(BUILD_DIR)/bootstrap/initram-root/usr/share/doc \
$(BUILD_DIR)/bootstrap/initram-root/usr/share/locale $(BUILD_DIR)/bootstrap/initram-root/src
sudo sh -c "cd $(BUILD_DIR)/bootstrap/initram-root && find . -xdev | cpio --create \
--format='newc' | gzip -9 > `readlink -f $(BUILD_DIR)/bootstrap/initramfs.img`"
$(LINUX): $(LOCAL_MIRROR)/cache.done
mkdir -p $(BS_DIR)
find $(RPM_DIR) -name 'kernel-2.*' | xargs rpm2cpio | (cd $(BS_DIR)/; cpio -imd './boot/vmlinuz*')
mv $(BS_DIR)/boot/vmlinuz* $(LINUX)
rmdir $(BS_DIR)/boot
touch $(LINUX)
$(BUILD_DIR)/bootstrap/linux: $(BUILD_DIR)/mirror/build.done
mkdir -p $(BUILD_DIR)/bootstrap
find $(LOCAL_MIRROR_CENTOS_OS_BASEURL) -name 'kernel-2.*' | xargs rpm2cpio | (cd $(BUILD_DIR)/bootstrap/; cpio -imd './boot/vmlinuz*')
mv $(BUILD_DIR)/bootstrap/boot/vmlinuz* $(BUILD_DIR)/bootstrap/linux
rmdir $(BUILD_DIR)/bootstrap/boot
touch $(BUILD_DIR)/bootstrap/linux
$(INITRAM_DIR)/etc/nailgun_systemtype: $(BS_DIR)/init.done $(call find-files,bootstrap/sync) \
bin/agent bin/send2syslog.py bootstrap/ssh/id_rsa.pub $(call find-files,mcagent)
sudo sed -i -e '/^root/c\root:$$6$$oC7haQNQ$$LtVf6AI.QKn9Jb89r83PtQN9fBqpHT9bAFLzy.YVxTLiFgsoqlPY3awKvbuSgtxYHx4RUcpUqMotp.WZ0Hwoj.:15441:0:99999:7:::' $(INITRAM_DIR)/etc/shadow
sudo cp -r bootstrap/sync/* $(INITRAM_DIR)
sudo cp -r bin/send2syslog.py $(INITRAM_DIR)/usr/bin
sudo mkdir -p $(INITRAM_DIR)/root/.ssh
sudo cp bootstrap/ssh/id_rsa.pub $(INITRAM_DIR)/root/.ssh/authorized_keys
sudo chmod 700 $(INITRAM_DIR)/root/.ssh
sudo chmod 600 $(INITRAM_DIR)/root/.ssh/authorized_keys
$(BUILD_DIR)/bootstrap/initram-root/etc/nailgun_systemtype: \
$(BUILD_DIR)/bootstrap/init.done \
$(call find-files,bootstrap/sync) \
$(SOURCE_DIR)/bin/agent \
$(SOURCE_DIR)/bin/send2syslog.py \
$(SOURCE_DIR)/bootstrap/ssh/id_rsa.pub \
$(call find-files,$(SOURCE_DIR)/mcagent)
sudo sed -i -e '/^root/c\root:$$6$$oC7haQNQ$$LtVf6AI.QKn9Jb89r83PtQN9fBqpHT9bAFLzy.YVxTLiFgsoqlPY3awKvbuSgtxYHx4RUcpUqMotp.WZ0Hwoj.:15441:0:99999:7:::' $(BUILD_DIR)/bootstrap/initram-root/etc/shadow
sudo cp -r bootstrap/sync/* $(BUILD_DIR)/bootstrap/initram-root
sudo cp -r bin/send2syslog.py $(BUILD_DIR)/bootstrap/initram-root/usr/bin
sudo mkdir -p $(BUILD_DIR)/bootstrap/initram-root/root/.ssh
sudo cp bootstrap/ssh/id_rsa.pub $(BUILD_DIR)/bootstrap/initram-root/root/.ssh/authorized_keys
sudo chmod 700 $(BUILD_DIR)/bootstrap/initram-root/root/.ssh
sudo chmod 600 $(BUILD_DIR)/bootstrap/initram-root/root/.ssh/authorized_keys
sudo mkdir -p $(NAILGUN_DIR)/bin
sudo cp -r bin/agent $(NAILGUN_DIR)/bin
sudo mkdir -p $(INITRAM_DIR)/usr/libexec/mcollective/mcollective/agent/
sudo cp mcagent/* $(INITRAM_DIR)/usr/libexec/mcollective/mcollective/agent/
sudo sh -c "echo bootstrap > $(INITRAM_DIR)/etc/nailgun_systemtype"
sudo rm -rf $(INITRAM_DIR)/home/*
sudo mkdir -p $(BUILD_DIR)/bootstrap/initram-root/usr/libexec/mcollective/mcollective/agent/
sudo cp mcagent/* $(BUILD_DIR)/bootstrap/initram-root/usr/libexec/mcollective/mcollective/agent/
sudo sh -c "echo bootstrap > $(BUILD_DIR)/bootstrap/initram-root/etc/nailgun_systemtype"
sudo rm -rf $(BUILD_DIR)/bootstrap/initram-root/home/*
$(BS_DIR)/init.done: $(LOCAL_MIRROR)/repo.done $(INITRAM_DIR)/etc/yum.repos.d/mirror.repo $(LOCAL_MIRROR)/gems.done $(BUILD_DIR)/rpm/rpm.done
sudo mkdir -p $(INITRAM_DIR)/proc $(INITRAM_DIR)/dev
sudo mkdir -p $(INITRAM_DIR)/var/lib/rpm
$(BUILD_DIR)/bootstrap/init.done: \
$(BUILD_DIR)/mirror/build.done \
$(BUILD_DIR)/packages/build.done \
$(BUILD_DIR)/bootstrap/initram-root/etc/yum.repos.d/mirror.repo
sudo mkdir -p $(BUILD_DIR)/bootstrap/initram-root/proc $(BUILD_DIR)/bootstrap/initram-root/dev
sudo mkdir -p $(BUILD_DIR)/bootstrap/initram-root/var/lib/rpm
$(RPM) --rebuilddb
$(YUM) install $(YUM_PACKAGES) $(YUM_BUILD_PACKAGES)
sudo touch $(INITRAM_DIR)/etc/fstab
sudo touch $(BUILD_DIR)/bootstrap/initram-root/etc/fstab
find $(RPM_DIR) -name 'kernel-2.*' | xargs rpm2cpio | \
( cd $(INITRAM_DIR); sudo cpio -idm './lib/modules/*' './boot/vmlinuz*' )
find $(RPM_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; \
find $(LOCAL_MIRROR_CENTOS_OS_BASEURL) -name 'kernel-2.*' | xargs rpm2cpio | \
( cd $(BUILD_DIR)/bootstrap/initram-root; sudo cpio -idm './lib/modules/*' './boot/vmlinuz*' )
find $(LOCAL_MIRROR_CENTOS_OS_BASEURL) -name 'kernel-firmware-2.*' | xargs rpm2cpio | \
( cd $(BUILD_DIR)/bootstrap/initram-root; sudo cpio -idm './lib/firmware/*' )
for version in `ls -1 $(BUILD_DIR)/bootstrap/initram-root/lib/modules`; do \
sudo depmod -b $(BUILD_DIR)/bootstrap/initram-root $$version; \
done
sudo mkdir -p $(INITRAM_DIR)/tmp/gems
sudo cp -rf $(LOCAL_MIRROR)/gems $(INITRAM_DIR)/tmp/gems
sudo gem generate_index -d $(INITRAM_DIR)/tmp/gems
sudo mkdir -p $(BUILD_DIR)/bootstrap/initram-root/tmp/gems
sudo rsync -a --delete $(LOCAL_MIRROR_GEMS)/ $(BUILD_DIR)/bootstrap/initram-root/tmp/gems
$(CHROOT_CMD) gem install --no-rdoc --no-ri --source file:///tmp/gems \
httpclient ohai json_pure
sudo rm -rf $(INITRAM_DIR)/tmp/gems $(INITRAM_DIR)/usr/lib/ruby/gems/1.8/cache/*
sudo rm -rf $(BUILD_DIR)/bootstrap/initram-root/tmp/gems $(BUILD_DIR)/bootstrap/initram-root/usr/lib/ruby/gems/1.8/cache/*
sudo mkdir -p $(INITRAM_DIR)/src
sudo mkdir -p $(BUILD_DIR)/bootstrap/initram-root/src
$(YUM) erase $(YUM_BUILD_PACKAGES)
sudo rm -f $(INITRAM_DIR)/etc/yum.repos.d/Cent*
sudo cp $(INITRAM_DIR)/sbin/init $(INITRAM_DIR)/init
sudo rm -f $(BUILD_DIR)/bootstrap/initram-root/etc/yum.repos.d/Cent*
sudo cp $(BUILD_DIR)/bootstrap/initram-root/sbin/init $(BUILD_DIR)/bootstrap/initram-root/init
$(CHROOT_CMD) chkconfig exim off
$(ACTION.TOUCH)
define yum_local_repo
[mirror]
name=Mirantis mirror
baseurl=file://$(shell readlink -f -m $(RPM_DIR))
baseurl=file://$(shell readlink -f -m $(LOCAL_MIRROR_CENTOS_OS_BASEURL))
gpgcheck=0
enabled=1
endef
$(INITRAM_DIR)/etc/yum.repos.d/mirror.repo: export contents:=$(yum_local_repo)
$(INITRAM_DIR)/etc/yum.repos.d/mirror.repo: bootstrap/module.mk
$(BUILD_DIR)/bootstrap/initram-root/etc/yum.repos.d/mirror.repo: export contents:=$(yum_local_repo)
$(BUILD_DIR)/bootstrap/initram-root/etc/yum.repos.d/mirror.repo: bootstrap/module.mk
sudo mkdir -p $(@D)
sudo sh -c "echo \"$${contents}\" > $@"

View File

@ -1,16 +1,28 @@
MIRROR_URL:=http://srv08-srt.srt.mirantis.net/mirror
ifndef IGNORE_MIRROR
IGNORE_MIRROR:=1
endif
ifndef LOCAL_MIRROR
LOCAL_MIRROR:=local_mirror
LOCAL_MIRROR:=$(BUILD_DIR)/local_mirror
endif
iso.path:=$(BUILD_DIR)/iso/nailgun-centos-6.3-amd64.iso
bootstrap.linux:=$(BUILD_DIR)/bootstrap/linux
bootstrap.initrd:=$(BUILD_DIR)/bootstrap/initrd.gz
# iso.path:=$(BUILD_DIR)/iso/nailgun-centos-6.3-amd64.iso
# bootstrap.linux:=$(BUILD_DIR)/bootstrap/linux
# bootstrap.initrd:=$(BUILD_DIR)/bootstrap/initrd.gz
# # CENTOS REPOSITORIES SETTINGS
# CENTOS_MAJOR:=6
# CENTOS_MINOR:=3
# CENTOS_RELEASE:=$(CENTOS_MAJOR).$(CENTOS_MINOR)
# CENTOS_ARCH:=x86_64
# CENTOS_MIRROR:=http://mirror.yandex.ru/centos/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)
# CENTOS_NETINSTALL:=http://mirror.yandex.ru/centos/$(CENTOS_RELEASE)/isos/$(CENTOS_ARCH)
# CENTOS_GPG:=http://mirror.yandex.ru/centos
# CENTOS_REPO_DIR:=$(LOCAL_MIRROR)/centos/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)/
# CENTOS_ISO_DIR:=$(LOCAL_MIRROR)/centos/$(CENTOS_RELEASE)/isos/$(CENTOS_ARCH)/
BOOTSTRAP_FILES:=initramfs.img linux
NETINSTALL_ISO:=CentOS-$(CENTOS_RELEASE)-$(CENTOS_ARCH)-minimal-EFI.iso
NOFORWARD:=1

View File

@ -1,59 +1,93 @@
/:=$(BUILD_DIR)/iso/
.PHONY: iso img
all: iso img
.PHONY: iso
all: iso
ISOROOT:=$/isoroot
ISOROOT:=$(BUILD_DIR)/iso/isoroot
ISOBASENAME:=nailgun-centos-6.3-amd64
ISONAME:=$/$(ISOBASENAME).iso
IMGNAME:=$/$(ISOBASENAME).img
ISONAME:=$(BUILD_DIR)/iso/$(ISOBASENAME).iso
IMGNAME:=$(BUILD_DIR)/iso/$(ISOBASENAME).img
iso: $(ISONAME)
img: $(IMGNAME)
$/isoroot-centos.done: \
$(BUILD_DIR)/rpm/rpm.done \
$(LOCAL_MIRROR)/cache.done \
$(ISOROOT)/repodata/comps.xml \
$(BUILD_DIR)/iso/isoroot-centos.done: \
$(BUILD_DIR)/mirror/build.done \
$(BUILD_DIR)/packages/build.done
mkdir -p $(ISOROOT)
rsync -a --delete $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/ $(ISOROOT)
$(ACTION.TOUCH)
$(BUILD_DIR)/iso/isoroot-eggs.done: \
$(BUILD_DIR)/mirror/build.done \
$(BUILD_DIR)/packages/build.done
mkdir -p $(ISOROOT)/eggs
rsync -a --delete $(LOCAL_MIRROR_EGGS)/ $(ISOROOT)/eggs
$(ACTION.TOUCH)
$(BUILD_DIR)/iso/isoroot-gems.done: \
$(BUILD_DIR)/mirror/build.done \
$(BUILD_DIR)/packages/build.done
mkdir -p $(ISOROOT)/gems
rsync -a --delete $(LOCAL_MIRROR_GEMS)/ $(ISOROOT)/gems
$(ACTION.TOUCH)
########################
# Extra files
########################
$(BUILD_DIR)/iso/isoroot-files.done: \
$(ISOROOT)/.discinfo \
$(ISOROOT)/.treeinfo
mkdir -p $(ISOROOT)/Packages
find $(CENTOS_REPO_DIR)Packages -name '*.rpm' -exec cp -u {} $(ISOROOT)/Packages \;
createrepo -g `readlink -f "$(ISOROOT)/repodata/comps.xml"` -u media://`head -1 $(ISOROOT)/.discinfo` $(ISOROOT)
$(ACTION.TOUCH)
$(ISOROOT)/repodata/comps.xml: | $(CENTOS_REPO_DIR)repodata/comps.xml
mkdir $(@D)
cp $(CENTOS_REPO_DIR)repodata/comps.xml $(@D)
$(ISOROOT)/isolinux/isolinux.cfg: iso/isolinux/isolinux.cfg ; $(ACTION.COPY)
$(addprefix $(ISOROOT)/isolinux/,$(ISOLINUX_FILES)): \
$(LOCAL_MIRROR)/cache-boot.done \
$(ISOROOT)/isolinux/isolinux.cfg
cp $(CENTOS_REPO_DIR)/isolinux/$(@F) $(@D)
$/isoroot-isolinux.done: $(addprefix $(ISOROOT)/isolinux/,$(ISOLINUX_FILES))
$(ACTION.TOUCH)
$(addprefix $(ISOROOT)/images/,$(IMAGES_FILES)):
@mkdir -p $(@D)
cp $(CENTOS_REPO_DIR)images/$(@F) $(@D)
$(addprefix $(ISOROOT)/EFI/BOOT/,$(EFI_FILES)):
@mkdir -p $(@D)
cp $(CENTOS_REPO_DIR)EFI/BOOT/$(@F) $(@D)
$/isoroot-prepare.done: \
$(addprefix $(ISOROOT)/images/,$(IMAGES_FILES)) \
$(addprefix $(ISOROOT)/EFI/BOOT/,$(EFI_FILES)) \
$(ISOROOT)/.treeinfo \
$(ISOROOT)/isolinux/isolinux.cfg \
$(ISOROOT)/ks.cfg \
$(ISOROOT)/bootstrap_admin_node.sh \
$(ISOROOT)/bootstrap_admin_node.conf \
$(ISOROOT)/version.yaml
$(ISOROOT)/puppet-nailgun.tgz \
$(ISOROOT)/puppet-slave.tgz
$(ACTION.TOUCH)
$/isoroot-bootstrap.done: \
$(ISOROOT)/.discinfo: $(SOURCE_DIR)/iso/.discinfo ; $(ACTION.COPY)
$(ISOROOT)/.treeinfo: $(SOURCE_DIR)/iso/.treeinfo ; $(ACTION.COPY)
$(ISOROOT)/isolinux/isolinux.cfg: $(SOURCE_DIR)/iso/isolinux/isolinux.cfg ; $(ACTION.COPY)
$(ISOROOT)/ks.cfg: $(SOURCE_DIR)/iso/ks.cfg ; $(ACTION.COPY)
$(ISOROOT)/bootstrap_admin_node.sh: $(SOURCE_DIR)/iso/bootstrap_admin_node.sh ; $(ACTION.COPY)
$(ISOROOT)/bootstrap_admin_node.conf: $(SOURCE_DIR)/iso/bootstrap_admin_node.conf ; $(ACTION.COPY)
$(ISOROOT)/puppet-nailgun.tgz: \
$(call find-files,$(SOURCE_DIR)/puppet)
(cd puppet && tar chzf $@ *)
$(ISOROOT)/puppet-slave.tgz: \
$(call find-files,$(SOURCE_DIR)/puppet/nailytest) \
$(call find-files,$(SOURCE_DIR)/puppet/osnailyfacter) \
$(call find-files,$(SOURCE_DIR)/fuel/deployment/puppet)
(cd $(SOURCE_DIR)/puppet && tar cf $(BUILD_DIR)/puppet-slave.tar nailytest osnailyfacter)
(cd $(SOURCE_DIR)/fuel/deployment/puppet && tar rf $(BUILD_DIR)/puppet-slave.tar ./*)
gzip -c -9 $(BUILD_DIR)/puppet-slave.tar > $@
########################
# Ugly hacking. Hope it is temporary.
########################
FUEL_PACKAGES=http://download.mirantis.com/epel-fuel/x86_64
$(BUILD_DIR)/iso/isoroot-morerpm.done: \
$(BUILD_DIR)/iso/isoroot-centos.done \
$(ISOROOT)/.discinfo
mkdir -p $(ISOROOT)/more_rpm
cd $(ISOROOT)/more_rpm && wget -c \
$(FUEL_PACKAGES)/MySQL-shared-5.5.28-1.el6.x86_64.rpm \
$(FUEL_PACKAGES)/MySQL-client-5.5.28-1.el6.x86_64.rpm \
$(FUEL_PACKAGES)/MySQL-server-5.5.28_wsrep_23.7-1.rhel5.x86_64.rpm \
$(FUEL_PACKAGES)/galera-23.2.2-1.rhel5.x86_64.rpm
createrepo -x 'more_rpm/*' -g `readlink -f "$(ISOROOT)/repodata/comps.xml"` -u media://`head -1 $(ISOROOT)/.discinfo` $(ISOROOT)
$(ACTION.TOUCH)
########################
# Bootstrap image.
########################
$(BUILD_DIR)/iso/isoroot-bootstrap.done: \
$(ISOROOT)/bootstrap/bootstrap.rsa \
$(addprefix $(ISOROOT)/bootstrap/, $(BOOTSTRAP_FILES))
$(ACTION.TOUCH)
@ -65,67 +99,35 @@ $(addprefix $(ISOROOT)/bootstrap/, $(BOOTSTRAP_FILES)): \
$(ISOROOT)/bootstrap/bootstrap.rsa: bootstrap/ssh/id_rsa ; $(ACTION.COPY)
$(ISOROOT)/eggs/Nailgun-$(NAILGUN_VERSION).tar.gz: $(BUILD_DIR)/nailgun/Nailgun-$(NAILGUN_VERSION).tar.gz ; $(ACTION.COPY)
$(ISOROOT)/gems/gems/naily-$(NAILY_VERSION).gem: $(BUILD_DIR)/gems/naily-$(NAILY_VERSION).gem ; $(ACTION.COPY)
$(ISOROOT)/gems/gems/astute-$(ASTUTE_VERSION).gem: $(BUILD_DIR)/gems/astute-$(ASTUTE_VERSION).gem ; $(ACTION.COPY)
$/isoroot-eggs.done: \
$(LOCAL_MIRROR)/eggs.done \
$(ISOROOT)/eggs/Nailgun-$(NAILGUN_VERSION).tar.gz
cp -r $(LOCAL_MIRROR)/eggs $(ISOROOT)/
########################
# Iso image root file system.
########################
$(BUILD_DIR)/iso/isoroot.done: \
$(BUILD_DIR)/mirror/build.done \
$(BUILD_DIR)/packages/build.done \
$(BUILD_DIR)/iso/isoroot-centos.done \
$(BUILD_DIR)/iso/isoroot-eggs.done \
$(BUILD_DIR)/iso/isoroot-gems.done \
$(BUILD_DIR)/iso/isoroot-files.done \
$(BUILD_DIR)/iso/isoroot-morerpm.done \
$(BUILD_DIR)/iso/isoroot-bootstrap.done
$(ACTION.TOUCH)
$/isoroot-gems.done: \
$(LOCAL_MIRROR)/gems.done \
$(BUILD_DIR)/gems/naily-$(NAILY_VERSION).gem \
$(ISOROOT)/gems/gems/naily-$(NAILY_VERSION).gem \
$(ISOROOT)/gems/gems/astute-$(ASTUTE_VERSION).gem
cp -r $(LOCAL_MIRROR)/gems $(ISOROOT)/gems
(cd $(ISOROOT)/gems && gem generate_index gems)
$(ACTION.TOUCH)
$(ISOROOT)/puppet-nailgun.tgz: $(call find-files,puppet)
(cd puppet && tar chzf $@ *)
$(ISOROOT)/puppet-slave.tgz: \
$(call find-files,puppet/nailytest) \
$(call find-files,puppet/osnailyfacter) \
$(call find-files,fuel/deployment/puppet)
(cd puppet && tar cf $(BUILD_DIR)/puppet-slave.tar nailytest osnailyfacter)
(cd fuel/deployment/puppet && tar rf $(BUILD_DIR)/puppet-slave.tar ./*)
gzip -c -9 $(BUILD_DIR)/puppet-slave.tar > $@
$/isoroot-puppetmod.done: \
$(ISOROOT)/puppet-nailgun.tgz \
$(ISOROOT)/puppet-slave.tgz
$(ACTION.TOUCH)
$(ISOROOT)/ks.cfg: iso/ks.cfg ; $(ACTION.COPY)
$(ISOROOT)/bootstrap_admin_node.sh: iso/bootstrap_admin_node.sh ; $(ACTION.COPY)
$(ISOROOT)/bootstrap_admin_node.conf: iso/bootstrap_admin_node.conf ; $(ACTION.COPY)
$(ISOROOT)/.discinfo: iso/.discinfo ; $(ACTION.COPY)
$(ISOROOT)/.treeinfo: iso/.treeinfo ; $(ACTION.COPY)
$(ISOROOT)/version.yaml:
echo "COMMIT_SHA: `git rev-parse --verify HEAD`" > $@
$/isoroot.done: \
$/isoroot-bootstrap.done \
$/isoroot-puppetmod.done \
$/isoroot-eggs.done \
$/isoroot-gems.done \
$/isoroot-isolinux.done \
$/isoroot-centos.done \
$/isoroot-prepare.done
$(ACTION.TOUCH)
########################
# Building CD and USB stick images
########################
# keep in mind that mkisofs touches some files inside directory
# from which it builds iso image
# that is why we need to make $/isoroot.done dependent on some files
# and then copy these files into another directory
$(ISONAME): $/isoroot.done
$(ISONAME): $(BUILD_DIR)/iso/isoroot.done
rm -f $@
mkdir -p $/isoroot-mkisofs
rsync -a --delete $(ISOROOT)/ $/isoroot-mkisofs
mkdir -p $(BUILD_DIR)/iso/isoroot-mkisofs
rsync -a --delete $(ISOROOT)/ $(BUILD_DIR)/iso/isoroot-mkisofs
mkisofs -r -V "Mirantis Nailgun" -p "Mirantis Inc." \
-J -T -R -b isolinux/isolinux.bin \
-no-emul-boot \
@ -140,9 +142,9 @@ $(ISONAME): $/isoroot.done
IMGSIZE = $(shell echo "$(shell ls -s $(ISONAME) | awk '{print $$1}') / 1024 + 300" | bc)
$(IMGNAME): $(ISONAME)
rm -f $/img_loop_device
rm -f $/img_loop_partition
rm -f $/img_loop_uuid
rm -f $(BUILD_DIR)/iso/img_loop_device
rm -f $(BUILD_DIR)/iso/img_loop_partition
rm -f $(BUILD_DIR)/iso/img_loop_uuid
sudo losetup -j $@ | awk -F: '{print $$1}' | while read loopdevice; do \
sudo kpartx -v $$loopdevice | awk '{print "/dev/mapper/" $$1}' | while read looppartition; do \
sudo umount -f $$looppartition; \
@ -152,27 +154,27 @@ $(IMGNAME): $(ISONAME)
done
rm -f $@
dd if=/dev/zero of=$@ bs=1M count=$(IMGSIZE)
sudo losetup -f > $/img_loop_device
sudo losetup `cat $/img_loop_device` $@
sudo parted -s `cat $/img_loop_device` mklabel msdos
sudo parted -s `cat $/img_loop_device` unit MB mkpart primary ext2 1 $(IMGSIZE) set 1 boot on
sudo kpartx -a -v `cat $/img_loop_device` | awk '{print "/dev/mapper/" $$3}' > $/img_loop_partition
sudo losetup -f > $(BUILD_DIR)/iso/img_loop_device
sudo losetup `cat $(BUILD_DIR)/iso/img_loop_device` $@
sudo parted -s `cat $(BUILD_DIR)/iso/img_loop_device` mklabel msdos
sudo parted -s `cat $(BUILD_DIR)/iso/img_loop_device` unit MB mkpart primary ext2 1 $(IMGSIZE) set 1 boot on
sudo kpartx -a -v `cat $(BUILD_DIR)/iso/img_loop_device` | awk '{print "/dev/mapper/" $$3}' > $(BUILD_DIR)/iso/img_loop_partition
sleep 1
sudo mkfs.ext2 `cat $/img_loop_partition`
mkdir -p $/imgroot
sudo mount `cat $/img_loop_partition` $/imgroot
sudo mkfs.ext2 `cat $(BUILD_DIR)/iso/img_loop_partition`
mkdir -p $(BUILD_DIR)/iso/imgroot
sudo mount `cat $(BUILD_DIR)/iso/img_loop_partition` $/imgroot
sudo extlinux -i $/imgroot
sudo /sbin/blkid -s UUID -o value `cat $/img_loop_partition` > $/img_loop_uuid
sudo dd conv=notrunc bs=440 count=1 if=/usr/lib/extlinux/mbr.bin of=`cat $/img_loop_device`
sudo cp -r $/isoroot/images $/imgroot
sudo cp -r $/isoroot/isolinux $/imgroot
sudo mv $/imgroot/isolinux $/imgroot/syslinux
sudo rm $/imgroot/syslinux/isolinux.cfg
sudo cp iso/syslinux/syslinux.cfg $/imgroot/syslinux
sudo sed -i -e "s/will_be_substituted_with_actual_uuid/`cat $/img_loop_uuid`/g" $/imgroot/syslinux/syslinux.cfg
sudo cp iso/ks.cfg $/imgroot/ks.cfg
sudo sed -i -e "s/will_be_substituted_with_actual_uuid/`cat $/img_loop_uuid`/g" $/imgroot/ks.cfg
sudo cp $(ISONAME) $/imgroot/nailgun.iso
sudo umount -f `cat $/img_loop_partition`
sudo kpartx -d `cat $/img_loop_device`
sudo losetup -d `cat $/img_loop_device`
sudo /sbin/blkid -s UUID -o value `cat $(BUILD_DIR)/iso/img_loop_partition` > $(BUILD_DIR)/iso/img_loop_uuid
sudo dd conv=notrunc bs=440 count=1 if=/usr/lib/extlinux/mbr.bin of=`cat $(BUILD_DIR)/iso/img_loop_device`
sudo cp -r $(BUILD_DIR)/iso/isoroot/images $/imgroot
sudo cp -r $(BUILD_DIR)/iso/isoroot/isolinux $/imgroot
sudo mv $(BUILD_DIR)/iso/imgroot/isolinux $/imgroot/syslinux
sudo rm $(BUILD_DIR)/iso/imgroot/syslinux/isolinux.cfg
sudo cp $(SOURCE_DIR)/iso/syslinux/syslinux.cfg $(BUILD_DIR)/iso/imgroot/syslinux
sudo sed -i -e "s/will_be_substituted_with_actual_uuid/`cat $(BUILD_DIR)/iso/img_loop_uuid`/g" $(BUILD_DIR)/iso/imgroot/syslinux/syslinux.cfg
sudo cp $(SOURCE_DIR)/iso/ks.cfg $(BUILD_DIR)/iso/imgroot/ks.cfg
sudo sed -i -e "s/will_be_substituted_with_actual_uuid/`cat $(BUILD_DIR)/iso/img_loop_uuid`/g" $(BUILD_DIR)/iso/imgroot/ks.cfg
sudo cp $(ISONAME) $(BUILD_DIR)/iso/imgroot/nailgun.iso
sudo umount -f `cat $(BUILD_DIR)/iso/img_loop_partition`
sudo kpartx -d `cat $(BUILD_DIR)/iso/img_loop_device`
sudo losetup -d `cat $(BUILD_DIR)/iso/img_loop_device`

26
mirror/centos/boot.mk Normal file
View File

@ -0,0 +1,26 @@
include $(SOURCE_DIR)/mirror/centos/config.mk
ISOLINUX_FILES:=boot.msg grub.conf initrd.img isolinux.bin memtest splash.jpg vesamenu.c32 vmlinuz
IMAGES_FILES:=efiboot.img efidisk.img install.img
EFI_FILES:=BOOTX64.conf BOOTX64.efi splash.xpm.gz
# centos isolinux files
$(addprefix $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/isolinux/,$(ISOLINUX_FILES)):
@mkdir -p $(@D)
wget -O $@ $(CENTOS_MIRROR_OS_BASEURL)/isolinux/$(@F)
# centos EFI boot images
$(addprefix $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/EFI/BOOT/,$(EFI_FILES)):
@mkdir -p $(@D)
wget -O $@ $(CENTOS_MIRROR_OS_BASEURL)/EFI/BOOT/$(@F)
# centos boot images
$(addprefix $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/images/,$(IMAGES_FILES)):
@mkdir -p $(@D)
wget -O $@ $(CENTOS_MIRROR_OS_BASEURL)/images/$(@F)
$(BUILD_DIR)/mirror/centos/boot.done: \
$(addprefix $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/images/,$(IMAGES_FILES)) \
$(addprefix $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/EFI/BOOT/,$(EFI_FILES)) \
$(addprefix $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/isolinux/,$(ISOLINUX_FILES))
$(ACTION.TOUCH)

21
mirror/centos/config.mk Normal file
View File

@ -0,0 +1,21 @@
CENTOS_MAJOR:=6
CENTOS_MINOR:=3
CENTOS_RELEASE:=$(CENTOS_MAJOR).$(CENTOS_MINOR)
CENTOS_ARCH:=x86_64
ifeq ($(LOCAL_MIRROR),)
$(error It seems that variable LOCAL_MIRROR was not set correctly)
endif
LOCAL_MIRROR_CENTOS:=$(LOCAL_MIRROR)/centos
LOCAL_MIRROR_CENTOS_OS_BASEURL:=$(LOCAL_MIRROR_CENTOS)/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)
REQUIRED_PACKAGES:=$(shell grep -v "^\\s*\#" $(SOURCE_DIR)/requirements-rpm.txt)
RPMFORGE_PACKAGES:=qemu
CENTOS_MIRROR:=http://mirror.yandex.ru/centos
CENTOS_MIRROR_OS_BASEURL:=$(CENTOS_MIRROR)/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)
YUM_REPOS:=centos epel fuel_folsom puppetlabs rpmforge
include $(SOURCE_DIR)/mirror/centos/config_yum.mk

121
mirror/centos/config_yum.mk Normal file
View File

@ -0,0 +1,121 @@
define yum_conf
[main]
cachedir=$(BUILD_DIR)/mirror/centos/cache
keepcache=0
debuglevel=6
logfile=$(BUILD_DIR)/mirror/centos/yum.log
exclude=*.i686.rpm
exactarch=1
obsoletes=1
gpgcheck=0
plugins=1
pluginpath=$(shell readlink -f -m $(BUILD_DIR)/mirror/centos/etc/yum-plugins)
pluginconfpath=$(shell readlink -f -m $(BUILD_DIR)/mirror/centos/etc/yum/pluginconf.d)
reposdir=$(BUILD_DIR)/mirror/centos/etc/yum.repos.d
endef
define yum_repo_centos
[base]
name=CentOS-$(CENTOS_RELEASE) - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=os
baseurl=$(CENTOS_MIRROR)/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[updates]
name=CentOS-$(CENTOS_RELEASE) - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=updates
baseurl=$(CENTOS_MIRROR)/$(CENTOS_RELEASE)/updates/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[extras]
name=CentOS-$(CENTOS_RELEASE) - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=extras
baseurl=$(CENTOS_MIRROR)/$(CENTOS_RELEASE)/extras/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[centosplus]
name=CentOS-$(CENTOS_RELEASE) - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=centosplus
baseurl=$(CENTOS_MIRROR)/$(CENTOS_RELEASE)/centosplus/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[contrib]
name=CentOS-$(CENTOS_RELEASE) - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=contrib
baseurl=$(CENTOS_MIRROR)/$(CENTOS_RELEASE)/contrib/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
endef
define yum_repo_epel
[epel]
name=Extra Packages for Enterprise Linux $(CENTOS_MAJOR) - $(CENTOS_ARCH)
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-$(CENTOS_MAJOR)&arch=$(CENTOS_ARCH)
baseurl=http://mirror.yandex.ru/epel/$(CENTOS_MAJOR)/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=20
endef
define yum_repo_fuel_folsom
[openstack-epel-fuel]
name=Mirantis OpenStack Custom Packages
mirrorlist=http://download.mirantis.com/epel-fuel-folsom/mirror.external.list
gpgkey=https://fedoraproject.org/static/0608B895.txt
http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
http://download.mirantis.com/epel-fuel-folsom/rabbit.key
http://download.mirantis.com/epel-fuel-folsom/mirantis.key
gpgcheck=0
enabled=1
priority=1
endef
define yum_repo_puppetlabs
[puppetlabs]
name=Puppet Labs Packages
baseurl=http://yum.puppetlabs.com/el/$(CENTOS_MAJOR)/products/$(CENTOS_ARCH)/
enabled=1
gpgcheck=1
gpgkey=http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
priority=1
endef
define yum_repo_rpmforge
[rpmforge]
name=RHEL $(CENTOS_RELEASE) - RPMforge.net - dag
#mirrorlist = http://apt.sw.be/redhat/el$(CENTOS_MAJOR)/en/mirrors-rpmforge
baseurl=http://apt.sw.be/redhat/el$(CENTOS_MAJOR)/en/$(CENTOS_ARCH)/rpmforge
gpgcheck=0
enabled=0
[rpmforge-extras]
name = RHEL $(CENTOS_RELEASE) - RPMforge.net - extras
#mirrorlist = http://apt.sw.be/redhat/el$(CENTOS_MAJOR)/en/mirrors-rpmforge-extras
baseurl = http://apt.sw.be/redhat/el$(CENTOS_MAJOR)/en/$(CENTOS_ARCH)/extras
gpgcheck = 0
enabled = 1
priority=95
endef
define yum_repo_mirantis
[mirror]
name=CentOS $(CENTOS_RELEASE) - Base
baseurl=http://srv08-srt.srt.mirantis.net/mirror/centos/$(CENTOS_RELEASE)/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
endef

9
mirror/centos/module.mk Normal file
View File

@ -0,0 +1,9 @@
# This module downloads requiered creates rpm repository.
include $(SOURCE_DIR)/mirror/centos/repo.mk
# This module downloads centos installation images.
include $(SOURCE_DIR)/mirror/centos/boot.mk
$(BUILD_DIR)/mirror/centos/build.done: \
$(BUILD_DIR)/mirror/centos/repo.done \
$(BUILD_DIR)/mirror/centos/boot.done
$(ACTION.TOUCH)

49
mirror/centos/repo.mk Normal file
View File

@ -0,0 +1,49 @@
include $(SOURCE_DIR)/mirror/centos/config.mk
include $(SOURCE_DIR)/mirror/centos/config_yum.mk
$(BUILD_DIR)/mirror/centos/etc/yum.conf: export contents:=$(yum_conf)
$(BUILD_DIR)/mirror/centos/etc/yum.conf: \
$(SOURCE_DIR)/mirror/centos/yum-priorities-plugin.py
mkdir -p $(BUILD_DIR)/mirror/centos/etc/yum/pluginconf.d
echo "[main]\nenabled=1" > $(BUILD_DIR)/mirror/centos/etc/yum/pluginconf.d/priorities.conf
mkdir -p $(BUILD_DIR)/mirror/centos/etc/yum-plugins
cp $(SOURCE_DIR)/mirror/centos/yum-priorities-plugin.py $(BUILD_DIR)/mirror/centos/etc/yum-plugins/priorities.py
mkdir -p $(@D)
echo "$${contents}" > $@
$(BUILD_DIR)/mirror/centos/etc/yum.repos.d/base.repo: \
export contents:=$(foreach repo,$(YUM_REPOS),\n$(yum_repo_$(repo)))
$(BUILD_DIR)/mirror/centos/etc/yum.repos.d/base.repo: \
$(SOURCE_DIR)/mirror/centos/config.mk
@mkdir -p $(@D)
echo "$${contents}" > $@
$(BUILD_DIR)/mirror/centos/yum-config.done: \
$(BUILD_DIR)/mirror/centos/etc/yum.conf \
$(BUILD_DIR)/mirror/centos/etc/yum.repos.d/base.repo
$(ACTION.TOUCH)
$(BUILD_DIR)/mirror/centos/yum.done: \
$(BUILD_DIR)/mirror/centos/yum-config.done \
$(SOURCE_DIR)/requirements-rpm.txt
yum -c $(BUILD_DIR)/mirror/centos/etc/yum.conf clean all
rm -rf /var/tmp/yum-$$USER-*/
yumdownloader -q --resolve --archlist=$(CENTOS_ARCH) \
-c $(BUILD_DIR)/mirror/centos/etc/yum.conf \
--destdir=$(LOCAL_MIRROR_CENTOS_OS_BASEURL)/Packages \
$(REQUIRED_PACKAGES) $(RPMFORGE_PACKAGES)
$(ACTION.TOUCH)
$(LOCAL_MIRROR_CENTOS_OS_BASEURL)/repodata/comps.xml:
@mkdir -p $(@D)
wget -O $@.gz $(CENTOS_MIRROR_OS_BASEURL)/`wget -qO- $(CENTOS_MIRROR_OS_BASEURL)/repodata/repomd.xml | \
grep '$(@F)\.gz' | awk -F'"' '{ print $$2 }'`
gunzip $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/repodata/$(@F).gz
$(BUILD_DIR)/mirror/centos/repo.done: \
$(BUILD_DIR)/mirror/centos/yum.done \
| $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/repodata/comps.xml
createrepo -g `readlink -f "$(LOCAL_MIRROR_CENTOS_OS_BASEURL)/repodata/comps.xml"` \
-o $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/ $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/
$(ACTION.TOUCH)

13
mirror/eggs/config.mk Normal file
View File

@ -0,0 +1,13 @@
ifeq ($(LOCAL_MIRROR),)
$(error It seems that variable LOCAL_MIRROR was not set correctly)
endif
ifeq ($(LOCAL_MIRROR_CENTOS_OS_BASEURL),)
$(error It seems that variable LOCAL_MIRROR_CENTOS_OS_BASEURL was not set correctly)
endif
LOCAL_MIRROR_EGGS:=$(LOCAL_MIRROR)/eggs
REQUIRED_EGGS:=$(shell grep -v "^\\s*\#" $(SOURCE_DIR)/requirements-eggs.txt)
# It can be any a list of links (--find-links) or a pip index (--index-url).
MIRROR_EGGS:=http://pypi.python.org/simple

44
mirror/eggs/module.mk Normal file
View File

@ -0,0 +1,44 @@
include $(SOURCE_DIR)/mirror/eggs/config.mk
SANDBOX:=$(BUILD_DIR)/mirror/eggs/SANDBOX
include $(SOURCE_DIR)/sandbox/module.mk
$(BUILD_DIR)/mirror/eggs/build.done: export SANDBOX_UP:=$(SANDBOX_UP)
$(BUILD_DIR)/mirror/eggs/build.done: export SANDBOX_DOWN:=$(SANDBOX_DOWN)
$(BUILD_DIR)/mirror/eggs/build.done: \
$(BUILD_DIR)/mirror/centos/build.done \
$(SOURCE_DIR)/requirements-eggs.txt
mkdir -p $(@D)
sudo sh -c "$${SANDBOX_UP}"
# Creating eggs mirror directory
mkdir -p $(LOCAL_MIRROR_EGGS)
# Avoiding eggs download duplication.
rsync -a --delete $(LOCAL_MIRROR_EGGS) $(SANDBOX)/tmp
# Here we don't know if MIRROR_EGGS
# is a list of links or a correct pip index.
# That is why we use --index-url and --find-links options
# for the same url.
# Installing new version of pip.
sudo chroot $(SANDBOX) pip --version | awk '{if ($$2 != "1.2.1"){exit 1}}' || \
sudo chroot $(SANDBOX) pip-python install \
--index-url $(MIRROR_EGGS) \
--find-links $(MIRROR_EGGS) \
pip==1.2.1
# Downloading required pip packages.
sudo chroot $(SANDBOX) pip install \
--exists-action=i \
--index-url $(MIRROR_EGGS) \
--find-links $(MIRROR_EGGS) \
--download /tmp/$(notdir $(LOCAL_MIRROR_EGGS)) \
$(REQUIRED_EGGS)
# # Copying downloaded eggs into eggs mirror
rsync -a $(SANDBOX)/tmp/$(notdir $(LOCAL_MIRROR_EGGS))/ $(LOCAL_MIRROR_EGGS)
sudo sh -c "$${SANDBOX_DOWN}"
$(ACTION.TOUCH)

5
mirror/gems/config.mk Normal file
View File

@ -0,0 +1,5 @@
ifeq ($(LOCAL_MIRROR),)
$(error It seems that variable LOCAL_MIRROR was not set correctly)
endif
LOCAL_MIRROR_GEMS:=$(LOCAL_MIRROR)/gems

27
mirror/gems/module.mk Normal file
View File

@ -0,0 +1,27 @@
LOCAL_MIRROR_GEMS:=$(LOCAL_MIRROR)/gems
define bundle_gemfile_template
source "http://rubygems.org"
source "http://gems.rubyforge.org"
source "http://gemcutter.org"
endef
$(BUILD_DIR)/mirror/gems/gems-bundle-gemfile.done: export bundle_gemfile_template:=$(bundle_gemfile_template)
$(BUILD_DIR)/mirror/gems/gems-bundle-gemfile.done: requirements-gems.txt
@mkdir -p $(BUILD_DIR)/mirror/gems/gems-bundle
echo "$${bundle_gemfile_template}" > $(BUILD_DIR)/mirror/gems/gems-bundle/Gemfile
cat requirements-gems.txt | while read gem ver; do \
echo "gem \"$${gem}\", \"$${ver}\"" >> $(BUILD_DIR)/mirror/gems/gems-bundle/Gemfile; \
done
$(ACTION.TOUCH)
$(BUILD_DIR)/mirror/gems/gems-bundle.done: $(BUILD_DIR)/mirror/gems/gems-bundle-gemfile.done
( cd $(BUILD_DIR)/mirror/gems/gems-bundle && bundle install --path ./ && bundle package )
( cd $(BUILD_DIR)/mirror/gems/gems-bundle/vendor/cache/ && gem fetch -v 1.2.1 bundler )
$(ACTION.TOUCH)
$(BUILD_DIR)/mirror/gems/build.done: $(BUILD_DIR)/mirror/gems/gems-bundle.done
@mkdir -p $(LOCAL_MIRROR_GEMS)/gems
cp $(BUILD_DIR)/mirror/gems/gems-bundle/vendor/cache/*.gem $(LOCAL_MIRROR_GEMS)/gems
(cd $(LOCAL_MIRROR_GEMS) && gem generate_index gems)
$(ACTION.TOUCH)

View File

@ -1,263 +1,15 @@
/:=$(LOCAL_MIRROR)/
include $(SOURCE_DIR)/mirror/src/module.mk
include $(SOURCE_DIR)/mirror/centos/module.mk
include $(SOURCE_DIR)/mirror/eggs/module.mk
include $(SOURCE_DIR)/mirror/gems/module.mk
$/%: /:=$/
.PHONY: mirror
CENTOSEXTRA_PACKAGES:=$(shell grep -v "^\\s*\#" requirements-rpm.txt)
CENTOSRPMFORGE_PACKAGES:=qemu
# RPM PACKAGE CACHE RULES
ifeq ($(IGNORE_MIRROR),1)
REPO_SUFFIX=real
else
REPO_SUFFIX=mirror
endif
define yum_conf
[main]
cachedir=$(CENTOS_REPO_DIR)cache
keepcache=0
debuglevel=6
logfile=$(CENTOS_REPO_DIR)yum.log
exclude=*.i686.rpm
exactarch=1
obsoletes=1
gpgcheck=0
plugins=1
pluginpath=$(shell readlink -f -m $(CENTOS_REPO_DIR)etc/yum-plugins)
pluginconfpath=$(shell readlink -f -m $(CENTOS_REPO_DIR)etc/yum/pluginconf.d)
reposdir=$(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).repos.d
endef
$(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).conf: export contents:=$(yum_conf)
$(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).conf: mirror/module.mk
ifeq ($(IGNORE_MIRROR),1)
mkdir -p $(CENTOS_REPO_DIR)etc/yum/pluginconf.d
echo "[main]\nenabled=1" > $(CENTOS_REPO_DIR)etc/yum/pluginconf.d/priorities.conf
mkdir -p $(CENTOS_REPO_DIR)etc/yum-plugins
cp mirror/yum-priorities-plugin.py $(CENTOS_REPO_DIR)etc/yum-plugins/priorities.py
endif
@mkdir -p $(@D)
echo "$${contents}" > $@
define yum_mirror_repo
[mirror]
name=CentOS $(CENTOS_RELEASE) - Base
baseurl=$(REPOMIRROR)
gpgcheck=0
enabled=1
endef
define yum_real_repo
[base]
name=CentOS-$(CENTOS_RELEASE) - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=os
baseurl=$(CENTOSMIRROR)/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[updates]
name=CentOS-$(CENTOS_RELEASE) - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=updates
baseurl=$(CENTOSMIRROR)/$(CENTOS_RELEASE)/updates/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[extras]
name=CentOS-$(CENTOS_RELEASE) - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=extras
baseurl=$(CENTOSMIRROR)/$(CENTOS_RELEASE)/extras/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[centosplus]
name=CentOS-$(CENTOS_RELEASE) - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=centosplus
baseurl=$(CENTOSMIRROR)/$(CENTOS_RELEASE)/centosplus/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[contrib]
name=CentOS-$(CENTOS_RELEASE) - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$(CENTOS_RELEASE)&arch=$(CENTOS_ARCH)&repo=contrib
baseurl=$(CENTOSMIRROR)/$(CENTOS_RELEASE)/contrib/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=10
[epel]
name=Extra Packages for Enterprise Linux $(CENTOS_MAJOR) - $(CENTOS_ARCH)
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-$(CENTOS_MAJOR)&arch=$(CENTOS_ARCH)
baseurl=$(EPELMIRROR)/$(CENTOS_MAJOR)/$(CENTOS_ARCH)
gpgcheck=0
enabled=1
priority=20
[openstack-epel-fuel]
name=Mirantis OpenStack Custom Packages
mirrorlist=http://download.mirantis.com/epel-fuel-folsom/mirror.internal.list
gpgkey=https://fedoraproject.org/static/0608B895.txt
http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
http://download.mirantis.com/epel-fuel-folsom/rabbit.key
http://download.mirantis.com/epel-fuel-folsom/mirantis.key
gpgcheck=0
enabled=1
priority=1
[rpmforge]
name=RHEL $(CENTOS_RELEASE) - RPMforge.net - dag
#mirrorlist = http://apt.sw.be/redhat/el$(CENTOS_MAJOR)/en/mirrors-rpmforge
baseurl=$(RPMFORGEMIRROR)/el$(CENTOS_MAJOR)/en/$(CENTOS_ARCH)/rpmforge
gpgcheck=0
enabled=0
[rpmforge-extras]
name = RHEL $(CENTOS_RELEASE) - RPMforge.net - extras
#mirrorlist = http://apt.sw.be/redhat/el$(CENTOS_MAJOR)/en/mirrors-rpmforge-extras
baseurl = $(RPMFORGEMIRROR)/el$(CENTOS_MAJOR)/en/$(CENTOS_ARCH)/extras
gpgcheck = 0
enabled = 1
priority=95
[puppetlabs]
name=Puppet Labs Packages
baseurl=http://yum.puppetlabs.com/el/$(CENTOS_MAJOR)/products/$(CENTOS_ARCH)/
enabled=1
gpgcheck=1
gpgkey=http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
priority=1
endef
$(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).repos.d/base.repo: export contents:=$(yum_$(REPO_SUFFIX)_repo)
$(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).repos.d/base.repo: mirror/module.mk
@mkdir -p $(@D)
echo "$${contents}" > $@
$(CENTOS_REPO_DIR)repodata/comps.xml:
@mkdir -p $(@D)
wget -O $@.gz $(CENTOS_MIRROR)/`wget -qO- $(CENTOS_MIRROR)/repodata/repomd.xml | \
grep '$(@F)\.gz' | awk -F'"' '{ print $$2 }'`
gunzip $(CENTOS_REPO_DIR)repodata/$(@F).gz
$/cache-boot.done: \
$(addprefix $(CENTOS_REPO_DIR)/images/,$(IMAGES_FILES)) \
$(addprefix $(CENTOS_REPO_DIR)/EFI/BOOT/,$(EFI_FILES)) \
$(addprefix $(CENTOS_REPO_DIR)/isolinux/,$(ISOLINUX_FILES))
$(BUILD_DIR)/mirror/build.done: \
$(BUILD_DIR)/mirror/src/build.done \
$(BUILD_DIR)/mirror/centos/build.done \
$(BUILD_DIR)/mirror/eggs/build.done \
$(BUILD_DIR)/mirror/gems/build.done
$(ACTION.TOUCH)
$/cache-infra.done: \
$(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).conf \
$(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).repos.d/base.repo
$(ACTION.TOUCH)
$/cache-extra.done: \
$/cache-infra.done \
requirements-rpm.txt
yum -c $(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).conf clean all
yum -c $(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).conf clean expire-cache
rm -rf /var/tmp/yum-$$USER-*/
yumdownloader -q --resolve --archlist=$(CENTOS_ARCH) \
-c $(CENTOS_REPO_DIR)etc/yum-$(REPO_SUFFIX).conf \
--destdir=$(CENTOS_REPO_DIR)Packages \
$(CENTOSEXTRA_PACKAGES) $(CENTOSRPMFORGE_PACKAGES)
$(ACTION.TOUCH)
$/cache.done: $/cache-extra.done $/cache-boot.done
$(ACTION.TOUCH)
$/repo.done: | $(CENTOS_REPO_DIR)repodata/comps.xml
createrepo -g `readlink -f "$(CENTOS_REPO_DIR)repodata/comps.xml"` -o $(CENTOS_REPO_DIR) $(CENTOS_REPO_DIR)
$(ACTION.TOUCH)
# centos isolinux files
$(addprefix $(CENTOS_REPO_DIR)/isolinux/,$(ISOLINUX_FILES)):
@mkdir -p $(@D)
wget -O $@ $(CENTOS_MIRROR)/isolinux/$(@F)
# centos EFI boot images
$(addprefix $(CENTOS_REPO_DIR)/EFI/BOOT/,$(EFI_FILES)):
@mkdir -p $(@D)
wget -O $@ $(CENTOS_MIRROR)/EFI/BOOT/$(@F)
# centos boot images
$(addprefix $(CENTOS_REPO_DIR)/images/,$(IMAGES_FILES)):
@mkdir -p $(@D)
wget -O $@ $(CENTOS_MIRROR)/images/$(@F)
# EGGS AND GEMS
$/eggs.done: \
$(BUILD_DIR)/rpm/prep.done \
requirements-eggs.txt
@mkdir -p $/eggs
@[ -f $/eggs/pip-1.2.1.tar.gz ] || (cd $/eggs && wget http://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz)
@cp -R $/eggs $(SANDBOX)/tmp
sudo cp /etc/resolv.conf $(SANDBOX)/etc/resolv.conf
$(SAND_YUM) install python-setuptools
mount | grep -q $(SANDBOX)/proc || sudo mount --bind /proc $(SANDBOX)/proc
mount | grep -q $(SANDBOX)/dev || sudo mount --bind /dev $(SANDBOX)/dev
$(CHROOT_BOX) easy_install -U /tmp/eggs/pip-1.2.1.tar.gz
@cat requirements-eggs.txt | while read egg ver; do \
if [ -z "`find $(SANDBOX)/tmp/eggs/ -name $${egg}-$${ver}\*`" ]; then \
$(CHROOT_BOX) pip install --exists-action=i -d /tmp/eggs $${egg}==$${ver} ;\
fi; \
done
sudo umount $(SANDBOX)/proc
sudo umount $(SANDBOX)/dev
cp -fR $(SANDBOX)/tmp/eggs $/
$(CHROOT_BOX) rm -rf /tmp/eggs
$(CHROOT_BOX) rm -f /tmp/requirements-eggs.txt
sudo sync
$(ACTION.TOUCH)
define bundle_gemfile_template
source "http://rubygems.org"
source "http://gems.rubyforge.org"
source "http://gemcutter.org"
endef
$/gems-bundle-gemfile.done: export bundle_gemfile_template_content:=$(bundle_gemfile_template)
$/gems-bundle-gemfile.done: requirements-gems.txt
@mkdir -p $/gems-bundle
echo "$${bundle_gemfile_template_content}" > $/gems-bundle/Gemfile
cat requirements-gems.txt | while read gem ver; do \
echo "gem \"$${gem}\", \"$${ver}\"" >> $/gems-bundle/Gemfile; \
done
$(ACTION.TOUCH)
ifeq ($(IGNORE_MIRROR),1)
SRC_URLS:=$(shell grep -v ^\\s*\# requirements-src.txt)
else
SRC_URLS:=$(shell grep -v ^\\s*\# requirements-src.txt | sed "s=.*/\(.*\)=$(MIRROR_URL)/src/\1=")
endif
$/src.done: | $(addprefix $/src/, $(notdir $(SRC_URLS)))
$(ACTION.TOUCH)
$(addprefix $/src/, $(notdir $(SRC_URLS))):
@mkdir -p $/src
wget --no-use-server-timestamps -c -P $/src $(shell echo $(SRC_URLS) | grep $(notdir $@))
$/gems-bundle.done: $/gems-bundle-gemfile.done
( cd $/gems-bundle && bundle install --path ./ && bundle package )
( cd $/gems-bundle/vendor/cache/ && gem fetch -v 1.2.1 bundler )
$(ACTION.TOUCH)
$/gems.done: $/gems-bundle.done
@mkdir -p $/gems
cp $/gems-bundle/vendor/cache/*.gem $/gems
$(ACTION.TOUCH)
mirror: $/repo.done \
$/src.done \
$/cache-boot.done \
$/eggs.done \
$/gems.done
mirror: $(BUILD_DIR)/mirror/build.done

7
mirror/src/config.mk Normal file
View File

@ -0,0 +1,7 @@
SRC_URLS:=$(shell grep -v ^\\s*\# $(SOURCE_DIR)/requirements-src.txt)
ifeq ($(LOCAL_MIRROR),)
$(error It seems that variable LOCAL_MIRROR was not set correctly)
endif
LOCAL_MIRROR_SRC:=$(LOCAL_MIRROR)/src

9
mirror/src/module.mk Normal file
View File

@ -0,0 +1,9 @@
include $(SOURCE_DIR)/mirror/src/config.mk
$(addprefix $(LOCAL_MIRROR_SRC)/, $(notdir $(SRC_URLS))):
@mkdir -p $(LOCAL_MIRROR_SRC)
wget --no-use-server-timestamps -c -P $(LOCAL_MIRROR_SRC) $(shell echo $(SRC_URLS) | grep $(notdir $@))
$(BUILD_DIR)/mirror/src/build.done: $(SOURCE_DIR)/requirements-src.txt \
| $(addprefix $(LOCAL_MIRROR_SRC)/, $(notdir $(SRC_URLS)))
$(ACTION.TOUCH)

View File

@ -1,14 +1,12 @@
/:=$(BUILD_DIR)/nailgun/
NAILGUN_VERSION:=$(shell python -c "import sys; sys.path.insert(0, '$(SOURCE_DIR)/nailgun'); import setup; print setup.version")
%: /:=$/
$/Nailgun-$(NAILGUN_VERSION).tar.gz: \
$(call find-files,nailgun)
cd nailgun && \
python setup.py sdist --dist-dir $/
$(BUILD_DIR)/packages/eggs/Nailgun-$(NAILGUN_VERSION).tar.gz: \
$(call find-files,$(SOURCE_DIR)/nailgun)
cd $(SOURCE_DIR)/nailgun && \
python setup.py sdist --dist-dir $(BUILD_DIR)/packages/eggs
test-unit: test-unit-nailgun
.PHONY: test-unit-nailgun
test-unit-nailgun:
cd nailgun && ./run_tests.sh
cd $(SOURCE_DIR)/nailgun && ./run_tests.sh

View File

@ -1,10 +1,9 @@
NAILY_VERSION:=$(shell ruby -e "require '$(SOURCE_DIR)/naily/lib/naily/version.rb'; puts Naily::VERSION")
/:=$(BUILD_DIR)/gems/
$/naily-0.0.1.gem: naily/naily.gemspec \
$(call find-files,naily/bin) \
$(call find-files,naily/lib)
$(BUILD_DIR)/packages/gems/naily-$(NAILY_VERSION).gem: \
$(SOURCE_DIR)/naily/naily.gemspec \
$(call find-files,$(SOURCE_DIR)/naily/bin) \
$(call find-files,$(SOURCE_DIR)/naily/lib)
@mkdir -p $(@D)
cd $(<D) && \
gem build $(<F)
mv $(<D)/naily-*.gem $@
cd $(SOURCE_DIR)/naily && gem build naily.gemspec
mv $(SOURCE_DIR)/naily/naily-$(NAILY_VERSION).gem $@

14
packages/eggs/module.mk Normal file
View File

@ -0,0 +1,14 @@
include $(SOURCE_DIR)/nailgun/module.mk
.PHONY: nailgun nailgun_version
$(BUILD_DIR)/packages/eggs/build.done: \
$(BUILD_DIR)/packages/eggs/Nailgun-$(NAILGUN_VERSION).tar.gz
mkdir -p $(LOCAL_MIRROR_EGGS)
find $(BUILD_DIR)/packages/eggs/ ! -name "build.done" \
-exec cp {} $(LOCAL_MIRROR_EGGS) \;
$(ACTION.TOUCH)
nailgun: $(BUILD_DIR)/packages/eggs/Nailgun-$(NAILGUN_VERSION).tar.gz
nailgun_version:
@echo $(NAILGUN_VERSION)

22
packages/gems/module.mk Normal file
View File

@ -0,0 +1,22 @@
include $(SOURCE_DIR)/naily/module.mk
include $(SOURCE_DIR)/astute/module.mk
.PHONY: astute astute_version \
naily naily_version
$(BUILD_DIR)/packages/gems/build.done: \
$(BUILD_DIR)/packages/gems/naily-$(NAILY_VERSION).gem \
$(BUILD_DIR)/packages/gems/astute-$(ASTUTE_VERSION).gem
mkdir -p $(LOCAL_MIRROR_GEMS)/gems
find $(BUILD_DIR)/packages/gems/ ! -name "build.done" \
-exec cp {} $(LOCAL_MIRROR_GEMS)/gems \;
(cd $(LOCAL_MIRROR_GEMS) && gem generate_index gems)
$(ACTION.TOUCH)
astute: $(BUILD_DIR)/gems/astute-$(ASTUTE_VERSION).gem
astute_version:
@echo $(ASTUTE_VERSION)
naily: $(BUILD_DIR)/gems/naily-$(NAILY_VERSION).gem
naily_version:
@echo $(NAILY_VERSION)

13
packages/module.mk Normal file
View File

@ -0,0 +1,13 @@
include $(SOURCE_DIR)/packages/rpm/module.mk
include $(SOURCE_DIR)/packages/eggs/module.mk
include $(SOURCE_DIR)/packages/gems/module.mk
.PHONY: packages
$(BUILD_DIR)/packages/build.done: \
$(BUILD_DIR)/packages/rpm/build.done \
$(BUILD_DIR)/packages/eggs/build.done \
$(BUILD_DIR)/packages/gems/build.done
$(ACTION.TOUCH)
packages: $(BUILD_DIR)/packages/build.done

View File

@ -1,83 +1,79 @@
/:=$(BUILD_DIR)/rpm/
$/%: /:=$/
SANDBOX:=$/SANDBOX/
CHROOT_BOX:=sudo chroot $(SANDBOX)
SRC_DIR:=$/SOURCES/
SAND_YUM:=sudo yum --installroot=`readlink -f $(SANDBOX)` -y --nogpgcheck
SAND_RPM:=sudo rpm --root=`readlink -f $(SANDBOX)`
SAND_REQ:=rpm-build tar gcc flex make byacc python-devel.x86_64 glibc-devel \
glibc-headers kernel-headers
.PHONY: clean clean_rpm
clean: clean_rpm
clean_rpm:
sudo rm -rf $(BUILD_DIR)/rpm
sudo rm -rf $(BUILD_DIR)/packages/rpm
define yum_local_repo
[mirror]
name=Mirantis mirror
baseurl=file://$(shell readlink -f -m $(RPM_DIR))
gpgcheck=0
enabled=1
endef
SANDBOX:=$(BUILD_DIR)/packages/rpm/SANDBOX
include $(SOURCE_DIR)/sandbox/module.mk
$(SANDBOX)/etc/yum.repos.d/mirror.repo: export contents:=$(yum_local_repo)
$(SANDBOX)/etc/yum.repos.d/mirror.repo: packages/rpm/module.mk
mkdir -p $(@D) || echo "$(@D) already exists"
sudo sh -c "echo \"$${contents}\" > $@"
RPM_SOURCES:=$(BUILD_DIR)/packages/rpm/SOURCES
$/prep.done: $(LOCAL_MIRROR)/src.done \
$(LOCAL_MIRROR)/repo.done \
$(SANDBOX)/etc/yum.repos.d/mirror.repo
mkdir -p $(SRC_DIR)
cp -f $(LOCAL_MIRROR)/src/* $(SRC_DIR)
find $(LOCAL_MIRROR) -name centos-release* | head | xargs sudo rpm -i --root=$(SANDBOX) || echo "chroot already prepared"
sudo rm -f $(SANDBOX)/etc/yum.repos.d/Cent*
$(SAND_RPM) --rebuilddb
$(SAND_YUM) install $(SAND_REQ)
$(BUILD_DIR)/packages/rpm/prep.done: $(BUILD_DIR)/mirror/build.done
mkdir -p $(RPM_SOURCES)
cp -f $(LOCAL_MIRROR_SRC)/* $(RPM_SOURCES)
$(ACTION.TOUCH)
$/rpm-cirros.done: $/prep.done packages/rpm/specs/cirros-0.3.0.spec
rpmbuild -vv --define "_topdir `readlink -f $/`" -ba packages/rpm/specs/cirros-0.3.0.spec
$(BUILD_DIR)/packages/rpm/rpm-cirros.done: \
$(BUILD_DIR)/packages/rpm/prep.done \
$(SOURCE_DIR)/packages/rpm/specs/cirros-0.3.0.spec
rpmbuild -vv --define "_topdir `readlink -f $(BUILD_DIR)/packages/rpm`" -ba \
$(SOURCE_DIR)/packages/rpm/specs/cirros-0.3.0.spec
$(ACTION.TOUCH)
$/rpm-nailgun-agent.done: $/prep.done \
packages/rpm/specs/nailgun-agent.spec \
$(call find-files,bin)
cp -f bin/agent bin/nailgun-agent.cron $(SRC_DIR)
rpmbuild -vv --define "_topdir `readlink -f $/`" -ba packages/rpm/specs/nailgun-agent.spec
$(BUILD_DIR)/packages/rpm/rpm-nailgun-agent.done: \
$(BUILD_DIR)/packages/rpm/prep.done \
$(SOURCE_DIR)/packages/rpm/specs/nailgun-agent.spec \
$(call find-files,$(SOURCE_DIR)/bin)
cp -f bin/agent bin/nailgun-agent.cron $(RPM_SOURCES)
rpmbuild -vv --define "_topdir `readlink -f $(BUILD_DIR)/packages/rpm`" -ba \
$(SOURCE_DIR)/packages/rpm/specs/nailgun-agent.spec
$(ACTION.TOUCH)
$/rpm-nailgun-mcagents.done: $/prep.done \
packages/rpm/specs/nailgun-mcagents.spec \
$(call find-files,mcagent)
mkdir -p $/SOURCES/nailgun-mcagents
cp -f mcagent/* $(SRC_DIR)nailgun-mcagents
rpmbuild -vv --define "_topdir `readlink -f $/`" -ba packages/rpm/specs/nailgun-mcagents.spec
$(BUILD_DIR)/packages/rpm/rpm-nailgun-mcagents.done: \
$(BUILD_DIR)/packages/rpm/prep.done \
$(SOURCE_DIR)/packages/rpm/specs/nailgun-mcagents.spec \
$(call find-files,$(SOURCE_DIR)/mcagent)
mkdir -p $(BUILD_DIR)/packages/rpm/SOURCES/nailgun-mcagents
cp -f $(SOURCE_DIR)/mcagent/* $(RPM_SOURCES)/nailgun-mcagents
rpmbuild -vv --define "_topdir `readlink -f $(BUILD_DIR)/packages/rpm`" -ba \
$(SOURCE_DIR)/packages/rpm/specs/nailgun-mcagents.spec
$(ACTION.TOUCH)
$/rpm-nailgun-net-check.done: $/prep.done \
packages/rpm/specs/nailgun-net-check.spec \
packages/rpm/nailgun-net-check/net_probe.py
cp -f packages/rpm/patches/* $(SRC_DIR)
$(BUILD_DIR)/packages/rpm/rpm-nailgun-net-check.done: export SANDBOX_UP:=$(SANDBOX_UP)
$(BUILD_DIR)/packages/rpm/rpm-nailgun-net-check.done: export SANDBOX_DOWN:=$(SANDBOX_DOWN)
$(BUILD_DIR)/packages/rpm/rpm-nailgun-net-check.done: \
$(BUILD_DIR)/packages/rpm/prep.done \
$(SOURCE_DIR)/packages/rpm/specs/nailgun-net-check.spec \
$(SOURCE_DIR)/packages/rpm/nailgun-net-check/net_probe.py
sudo sh -c "$${SANDBOX_UP}"
echo 000
cp -f $(SOURCE_DIR)/packages/rpm/patches/* $(RPM_SOURCES)
sudo mkdir -p $(SANDBOX)/tmp/SOURCES
sudo cp packages/rpm/nailgun-net-check/net_probe.py $(SANDBOX)/tmp/SOURCES
sudo cp packages/rpm/specs/nailgun-net-check.spec $(SANDBOX)/tmp
sudo cp packages/rpm/patches/* $(SANDBOX)/tmp/SOURCES
sudo cp $(LOCAL_MIRROR)/src/* $(SANDBOX)/tmp/SOURCES
$(CHROOT_BOX) rpmbuild -vv --define "_topdir /tmp" -ba /tmp/nailgun-net-check.spec
cp $(SANDBOX)/tmp/RPMS/x86_64/* $/RPMS/x86_64/
sudo cp $(SOURCE_DIR)/packages/rpm/nailgun-net-check/net_probe.py $(SANDBOX)/tmp/SOURCES
sudo cp $(SOURCE_DIR)/packages/rpm/specs/nailgun-net-check.spec $(SANDBOX)/tmp
echo 111
sudo cp $(SOURCE_DIR)/packages/rpm/patches/* $(SANDBOX)/tmp/SOURCES
sudo cp $(LOCAL_MIRROR_SRC)/* $(SANDBOX)/tmp/SOURCES
sudo chroot $(SANDBOX) rpmbuild -vv --define "_topdir /tmp" -ba /tmp/nailgun-net-check.spec
cp $(SANDBOX)/tmp/RPMS/x86_64/* $(BUILD_DIR)/packages/rpm/RPMS/x86_64/
sudo sh -c "$${SANDBOX_DOWN}"
$(ACTION.TOUCH)
$(BUILD_DIR)/rpm/rpm.done: $/rpm-cirros.done \
$/rpm-nailgun-agent.done \
$/rpm-nailgun-mcagents.done \
$/rpm-nailgun-net-check.done \
| $(CENTOS_REPO_DIR)repodata/comps.xml
find $/RPMS -name '*.rpm' -exec cp -u {} $(CENTOS_REPO_DIR)/Packages \;
createrepo -g `readlink -f "$(CENTOS_REPO_DIR)repodata/comps.xml"` -o $(CENTOS_REPO_DIR) $(CENTOS_REPO_DIR)
$(BUILD_DIR)/packages/rpm/repo.done: \
$(BUILD_DIR)/packages/rpm/rpm-cirros.done \
$(BUILD_DIR)/packages/rpm/rpm-nailgun-agent.done \
$(BUILD_DIR)/packages/rpm/rpm-nailgun-mcagents.done \
$(BUILD_DIR)/packages/rpm/rpm-nailgun-net-check.done
find $(BUILD_DIR)/packages/rpm/RPMS -name '*.rpm' -exec cp -u {} $(LOCAL_MIRROR_CENTOS_OS_BASEURL)/Packages \;
createrepo -g `readlink -f "$(LOCAL_MIRROR_CENTOS_OS_BASEURL)/repodata/comps.xml"` \
-o $(LOCAL_MIRROR_CENTOS_OS_BASEURL) $(LOCAL_MIRROR_CENTOS_OS_BASEURL)
$(ACTION.TOUCH)
$(BUILD_DIR)/packages/rpm/build.done: $(BUILD_DIR)/packages/rpm/repo.done
$(ACTION.TOUCH)

29
repo.mk
View File

@ -1,29 +0,0 @@
# CENTOS REPOSITORIES SETTINGS
CENTOS_MAJOR:=6
CENTOS_MINOR:=3
CENTOS_RELEASE:=$(CENTOS_MAJOR).$(CENTOS_MINOR)
CENTOS_ARCH:=x86_64
CENTOS_MIRROR:=http://mirror.yandex.ru/centos/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)
CENTOS_NETINSTALL:=http://mirror.yandex.ru/centos/$(CENTOS_RELEASE)/isos/$(CENTOS_ARCH)
CENTOS_GPG:=http://mirror.yandex.ru/centos
REPOMIRROR:=$(MIRROR_URL)/centos
CENTOSMIRROR:=http://mirror.yandex.ru/centos
EPELMIRROR:=http://mirror.yandex.ru/epel
RPMFORGEMIRROR:=http://apt.sw.be/redhat
CENTOS_REPO_DIR:=$(LOCAL_MIRROR)/centos/$(CENTOS_RELEASE)/os/$(CENTOS_ARCH)/
CENTOS_ISO_DIR:=$(LOCAL_MIRROR)/centos/$(CENTOS_RELEASE)/isos/$(CENTOS_ARCH)/
ISOLINUX_FILES:=boot.msg grub.conf initrd.img isolinux.bin memtest splash.jpg vesamenu.c32 vmlinuz
IMAGES_FILES:=efiboot.img efidisk.img install.img
EFI_FILES:=BOOTX64.conf BOOTX64.efi splash.xpm.gz
BOOTSTRAP_FILES:=initramfs.img linux
NETINSTALL_ISO:=CentOS-$(CENTOS_RELEASE)-$(CENTOS_ARCH)-minimal-EFI.iso
# OUR PACKAGES VERSIONS
NAILGUN_VERSION:=0.1.0
NAILY_VERSION:=0.0.1
ASTUTE_VERSION:=0.0.1

View File

@ -1,19 +1,19 @@
Paste 1.7.5.1
PyYAML 3.10
SQLAlchemy 0.7.8
amqplib 1.0.2
anyjson 0.3.1
argparse 1.2.1
distribute 0.6.30
eventlet 0.9.17
greenlet 0.4.0
kombu 2.1.8
netaddr 0.7.10
nose 1.1.2
nose2 0.4.1
pip 1.2.1
pycrypto 2.6
simplejson 2.6.2
web.py 0.37
wsgilog 0.3
wsgiref 0.1.2
Paste==1.7.5.1
PyYAML==3.10
SQLAlchemy==0.7.8
amqplib==1.0.2
anyjson==0.3.1
argparse==1.2.1
distribute==0.6.30
eventlet==0.9.17
greenlet==0.4.0
kombu==2.1.8
netaddr==0.7.10
nose==1.1.2
nose2==0.4.1
pip==1.2.1
pycrypto==2.6
simplejson==2.6.2
web.py==0.37
wsgilog==0.3
wsgiref==0.1.2

View File

@ -62,6 +62,8 @@ puppetdb-terminus
python-amqp
python-cinder
python-devel.x86_64
python-pip
python-setuptools
python-virtualenv
rabbitmq-server-2.8.7
rpm-build

View File

@ -1,4 +1,3 @@
define ACTION.COPY
@mkdir -p $(@D)
cp $< $@
@ -13,3 +12,5 @@ $(BUILD_DIR)/%/.dir:
mkdir -p $(@D)
@touch $@
assert-variable=$(if $($1),,$(error Variable $1 need to be defined))
find-files=$(shell test -d $1 && find $1 -type f 2> /dev/null)

30
sandbox/module.mk Normal file
View File

@ -0,0 +1,30 @@
define yum_local_repo
[mirror]
name=Mirantis mirror
baseurl=file://$(shell readlink -f -m $(LOCAL_MIRROR_CENTOS_OS_BASEURL))
gpgcheck=0
enabled=1
endef
define SANDBOX_UP
mkdir -p $(SANDBOX)/etc/yum.repos.d
cp /etc/resolv.conf $(SANDBOX)/etc/resolv.conf
cat > $(SANDBOX)/etc/yum.repos.d/base.repo <<EOF
$(yum_local_repo)
EOF
rpm -i --root=$(SANDBOX) `find $(LOCAL_MIRROR_CENTOS_OS_BASEURL) -name "centos-release*rpm" | head -1`
rm -f $(SANDBOX)/etc/yum.repos.d/Cent*
rpm --root=$(SANDBOX) --rebuilddb
yum --installroot=$(SANDBOX) -y --nogpgcheck install \
rpm-build tar gcc flex make byacc python-devel.x86_64 \
glibc-devel glibc-headers kernel-headers python-pip
mount | grep -q $(SANDBOX)/proc || sudo mount --bind /proc $(SANDBOX)/proc
mount | grep -q $(SANDBOX)/dev || sudo mount --bind /dev $(SANDBOX)/dev
endef
define SANDBOX_DOWN
sync
umount $(SANDBOX)/proc
umount $(SANDBOX)/dev
endef