diff options
-rw-r--r-- | build/Makefile | 37 | ||||
-rw-r--r-- | build/c7-opnfv-x86_64-comps.xml | 292 | ||||
-rw-r--r-- | build/cache.mk | 2 | ||||
-rwxr-xr-x | build/instack.sh | 186 | ||||
-rw-r--r-- | build/isolinux.cfg | 120 | ||||
-rw-r--r-- | build/opnfv-apex.spec | 40 | ||||
-rwxr-xr-x | ci/build.sh | 20 | ||||
-rw-r--r-- | include/build.sh.debug | 0 |
8 files changed, 630 insertions, 67 deletions
diff --git a/build/Makefile b/build/Makefile index c33c1755..c0086fcf 100644 --- a/build/Makefile +++ b/build/Makefile @@ -15,6 +15,7 @@ SHELL = /bin/bash # #Input args export UNIT_TEST = FALSE +export USE_MASTER = "" export INTERACTIVE = TRUE export CENTDNLD = http://mirrors.cat.pdx.edu/centos/7.1.1503/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso export ISOSRC = file:$(shell pwd)/CentOS-7-x86_64-DVD-1503-01.iso @@ -22,7 +23,7 @@ export ISOCACHE = $(shell pwd)/$(shell basename $(ISOSRC)) export PRODNO = "OPNFV_BGS" export REVSTATE = "P0000" export NEWISO = $(shell pwd)/release/OPNFV-CentOS-7-x86_64-${REVSTATE}.iso -export GENESISRPM = $(shell pwd)/x86_64/opnfv-genesis-0.1-1.x86_64.rpm +export APEXRPM = $(shell pwd)/x86_64/opnfv-apex-2.0-1.x86_64.rpm # Note! Invoke with "make REVSTATE=RXXXX all" to make release build! # Invoke with ICOCACHE=/full/path/to/iso if cached ISO is in non-standard location. @@ -80,7 +81,7 @@ build-clean: $(SUBCLEAN) @rm -f $(NEWISO) .PHONY: clean $(SUBCLEAN) -clean: clean-cache $(SUBCLEAN) +clean: clean-cache instack-clean $(SUBCLEAN) @rm -f *.iso @rm -Rf release @rm -Rf newiso @@ -92,44 +93,46 @@ $(SUBCLEAN): %.clean: .PHONY: rpm-clean rpm-clean: - rpmbuild --clean opnfv-genesis.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)' + @rm -f build/opnfv-apex.tar.gz .PHONY: rpm rpm: - pushd ../../ && git archive --format=tar --prefix=opnfv-genesis-0.1/ HEAD | gzip > foreman/build/opnfv-genesis.tar.gz - rpmbuild -ba opnfv-genesis.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)' - @make rpm-clean + pushd ../ && git archive --format=tar --prefix=opnfv-apex-2.0/ HEAD > build/opnfv-apex.tar + tar -u --xform="s:instack.qcow2:opnfv-apex-2.0/build/instack.qcow2:" --file=opnfv-apex.tar instack.qcow2 + gzip -f opnfv-apex.tar + rpmbuild -ba opnfv-apex.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)' .PHONY: instack instack: instack.qcow2 instack.qcow2: - @./instack.sh + @./instack.sh $(USE_MASTER) .PHONY: instack-clean instack-clean: - @virsh destroy instack 2> /dev/null || echo -n '' - @virsh undefine instack 2> /dev/null || echo -n '' - @virsh destroy baremetal_0 2> /dev/null || echo -n '' - @virsh undefine baremetal_0 2> /dev/null || echo -n '' - @virsh destroy baremetal_1 2> /dev/null || echo -n '' - @virsh undefine baremetal_1 2> /dev/null || echo -n '' + #@virsh destroy instack 2> /dev/null || echo -n '' + #@virsh undefine instack 2> /dev/null || echo -n '' + #@virsh destroy baremetal_0 2> /dev/null || echo -n '' + #@virsh undefine baremetal_0 2> /dev/null || echo -n '' + #@virsh destroy baremetal_1 2> /dev/null || echo -n '' + #@virsh undefine baremetal_1 2> /dev/null || echo -n '' + rm -f instackenv.json + rm -f baremetal_0.xml + rm -f baremetal_1.xml rm -f instack.xml rm -f instack.qcow2 rm -rf stack -# Todo: Make things smarter - we shouldn't need to clean everything -# betwen make invocations. .PHONY: iso -iso: build-clean $(ISOCACHE) instack.qcow2 rpm +iso: build-clean instack.qcow2 rpm $(ISOCACHE) @make mount-centiso @mkdir centos release cp -r $(CENTDIR)/* centos @make umount-centiso # modify the installer iso's contents @cp -f isolinux.cfg centos/isolinux/isolinux.cfg - @cp $(GENESISRPM) centos/Packages + @cp $(APEXRPM) centos/Packages # regenerate yum repo data @echo "Generating new yum metadata" createrepo --update -g ../c7-opnfv-x86_64-comps.xml centos diff --git a/build/c7-opnfv-x86_64-comps.xml b/build/c7-opnfv-x86_64-comps.xml new file mode 100644 index 00000000..53eee655 --- /dev/null +++ b/build/c7-opnfv-x86_64-comps.xml @@ -0,0 +1,292 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!DOCTYPE comps PUBLIC "-//CentOS//DTD Comps info//EN" "comps.dtd"> +<comps> + <group> + <id>core</id> + <name>Core</name> + <name xml:lang='af'>Kern</name> + <name xml:lang='am'>ማዕከላዊ ቦታ</name> + <name xml:lang='ar'>اللبّ</name> + <name xml:lang='as'>ভিত্তি</name> + <name xml:lang='bal'>هستگ</name> + <name xml:lang='be'>Падмурак</name> + <name xml:lang='bg'>Основа</name> + <name xml:lang='bn'>কোর</name> + <name xml:lang='bn_IN'>কোর</name> + <name xml:lang='bs'>Jezgra</name> + <name xml:lang='ca'>Nucli</name> + <name xml:lang='cs'>Úplný základ</name> + <name xml:lang='cy'>Craidd</name> + <name xml:lang='da'>Grundlæggende</name> + <name xml:lang='de'>Kern</name> + <name xml:lang='el'>Πυρήνας</name> + <name xml:lang='en_GB'>Core</name> + <name xml:lang='es'>Núcleo</name> + <name xml:lang='et'>Tuum</name> + <name xml:lang='fa'>اصل</name> + <name xml:lang='fi'>Keskeiset</name> + <name xml:lang='fr'>Core</name> + <name xml:lang='gl'>Núcleo</name> + <name xml:lang='gu'>મૂળ</name> + <name xml:lang='he'>ליבה</name> + <name xml:lang='hi'>कोर</name> + <name xml:lang='hr'>Jezgra</name> + <name xml:lang='hu'>Mag</name> + <name xml:lang='hy'>Հիմք</name> + <name xml:lang='ia'>Nucleo</name> + <name xml:lang='id'>Inti</name> + <name xml:lang='ilo'>Bugas</name> + <name xml:lang='is'>Lágmarkskerfi</name> + <name xml:lang='it'>Principale</name> + <name xml:lang='ja'>コア</name> + <name xml:lang='ka'>ბირთვი</name> + <name xml:lang='kn'>ಅಂತಸ್ಸಾರ</name> + <name xml:lang='ko'>핵심</name> + <name xml:lang='lv'>Pamatsistēma</name> + <name xml:lang='mai'>कोर</name> + <name xml:lang='mk'>Основни</name> + <name xml:lang='ml'>കോറ്</name> + <name xml:lang='mr'>कोर</name> + <name xml:lang='ms'>Teras</name> + <name xml:lang='nb'>Kjerne</name> + <name xml:lang='ne'>कोर</name> + <name xml:lang='nl'>Kern</name> + <name xml:lang='no'>Kjerne</name> + <name xml:lang='nso'>Bogare</name> + <name xml:lang='or'>ପ୍ରମୂଖ</name> + <name xml:lang='pa'>ਮੂਲ</name> + <name xml:lang='pl'>Rdzeń</name> + <name xml:lang='pt'>Núcleo</name> + <name xml:lang='pt_BR'>Núcleo</name> + <name xml:lang='ro'>Nucleu</name> + <name xml:lang='ru'>Основа</name> + <name xml:lang='si'>න්යෂ්ඨිය</name> + <name xml:lang='sk'>Jadro</name> + <name xml:lang='sl'>Jedro</name> + <name xml:lang='sq'>Bërthama</name> + <name xml:lang='sr'>Срж</name> + <name xml:lang='sr@latin'>Srž</name> + <name xml:lang='sr@Latn'>Srž</name> + <name xml:lang='sv'>Grund</name> + <name xml:lang='ta'>கோர்</name> + <name xml:lang='te'>అంతర్భాగం</name> + <name xml:lang='tg'>Система</name> + <name xml:lang='th'>แกนหลัก</name> + <name xml:lang='tr'>Çekirdek</name> + <name xml:lang='uk'>Основа</name> + <name xml:lang='ur'>مرکز</name> + <name xml:lang='vi'>Lõi</name> + <name xml:lang='zh_CN'>核心</name> + <name xml:lang='zh_TW'>核心</name> + <name xml:lang='zu'>Okuyikhona</name> + <description>Smallest possible installation.</description> + <description xml:lang='as'>ন্যূনতম ইনস্টল।</description> + <description xml:lang='bn'>ন্যূনতম ইনস্টলেশন।</description> + <description xml:lang='bn_IN'>ন্যূনতম ইনস্টলেশন।</description> + <description xml:lang='cs'>Nejmenší možná instalace.</description> + <description xml:lang='de'>Kleinstmögliche Installation.</description> + <description xml:lang='es'>La instalación más pequeña posible.</description> + <description xml:lang='fr'>Plus petite installation possible.</description> + <description xml:lang='gu'>નાનામાં નાના શક્ય સ્થાપન.</description> + <description xml:lang='hi'>लघुतम संभावित संस्थापन.</description> + <description xml:lang='ia'>Le minime possibile installation.</description> + <description xml:lang='it'>Minima installazione possibile.</description> + <description xml:lang='ja'>最小限のインストール</description> + <description xml:lang='kn'>ಅತ್ಯಲ್ಪಸಾಧ್ಯ ಅನುಸ್ಥಾಪನೆ.</description> + <description xml:lang='ko'>가능한 최소 설치</description> + <description xml:lang='ml'>സാധ്യമായ ഏറ്റവും ചെറിയ ഇന്സ്റ്റലേഷന്.</description> + <description xml:lang='mr'>शक्यतया सर्वात लहान प्रतिष्ठापन.</description> + <description xml:lang='or'>କ୍ଷୁଦ୍ରତମ ସମ୍ଭାବ୍ଯ ସ୍ଥାପନା।</description> + <description xml:lang='pa'>ਘੱਟੋ-ਘੱਟ ਸੰਭਵ ਇੰਸਟਾਲੇਸ਼ਨ।</description> + <description xml:lang='pl'>Najmniejsza możliwa instalacja.</description> + <description xml:lang='pt_BR'>Menor instalação possível</description> + <description xml:lang='ru'>Минимально возможная установка</description> + <description xml:lang='sv'>Minsta möjliga installation</description> + <description xml:lang='ta'>மிகச் சிறிய செயல்படுத்தக்கூடிய நிறுவல்.</description> + <description xml:lang='te'>సాధ్యమగు అతిచిన్న సంస్థాపన.</description> + <description xml:lang='uk'>Мінімально можливе встановлення.</description> + <description xml:lang='zh_CN'>最小可能安装。</description> + <description xml:lang='zh_TW'>最小型安裝。</description> + <default>false</default> + <uservisible>false</uservisible> + <packagelist> + <packagereq type="default">aic94xx-firmware</packagereq> + <packagereq type="default">alsa-firmware</packagereq> + <packagereq type="default">bfa-firmware</packagereq> + <packagereq type="default">dracut-config-rescue</packagereq> + <packagereq type="default">ivtv-firmware</packagereq> + <packagereq type="default">iwl1000-firmware</packagereq> + <packagereq type="default">iwl100-firmware</packagereq> + <packagereq type="default">iwl105-firmware</packagereq> + <packagereq type="default">iwl135-firmware</packagereq> + <packagereq type="default">iwl2000-firmware</packagereq> + <packagereq type="default">iwl2030-firmware</packagereq> + <packagereq type="default">iwl3160-firmware</packagereq> + <packagereq type="default">iwl3945-firmware</packagereq> + <packagereq type="default">iwl4965-firmware</packagereq> + <packagereq type="default">iwl5000-firmware</packagereq> + <packagereq type="default">iwl5150-firmware</packagereq> + <packagereq type="default">iwl6000-firmware</packagereq> + <packagereq type="default">iwl6000g2a-firmware</packagereq> + <packagereq type="default">iwl6000g2b-firmware</packagereq> + <packagereq type="default">iwl6050-firmware</packagereq> + <packagereq type="default">iwl7260-firmware</packagereq> + <packagereq type="default">kernel-tools</packagereq> + <packagereq type="default">libertas-sd8686-firmware</packagereq> + <packagereq type="default">libertas-sd8787-firmware</packagereq> + <packagereq type="default">libertas-usb8388-firmware</packagereq> + <packagereq type="default">linux-firmware</packagereq> + <packagereq type="default">microcode_ctl</packagereq> + <packagereq type="default">NetworkManager</packagereq> + <packagereq type="default">NetworkManager-tui</packagereq> + <packagereq type="default">postfix</packagereq> + <packagereq type="default">ql2100-firmware</packagereq> + <packagereq type="default">ql2200-firmware</packagereq> + <packagereq type="default">ql23xx-firmware</packagereq> + <packagereq type="mandatory">audit</packagereq> + <packagereq type="mandatory">basesystem</packagereq> + <packagereq type="mandatory">bash</packagereq> + <packagereq type="mandatory">biosdevname</packagereq> + <packagereq type="mandatory">btrfs-progs</packagereq> + <packagereq type="mandatory">coreutils</packagereq> + <packagereq type="mandatory">cpp</packagereq> + <packagereq type="mandatory">cronie</packagereq> + <packagereq type="mandatory">curl</packagereq> + <packagereq type="mandatory">dhclient</packagereq> + <packagereq type="mandatory">dkms</packagereq> + <packagereq type="mandatory">e2fsprogs</packagereq> + <packagereq type="mandatory">filesystem</packagereq> + <packagereq type="mandatory">gcc</packagereq> + <packagereq type="mandatory">glibc</packagereq> + <packagereq type="mandatory">glibc-devel</packagereq> + <packagereq type="mandatory">glibc-headers</packagereq> + <packagereq type="mandatory">git</packagereq> + <packagereq type="mandatory">hostname</packagereq> + <packagereq type="mandatory">initscripts</packagereq> + <packagereq type="mandatory">iproute</packagereq> + <packagereq type="mandatory">iprutils</packagereq> + <packagereq type="mandatory">iptables</packagereq> + <packagereq type="mandatory">iputils</packagereq> + <packagereq type="mandatory">irqbalance</packagereq> + <packagereq type="mandatory">kbd</packagereq> + <packagereq type="mandatory">kernel-devel</packagereq> + <packagereq type="mandatory">kernel-headers</packagereq> + <packagereq type="mandatory">kexec-tools</packagereq> + <packagereq type="mandatory">less</packagereq> + <packagereq type="mandatory">libmpc</packagereq> + <packagereq type="mandatory">mpfr</packagereq> + <packagereq type="mandatory">man-db</packagereq> + <packagereq type="mandatory">ncurses</packagereq> + <packagereq type="mandatory">net-tools</packagereq> + <packagereq type="mandatory">less</packagereq> + <packagereq type="mandatory">man-db</packagereq> + <packagereq type="mandatory">ncurses</packagereq> + <packagereq type="mandatory">openssh-clients</packagereq> + <packagereq type="mandatory">openssh-server</packagereq> + <packagereq type="mandatory">opnfv-apex</packagereq> + <packagereq type="mandatory">parted</packagereq> + <packagereq type="mandatory">passwd</packagereq> + <packagereq type="mandatory">patch</packagereq> + <packagereq type="mandatory">plymouth</packagereq> + <packagereq type="mandatory">policycoreutils</packagereq> + <packagereq type="mandatory">procps-ng</packagereq> + <packagereq type="mandatory">rootfiles</packagereq> + <packagereq type="mandatory">rpm</packagereq> + <packagereq type="mandatory">rsyslog</packagereq> + <packagereq type="mandatory">selinux-policy-targeted</packagereq> + <packagereq type="mandatory">setup</packagereq> + <packagereq type="mandatory">shadow-utils</packagereq> + <packagereq type="mandatory">sudo</packagereq> + <packagereq type="mandatory">systemd</packagereq> + <packagereq type="mandatory">tar</packagereq> + <packagereq type="mandatory">tuned</packagereq> + <packagereq type="mandatory">util-linux</packagereq> + <packagereq type="mandatory">vagrant</packagereq> + <packagereq type="mandatory">vim-minimal</packagereq> + <packagereq type="mandatory">VirtualBox-4.3</packagereq> + <packagereq type="mandatory">xfsprogs</packagereq> + <packagereq type="mandatory">yum</packagereq> + <packagereq type="optional">dracut-config-generic</packagereq> + <packagereq type="optional">dracut-fips-aesni</packagereq> + <packagereq type="optional">dracut-fips</packagereq> + <packagereq type="optional">dracut-network</packagereq> + <packagereq type="optional">openssh-keycat</packagereq> + <packagereq type="optional">selinux-policy-mls</packagereq> + <packagereq type="optional">tboot</packagereq> + </packagelist> + </group> + + <environment> + <id>opnfv_provisioning</id> + <name>OPNFV Provisioning Server Install</name> + <name xml:lang='as'>নূন্যতম ইনস্টল</name> + <name xml:lang='bn_IN'>ন্যূনতম ইনস্টল</name> + <name xml:lang='cs'>Minimální instalace</name> + <name xml:lang='de'>Minimale Installation</name> + <name xml:lang='es'>Instalación mínima</name> + <name xml:lang='fr'>Installation minimale</name> + <name xml:lang='gu'>ન્યૂનતમ સ્થાપન</name> + <name xml:lang='hi'>न्यूनतम संस्थापन</name> + <name xml:lang='it'>Installazione minima</name> + <name xml:lang='ja'>最小限のインストール</name> + <name xml:lang='kn'>ಕನಿಷ್ಟ ಅನುಸ್ಥಾಪನೆ</name> + <name xml:lang='ko'>최소 설치</name> + <name xml:lang='ml'>ഏറ്റവും കുറഞ്ഞ ഇന്സ്റ്റോള്</name> + <name xml:lang='mr'>किमान इंस्टॉल</name> + <name xml:lang='or'>ସର୍ବନିମ୍ନ ସ୍ଥାପନ</name> + <name xml:lang='pa'>ਘੱਟ ਤੋਂ ਘੱਟ ਇੰਸਟਾਲ</name> + <name xml:lang='pl'>Minimalna instalacja</name> + <name xml:lang='pt_BR'>Instalações Mínimas</name> + <name xml:lang='ru'>Минимальная установка</name> + <name xml:lang='ta'>குறைந்தபட்ச நிறுவல்</name> + <name xml:lang='te'>కనీసపు సంస్థాపన</name> + <name xml:lang='uk'>Мінімальна система</name> + <name xml:lang='zh_CN'>最小安装</name> + <name xml:lang='zh_TW'>最小型安裝</name> + <description>Installs an OPNFV Provisioning Server</description> + <description xml:lang='as'>মৌলি কাৰ্য্যকৰীতা।</description> + <description xml:lang='bn_IN'>প্রাথমিক বৈশিষ্ট্য।</description> + <description xml:lang='cs'>Základní funkcionalita.</description> + <description xml:lang='de'>Grundlegende Funktionalität.</description> + <description xml:lang='es'>Funcionalidad básica.</description> + <description xml:lang='fr'>Fonctionnalité de base.</description> + <description xml:lang='gu'>મૂળભૂત વિધેય.</description> + <description xml:lang='hi'>मौलिक प्रकार्यात्मकता.</description> + <description xml:lang='it'>Funzione di base.</description> + <description xml:lang='ja'>基本的な機能です。</description> + <description xml:lang='kn'>ಮೂಲಭೂತ ಕ್ರಿಯಾಶೀಲತೆ.</description> + <description xml:lang='ko'>기본적인 기능입니다.</description> + <description xml:lang='ml'>അടിസ്ഥാന പ്രവൃത്തിവിശേഷണം.</description> + <description xml:lang='mr'>मूळ कार्यक्षमता.</description> + <description xml:lang='or'>ସାଧାରଣ କାର୍ଯ୍ୟକାରିତା।</description> + <description xml:lang='pa'>ਮੁੱਢਲੀ ਕਾਰਜਸ਼ੀਲਤਾ।</description> + <description xml:lang='pl'>Podstawowa funkcjonalność.</description> + <description xml:lang='pt_BR'>Função básica</description> + <description xml:lang='ru'>Базовая функциональность.</description> + <description xml:lang='ta'>அடிப்படை செயலம்சம்.</description> + <description xml:lang='te'>ప్రాథమిక ఫంక్షనాలిటి.</description> + <description xml:lang='uk'>Основні можливості.</description> + <description xml:lang='zh_CN'>基本功能。</description> + <description xml:lang='zh_TW'>基本功能。</description> + <display_order>5</display_order> + <grouplist> + <groupid>core</groupid> + </grouplist> + <optionlist> + + </optionlist> + </environment> + <langpacks> + <match install="autocorr-%s" name="autocorr-en"/> + <match install="firefox-langpack-%s" name="firefox"/> + <match install="gimp-help-%s" name="gimp-help"/> + <match install="gnome-getting-started-docs-%s" name="gnome-getting-started-docs"/> + <match install="hunspell-%s" name="hunspell"/> + <match install="hyphen-%s" name="hyphen"/> + <match install="kde-l10n-%s" name="kdelibs"/> + <match install="libreoffice-langpack-%s" name="libreoffice-core"/> + <match install="man-pages-%s" name="man-pages"/> + <match install="mythes-%s" name="mythes"/> + </langpacks> + +</comps> diff --git a/build/cache.mk b/build/cache.mk index fdfd0034..28495a9d 100644 --- a/build/cache.mk +++ b/build/cache.mk @@ -1,4 +1,4 @@ -############################################################################## +############################################################################# # Copyright (c) 2015 Ericsson AB and others. # stefan.k.berg@ericsson.com # jonas.bjurel@ericsson.com diff --git a/build/instack.sh b/build/instack.sh index 6ead347c..ad1f4bb1 100755 --- a/build/instack.sh +++ b/build/instack.sh @@ -1,96 +1,194 @@ -#!/bin/sh +#!/bin/sh set -e +declare -i CNT + +RDO_RELEASE=kilo + +# RDO Manager expects a stack user to exist, this checks for one +# and creates it if you are root if ! id stack > /dev/null; then - useradd stack; - echo 'stack ALL=(root) NOPASSWD:ALL' | sudo tee -a /etc/sudoers.d/stack - echo 'Defaults:stack !requiretty' | sudo tee -a /etc/sudoers.d/stack - chmod 0440 /etc/sudoers.d/stack + sudo useradd stack; + sudo echo 'stack ALL=(root) NOPASSWD:ALL' | sudo tee -a /etc/sudoers.d/stack + sudo echo 'Defaults:stack !requiretty' | sudo tee -a /etc/sudoers.d/stack + sudo chmod 0440 /etc/sudoers.d/stack echo 'Added user stack' fi +# ensure that I can ssh as the stack user +if ! sudo grep "$(cat ~/.ssh/id_rsa.pub)" /home/stack/.ssh/authorized_keys; then + if ! sudo ls -d /home/stack/.ssh/ ; then + sudo mkdir /home/stack/.ssh + sudo chown stack:stack /home/stack/.ssh + sudo chmod 700 /home/stack/.ssh + fi + USER=$(whoami) sudo sh -c "cat ~$USER/.ssh/id_rsa.pub >> /home/stack/.ssh/authorized_keys" + sudo chown stack:stack /home/stack/.ssh/authorized_keys +fi + +# clean up stack user previously build instack disk images +ssh -T -o "StrictHostKeyChecking no" stack@localhost "rm -f instack*.qcow2" + +# Yum repo setup for building the undercloud if ! rpm -q epel-release > /dev/null; then - yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm + sudo yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm fi if ! rpm -q rdo-release > /dev/null; then - yum install -y https://rdoproject.org/repos/openstack-kilo/rdo-release-kilo.rpm + sudo yum install -y https://rdoproject.org/repos/openstack-${RDO_RELEASE}/rdo-release-${RDO_RELEASE}.rpm fi -if ! [ -a /etc/yum.repos.d/rdo-management-trunk.repo ]; then - curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo +if ! rpm -q rdo-release > /dev/null && [ "$1" != "-master" ]; then + sudo yum install -y https://rdoproject.org/repos/openstack-${RDO_RELEASE}/rdo-release-${RDO_RELEASE}.rpm + sudo rm -rf /etc/yum.repos.d/delorean.repo + sudo rm -rf /etc/yum.repos.d/delorean-current.repo + sudo rm -rf /etc/yum.repos.d/delorean-deps.repo +elif [ "$1" == "-master" ]; then + sudo yum -y install yum-plugin-priorities + sudo yum-config-manager --disable openstack-${RDO_RELEASE} + sudo curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7/current-tripleo/delorean.repo + sudo curl -o /etc/yum.repos.d/delorean-current.repo http://trunk.rdoproject.org/centos7/current/delorean.repo + sudo sed -i 's/\[delorean\]/\[delorean-current\]/' /etc/yum.repos.d/delorean-current.repo + sudo curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7/delorean-deps.repo fi +# ensure the undercloud package is installed so we can build the undercloud if ! rpm -q instack-undercloud > /dev/null; then - yum install -y instack-undercloud + sudo yum install -y instack-undercloud fi -sudo -u stack -- sh -c 'cd; instack-virt-setup' +# ensure openvswitch is installed +if ! rpm -q openvswitch > /dev/null; then + sudo yum install -y openvswitch +fi + +# ensure libvirt is installed +if ! rpm -q libvirt-daemon-kvm > /dev/null; then + sudo yum install -y libvirt-daemon-kvm +fi + +# ensure that no previous undercloud VMs are running +# and rebuild the bare undercloud VMs +ssh -T -o "StrictHostKeyChecking no" stack@localhost <<EOI +virsh destroy instack 2> /dev/null || echo -n '' +virsh undefine instack 2> /dev/null || echo -n '' +virsh destroy baremetal_0 2> /dev/null || echo -n '' +virsh undefine baremetal_0 2> /dev/null || echo -n '' +virsh destroy baremetal_1 2> /dev/null || echo -n '' +virsh undefine baremetal_1 2> /dev/null || echo -n '' +instack-virt-setup +EOI + +# attach undercloud to the underlay network for +# baremetal installations #if ! ovs-vsctl show | grep brbm; then # ovs-vsctl add-port brbm em2 #fi -cp /home/stack/.ssh/id_rsa* /root/.ssh/ -UNDERCLOUD=$(virsh net-dhcp-leases default | grep instack | awk '{print $5}' | awk -F '/' '{print $1}') -ssh -T -o "StrictHostKeyChecking no" root@$UNDERCLOUD <<EOI -if ! rpm -q rdo-release > /dev/null; then - yum install -y https://rdoproject.org/repos/openstack-kilo/rdo-release-kilo.rpm -fi +# let dhcp happen so we can get the ip +# just wait instead of checking until we see an address +# because there may be a previous lease that needs +# to be cleaned up +sleep 5 + +# get the undercloud ip address +UNDERCLOUD=$(grep instack /var/lib/libvirt/dnsmasq/default.leases | awk '{print $3}' | head -n 1) -if ! [ -a /etc/yum.repos.d/rdo-management-trunk.repo ]; then - curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo +# ensure that we can ssh to the undercloud +CNT=10 +while ! ssh -T -o "StrictHostKeyChecking no" "root@$UNDERCLOUD" "echo ''" > /dev/null && [ $CNT -gt 0 ]; do + echo -n "." + sleep 3 + CNT=CNT-1 +done +# TODO fail if CNT=0 + +# yum repo, triple-o package and ssh key setup for the undercloud +ssh -T -o "StrictHostKeyChecking no" "root@$UNDERCLOUD" <<EOI +if ! rpm -q epel-release > /dev/null; then + yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm fi -yum install -y python-rdomanager-oscplugin +curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7/current-tripleo/delorean.repo +curl -o /etc/yum.repos.d/delorean-current.repo http://trunk.rdoproject.org/centos7/current/delorean.repo +sed -i 's/\\[delorean\\]/\\[delorean-current\\]/' /etc/yum.repos.d/delorean-current.repo +echo "\\nincludepkgs=diskimage-builder,openstack-heat,instack,instack-undercloud,openstack-ironic,openstack-ironic-inspector,os-cloud-config,python-ironic-inspector-client,python-tripleoclient,tripleo-common,openstack-tripleo-heat-templates,openstack-tripleo-image-elements,openstack-tripleo-puppet-elements,openstack-tuskar-ui-extras,openstack-puppet-modules" >> /etc/yum.repos.d/delorean-current.repo +curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7/delorean-deps.repo +yum install -y python-tripleoclient cp /root/.ssh/authorized_keys /home/stack/.ssh/authorized_keys chown stack:stack /home/stack/.ssh/authorized_keys EOI -ssh -o "StrictHostKeyChecking no" stack@$UNDERCLOUD "openstack undercloud install" -#ssh -T -o "StrictHostKeyChecking no" stack@$UNDERCLOUD <<EOI -#echo "Running undercloud install" -#openstack undercloud install -#dontexit=\$(openstack undercloud install) -#openstack undercloud install && sudo halt -p -#EOI +# install undercloud on Undercloud VM +ssh -o "StrictHostKeyChecking no" "stack@$UNDERCLOUD" "openstack undercloud install" + +# make a copy of instack VM's definitions, and disk image +# it must be stopped to make a copy of its disk image +ssh -T -o "StrictHostKeyChecking no" stack@localhost <<EOI echo "Shuttind down instack to take snapshop" virsh shutdown instack echo "Waiting for instack VM to shutdown" -while virsh list | grep instack; do +CNT=20 +while virsh list | grep instack > /dev/null && [ $CNT -gt 0 ]; do echo -n "." sleep 5 + CNT=CNT-1 done +if virsh list | grep instack > /dev/null; then + echo "instack failed to shutdown for copy" + exit 1 +fi -echo "Copying instack disk image and starting instack VM." +echo "\nCopying instack disk image and starting instack VM." +virsh dumpxml baremetal_0 > baremetal_0.xml +virsh dumpxml baremetal_1 > baremetal_1.xml cp -f /var/lib/libvirt/images/instack.qcow2 . virsh dumpxml instack > instack.xml -virsh vol-dumpxml instack.qcow2 --pool default > instack.qcow2.xml +#virsh vol-dumpxml instack.qcow2 --pool default > instack.qcow2.xml virsh start instack +EOI + +# copy off the instack artifacts +echo "Copying instack files to build directory" +scp -o "StrictHostKeyChecking no" stack@localhost:baremetal_0.xml . +scp -o "StrictHostKeyChecking no" stack@localhost:baremetal_1.xml . +scp -o "StrictHostKeyChecking no" stack@localhost:instack.xml . +scp -o "StrictHostKeyChecking no" stack@localhost:instack.qcow2 . + +# start the instack VM back up to continue installation echo "Waiting for instack VM to start" -while ! ping -c 1 $UNDERCLOUD > /dev/null; do +CNT=10 +while ! ping -c 1 "$UNDERCLOUD" > /dev/null && [ $CNT -gt 0 ]; do echo -n "." sleep 5 + CNT=CNT-1 done -while ! ssh -T -o "StrictHostKeyChecking no" root@$UNDERCLOUD "echo ''" > /dev/null; do +CNT=10 +while ! ssh -T -o "StrictHostKeyChecking no" "root@$UNDERCLOUD" "echo ''" > /dev/null && [ $CNT -gt 0 ]; do echo -n "." sleep 3 + CNT=CNT-1 done +# inject the already downloaded cloud image so it's not downloaded again echo "Copying CentOS Cache to instack VM" -ssh -o "StrictHostKeyChecking no" stack@$UNDERCLOUD "mkdir .cache" -scp -r /home/stack/.cache/image-create/CentOS-7-x86_64-GenericCloud* stack@$UNDERCLOUD:.cache/ +ssh -o "StrictHostKeyChecking no" "stack@$UNDERCLOUD" "mkdir .cache" +ssh -T -o "StrictHostKeyChecking no" stack@localhost "scp -r -o 'StrictHostKeyChecking no' /home/stack/.cache/image-create/CentOS-7-x86_64-GenericCloud* \"stack@$UNDERCLOUD\":.cache/" +# build the overcloud images echo "Building overcloud images" -ssh -tt -o "StrictHostKeyChecking no" stack@$UNDERCLOUD "openstack overcloud image build --all" +ssh -tt -o "StrictHostKeyChecking no" "stack@$UNDERCLOUD" "openstack overcloud image build --all" +# copy off the built images echo "Copying overcloud images" -mkdir stack -scp stack@$UNDERCLOUD:deploy-ramdisk-ironic.initramfs stack -scp stack@$UNDERCLOUD:deploy-ramdisk-ironic.kernel stack -scp stack@$UNDERCLOUD:discovery-ramdisk.initramfs stack -scp stack@$UNDERCLOUD:discovery-ramdisk.kernel stack -scp stack@$UNDERCLOUD:fedora-user.qcow2 stack -scp stack@$UNDERCLOUD:overcloud-full.initrd stack -scp stack@$UNDERCLOUD:overcloud-full.qcow2 stack -scp stack@$UNDERCLOUD:overcloud-full.vmlinuz stack +if [ -f stack ]; then mkdir stack; fi +scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:deploy-ramdisk-ironic.initramfs stack +scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:deploy-ramdisk-ironic.kernel stack +#scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:discovery-ramdisk.initramfs stack +#scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:discovery-ramdisk.kernel stack +scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:fedora-user.qcow2 stack +scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:overcloud-full.initrd stack +scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:overcloud-full.qcow2 stack +scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:overcloud-full.vmlinuz stack +scp -o "StrictHostKeyChecking no" stack@$UNDERCLOUD:instackenv.json instackenv-virt.json diff --git a/build/isolinux.cfg b/build/isolinux.cfg new file mode 100644 index 00000000..12848de7 --- /dev/null +++ b/build/isolinux.cfg @@ -0,0 +1,120 @@ +default vesamenu.c32 +timeout 600 + +display boot.msg + +# Clear the screen when exiting the menu, instead of leaving the menu displayed. +# For vesamenu, this means the graphical background is still displayed without +# the menu itself for as long as the screen remains in graphics mode. +menu clear +menu background splash.png +menu title CentOS 7 +menu vshift 8 +menu rows 18 +menu margin 8 +#menu hidden +menu helpmsgrow 15 +menu tabmsgrow 13 + +# Border Area +menu color border * #00000000 #00000000 none + +# Selected item +menu color sel 0 #ffffffff #00000000 none + +# Title bar +menu color title 0 #ff7ba3d0 #00000000 none + +# Press [Tab] message +menu color tabmsg 0 #ff3a6496 #00000000 none + +# Unselected menu item +menu color unsel 0 #84b8ffff #00000000 none + +# Selected hotkey +menu color hotsel 0 #84b8ffff #00000000 none + +# Unselected hotkey +menu color hotkey 0 #ffffffff #00000000 none + +# Help text +menu color help 0 #ffffffff #00000000 none + +# A scrollbar of some type? Not sure. +menu color scrollbar 0 #ffffffff #ff355594 none + +# Timeout msg +menu color timeout 0 #ffffffff #00000000 none +menu color timeout_msg 0 #ffffffff #00000000 none + +# Command prompt text +menu color cmdmark 0 #84b8ffff #00000000 none +menu color cmdline 0 #ffffffff #00000000 none + +# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message. + +menu tabmsg Press Tab for full configuration options on menu items. + +menu separator # insert an empty line +menu separator # insert an empty line + +label linux + menu label ^Install OPNFV CentOS 7 + menu default + kernel vmlinuz + append initrd=initrd.img inst.stage2=hd:LABEL=OPNFV\x20CentOS\x207\x20x86_64 + +#label check +# menu label Test this ^media & install CentOS 7 +# kernel vmlinuz +# append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet + +menu separator # insert an empty line + +# utilities submenu +menu begin ^Troubleshooting + menu title Troubleshooting + +label vesa + menu indent count 5 + menu label Install CentOS 7 in ^basic graphics mode + text help + Try this option out if you're having trouble installing + CentOS 7. + endtext + kernel vmlinuz + append initrd=initrd.img inst.stage2=hd:LABEL=OPNFV\x20CentOS\x207\x20x86_64 xdriver=vesa nomodeset quiet + +label rescue + menu indent count 5 + menu label ^Rescue a CentOS system + text help + If the system will not boot, this lets you access files + and edit config files to try to get it booting again. + endtext + kernel vmlinuz + append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rescue quiet + +label memtest + menu label Run a ^memory test + text help + If your system is having issues, a problem with your + system's memory may be the cause. Use this utility to + see if the memory is working correctly. + endtext + kernel memtest + +menu separator # insert an empty line + +label local + menu label Boot from ^local drive + localboot 0xffff + +menu separator # insert an empty line +menu separator # insert an empty line + +label returntomain + menu label Return to ^main menu + menu exit + +menu end diff --git a/build/opnfv-apex.spec b/build/opnfv-apex.spec new file mode 100644 index 00000000..fb010615 --- /dev/null +++ b/build/opnfv-apex.spec @@ -0,0 +1,40 @@ +Name: opnfv-apex +Version: 2.0 +Release: 1 +Summary: RDO Manager disk images for deployment + +Group: System Environment +License: Apache 2.0 +URL: https://gerrit.opnfv.org/gerrit/apex.git +Source0: opnfv-apex.tar.gz + +#BuildRequires: +#Requires: + +%description +These files are disk images used to launch the instack +libvirt VM and to load into the instack undercloud machine +to deploy an OpenStack overcloud. + +%prep +%setup -q + + +%build + +%install +mkdir -p %{buildroot}/usr/bin/ +cp ci/deploy.sh %{buildroot}/usr/bin/ + +mkdir -p %{buildroot}/var/lib/libvirt/images/ +cp build/instack.qcow2 %{buildroot}/var/lib/libvirt/images/ + +%files +/usr/bin/deploy.sh +/var/lib/libvirt/images/instack.qcow2 + +%changelog +* Fri Sep 25 2015 Dan Radez <dradez@redhatcom> - 2.0-1 +- Migrated to RDO Manager +* Fri Apr 24 2015 Dan Radez <dradez@redhatcom> - 0.1-1 +- Initial Packaging diff --git a/ci/build.sh b/ci/build.sh index 7a1ef523..9159f23e 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -24,7 +24,7 @@ fi;' EXIT usage () { cat << EOF -$0 Builds the Foreman OPNFV Deployment ISO +$0 Builds the Apex OPNFV Deployment Toolchain usage: $0 [-s spec-file] [-c cache-URI] [-l log-file] [-f Flags] build-directory @@ -41,6 +41,7 @@ OPTIONS: o s: Do nothing, succeed o f: Do nothing, fail o t: run build unit tests + o M: Use master branch code o i: run interactive (-t flag to docker run) o P: Populate a new local cache and push it to the (-c cache-URI) cache artifactory if -c option is present, currently file://, http:// and ftp:// are supported o d: Detatch - NOT YET SUPPORTED @@ -58,7 +59,7 @@ To reduce build time it uses build cache on a local or remote location. The cach - The git Commit-Id on the remote repos/HEAD defined in the spec file does not correspont with the Commit-Id for what the cache was built with. 3) A valid cache does not exist on the specified -c cache-base-URI. -The cache URI object name is foreman_cache-"md5sum(spec file)" +The cache URI object name is apex_cache-"md5sum(spec file)" Logging by default to console, but can be directed elsewhere with the -l option in which case both stdout and stderr is redirected to that destination. @@ -72,7 +73,7 @@ Return codes: - 200 Build failure Examples: -build -c http://opnfv.org/artifactory/foreman/cache -d ~/jenkins/genesis/foreman/ci/output -f ti +build -c http://opnfv.org/artifactory/apex/cache -d ~/jenkins/genesis/apex/ci/output -f ti NOTE: At current the build scope is set to the git root of the repository, -d destination locations outside that scope will not work EOF } @@ -87,8 +88,8 @@ BUILD_BASE=$(readlink -e ../build/) RESULT_DIR="${BUILD_BASE}/release" BUILD_SPEC="${BUILD_BASE}/config.mk" CACHE_DIR="cache" -LOCAL_CACHE_ARCH_NAME="foreman-cache" -REMOTE_CACHE_ARCH_NAME="foreman_cache-$(md5sum ${BUILD_SPEC}| cut -f1 -d " ")" +LOCAL_CACHE_ARCH_NAME="apex-cache" +REMOTE_CACHE_ARCH_NAME="apex_cache-$(md5sum ${BUILD_SPEC}| cut -f1 -d " ")" REMOTE_ACCESS_METHD=curl INCLUDE_DIR=../include # @@ -104,6 +105,7 @@ CACHE_TMP="${SCRIPT_DIR}/tmp" TEST_SUCCEED=0 TEST_FAIL=0 UNIT_TEST=0 +USE_MASTER=0 UPDATE_CACHE=0 POPULATE_CACHE=0 RECURSIV=0 @@ -210,6 +212,10 @@ for ((i=0; i<${#BUILD_FLAGS};i++)); do UNIT_TEST=1 ;; + M) + USE_MASTER=1 + ;; + i) INTERACTIVE=1 ;; @@ -345,6 +351,10 @@ else MAKE_ARGS+="UNIT_TEST=FALSE " fi +if [ ${USE_MASTER} -eq 1 ]; then + MAKE_ARGS+="USE_MASTER=-master " +fi + if [ ${INTERACTIVE} -eq 1 ]; then MAKE_ARGS+="INTERACTIVE=TRUE " else diff --git a/include/build.sh.debug b/include/build.sh.debug new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/include/build.sh.debug |