/
Как построить компоненты локально

Как построить компоненты локально

Действия

  1. Создайте и обновите новую VM

  2. Создайте новую зону по умолчанию

  3. Проверьте, что новая зона по умолчанию создалась правильно

  4. Создайте зону для получения зависимостей и получите зависимости

  5. Создайте новую зону для создания локального репозитория

  6. Создайте новую зону для сборки компонент

  7. Создайте новую зону для тестовой установки компонент

1. Создайте и обновите новую VM

Для создания новой VM в vmware/virtualbox/kvm воспользуйтесь этой инструкцией.

Для создания VM в vSphere SPB-LABS выполните шаги 1-5 из этой инструкции.

2. Залогиньтесь с правами root и создайте новую зону по умолчанию

Для KVM используйте следующие инструкции:

  1. Настройка сети

  2. Создание зоны по умолчанию

Для VM в vSphere:

  1. Создайте mountpoint, куда будут монтироваться зоны:

root@dilos:~# zfs create -o mountpoint=/zones rpool/zones root@dilos:~# mkdir /export/builds root@dilos:~# apt install reprepro

2. Добавьте пользователя admin:

root@dilos:~# useradd -m -g staff admin root@dilos:~# passwd admin Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully root@dilos:~# echo "admin ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers.d/admin

3. Выполните Инструкцию по настройке сети до шага, на котором создаётся зона zone01.

4. Создайте зону default, выполнив следующие команды:

root@dilos:~# cat > defzone.cmd <<EOT create set zonename=default set zonepath=/zones/default set autoboot=false set ip-type=exclusive add net set physical=iz1 set global-nic=vsw0 add property (name=ip,value="192.168.0.1") add property (name=gateway,value="192.168.0.254") add property (name=netmask,value="255.255.255.0") add property (name=primary,value="true") end add attr set name=resolvers set type=string set value=8.8.8.8 end add fs set dir=/export/home/admin set special=/export/home/admin set type=lofs end add fs set dir=/export/builds set special=/export/builds set type=lofs end commit verify exit EOT zonecfg -z default -f defzone.cmd

Для установки зоны по умолчанию выполните:

zoneadm -z default install

Для автоматизации создания остальных зон и входа в них можно использовать скрипт из Jenkins:

#!/bin/bash TYPE_ZONE=$1 IP=$2 SER=$3 cat > ${HOME}/${TYPE_ZONE}.cmd <<EOT create set zonename=${TYPE_ZONE} set zonepath=/zones/${TYPE_ZONE} set autoboot=false set ip-type=exclusive add net set physical=iz${SER} set global-nic=vsw0 add property (name=ip,value="${IP}.${SER}") add property (name=gateway,value="${IP}.254") add property (name=netmask,value="255.255.255.0") add property (name=primary,value="true") end add attr set name=resolvers set type=string set value=8.8.8.8 end add fs set dir="/export/home/admin" set special="/export/home/admin" set type="lofs" end add fs set dir="/export/builds" set special="/export/builds" set type="lofs" end add fs set dir="/data/repo" set special="/data/repo" set type="lofs" end verify commit exit EOT zonecfg -z ${TYPE_ZONE} -f ${HOME}/${TYPE_ZONE}.cmd zoneadm -z ${TYPE_ZONE} install zoneadm -z ${TYPE_ZONE} boot sleep 10 zlogin ${TYPE_ZONE}

Для этого скопируйте этот код в файл, например, create_zone.sh и сделайте его выполняемым:

chmod 777 ./create_zone.sh

 

Теперь Вы можете запустить его в формате ./create_zone.sh <zone-name> <zone-ip-domain> <zone-ip-node> , например!:

./create_zone.sh zone02 192.168.0 3

3. Создайте зону для получения зависимостей и получите зависимости

Создайте папку для репозитория:

mkdir -p /data/repo mkdir -p /data/repo/pkg

Создайте зону и войдите в неё:

./create_zone.sh zonedep 192.168.0 2

Команды ниже выполняются в зоне.

Обновите файл /etc/apt/sources.list :

cat > /etc/apt/sources.list <<EOT deb http://apt.dilos.org/dilos dg2-unstable main contrib non-free deb http://apt.dilos.org/dilos du2-unstable main contrib non-free EOT apt-get update

Для удобства сбор зависимостей выполняется в директории /data/repo/pkg:

cd /data/repo/pkg

Чтобы нижеприведённый скрипт заработал, Вам нужно создать два файла (текущее содержимое их можно получить по ссылкам ниже):

  1. list_component - список компонент

  2. list_pkg_sec - список для построения компонент

Теперь получите зависимости. Для этого скопируйте этот скрипт в файл, например, get_deps.sh или выполните следующую команду:

cat > get_deps.sh <<EOT #!/bin/bash #File create for save temporary values >list_one >list_two >pkg_dep >tmp0 >tmp1 >tmp function get_depends() { ## This function get depends for build component [ -z "\$(grep -f pkg_dep <<< \$1)" ] && apt-get install -s \$1 2>/dev/null | grep Inst | awk '{print \$2}'| sort -u && echo \$pkg >> pkg_dep } function all_dep() { ## This recursion function for get recursion depends for build conmponents for pkg in \$@; do all_dep \$(get_depends \$pkg) done } ## Loop for get depends for build components while read component; do if [[ "" == "\$component" ]]; then continue fi apt-get --dry-run build-dep \$component 2>/dev/null | grep Inst | awk '{print \$2}' >> list_one done < list_component while read pkg; do if [[ "" == "\$pkg" ]]; then continue fi apt-get install -s \$pkg 2>/dev/null | grep Inst | awk '{print \$2}' >> list_two done < list_pkg_sec cat list_one >> tmp0 cat list_two >> tmp0 cat list_component >> tmp0 cat list_pkg_sec >> tmp0 cat tmp0 | sort -u >> tmp1 ## Loop for get depends, use function 'all_dep' while read pkg; do if [[ "" == "\$pkg" ]]; then continue fi all_dep \$pkg >/dev/null done < tmp1 cat pkg_dep >> tmp1 cat tmp1 | sort -u >> tmp while read pkg; do if [[ "" == "\$pkg" ]]; then continue fi sudo apt-get download \$pkg done < tmp EOT

Сделайте его исполняемым и запустите:

chmod 777 ./get_deps.sh ./get_deps.sh exit

4. Создайте новую зону для создания локального репозитория

Создайте зону и войдите в неё:

./create_zone.sh zonerepo 192.168.0 3

Команды ниже выполняются в зоне.

Обновите файл /etc/apt/sources.list:

cat > /etc/apt/sources.list <<EOT deb http://apt.dilos.org/dilos dg2-unstable main contrib non-free deb http://apt.dilos.org/dilos du2-unstable main contrib non-free deb-src http://apt.dilos.org/dilos du2-unstable main contrib non-free EOT apt-get update

Установите в зоне необходимые пакеты для работы репозитория:

apt-get install reprepro -y apt-get install apache2 -y apt-get install dpkg-dev -y ln -s /data/repo /var/www/html/dilos svcadm enable http svcs http

Создайте директорию, где у вас буду лежать конфигурационные файлы для репозитория:

mkdir -p /data/repo/conf

и создайте конфигурационный файл репозитория:

echo -n "Codename: du2-prebuild Suite: prebuild Version: 2.0 Origin: DilOS Label: DilOS prebuild Description: DilOS Prebuild Repository Architectures: solaris-i386 solaris-sparc source Components: main contrib non-free ##SignWith: default DebIndices: Packages Release . .gz .bz2 .xz DscIndices: Sources Release . .gz .bz2 .xz Contents: . .gz .bz2 .xz " > /data/repo/conf/distributions

Выполните эти команды для добавления пакетов *.deb в репозиторий:

reprepro -b /data/repo -C main includedeb du2-prebuild /data/repo/pkg/*.deb reprepro -Vb /data/repo export du2-prebuild

Получите исходные файлы для локального репозитория, для чего создайте файл, например, get_sources.sh и сделайте его исполняемым (для работы скрипта требуется установленный пакет dpkg-dev):

cat > get_sources.sh <<EOT #!/bin/bash COMPONENTS='main' CODENAME='du2-prebuild' while read component; do if [[ "" == "\$component" ]]; then continue fi apt-get source --download-only \$component reprepro -b /data/repo -C \$COMPONENTS includedsc \$CODENAME \$component*.dsc rm -rf \$component done < /data/repo/pkg/list_component EOT chmod 777 ./get_sources.sh

Теперь запустите его:

./get_sources.sh exit

5. Создайте новую зону для сборки компонент

Создайте зону и войдите в неё:

./create_zone.sh zonebld 192.168.0 4

Команды ниже выполняются в зоне.

Подготовьте зону для сборки компонент. Для этого создайте файл, например, prepare.sh и сделайте его исполняемым:

cat > prepare.sh <<EOT apt-get clean apt-get autoclean apt-get remove libiconv-dev -y APTLIST="/tmp/apt_sources.list" APTLISTETC="/etc/apt/sources.list" echo "" > \$APTLIST echo "deb [trusted=yes] http://192.168.0.3/dilos du2-prebuild main contrib non-free" >> \$APTLIST echo "deb-src [trusted=yes] http://192.168.0.3/dilos du2-prebuild main contrib non-free" 2>/dev/null >> \$APTLIST mv \$APTLIST \$APTLISTETC apt-get update -y test -f /var/lib/dpkg/lock && rm -f /var/lib/dpkg/lock test -f /var/cache/apt/archives/lock && rm -f /var/cache/apt/archives/lock dpkg --configure -a rm -rf \${WORKSPACE} && mkdir -p \${WORKSPACE} apt-get upgrade -y env DEBIAN_FRONTEND=noninteractive apt-get install -y -f env DEBIAN_FRONTEND=noninteractive apt-get install -y git openssh-server EOT chmod 777 ./prepare.sh

Запустите:

./prepare.sh

6. Постройте компоненты

Скопируйте этот скрипт в файл, например, build_all.sh или выполните команду:

cat > build_all.sh <<EOT #!/bin/bash WORKDIR=/export/home/admin; WORKSPACE=\${WORKDIR}/du2; JOBS=4; umask 022 export CCACHE_DISABLE="true" echo '===================== ENVIRONMENT ==================' env echo '===================== GET SOURCES ==================' test -L /etc/dpkg/origins/default || sudo ln -fs dilos /etc/dpkg/origins/dilos test -f /usr/bin/gmake || sudo ln -fs make /usr/bin/gmake git clone https://bitbucket.org/dilos/du2.git \${WORKSPACE} echo '===================== GET PACKAGES ==================' cd \${WORKDIR} export DEB_BUILD_OPTIONS="parallel= 2" sudo -E apt-get update sudo apt-get install -y acl iputils-ping kbd ksh scheduler system-data-console-fonts traceroute gmake build-essential DEBIAN_FRONTEND=nkvmoninteractive sudo -E apt-get install -f -y DEBIAN_FRONTEND=noninteractive sudo -E apt-get upgrade -y if ! getent group shadow | grep -q '^shadow:[^:]*:42'; then sudo -E groupadd -g 42 shadow fi sudo -E apt-get install -y libx11-6 libxi6 libxtst6 sudo -E /usr/bin/ln -fs libX11.so.6 /usr/lib/64/libX11.so.4 sudo -E /usr/bin/ln -fs libXi.so.6 /usr/lib/64/libXi.so.5 sudo -E /usr/bin/ln -fs libXtst.so.6 /usr/lib/64/libXtst.so.1 while read COMPONENT; do if [[ "" == "\$COMPONENT" ]]; then continue fi echo '===================== BUILD \${COMPONENT} ==================' cd "\${WORKSPACE}/components/\${COMPONENT}" sudo -E mkdir -p /data/repo/\${COMPONENT} BLD_COMPONENT=\${COMPONENT}-\$(date '+%Y-%m-%d') BUILD_RESULT=/data/repo/\${COMPONENT} export COMPONENT_RESULT=\`echo \${BLD_COMPONENT} | sed -e 's;/;-;'\` sudo -E /usr/bin/rm -rf \${BUILD_RESULT}/du/\${COMPONENT_RESULT} mkdir -p \${BUILD_RESULT}/du/\${COMPONENT_RESULT} 2>/dev/null sudo -E gmake JOBS=\${JOBS} WS_DEBS=\${BUILD_RESULT}/du/\${COMPONENT_RESULT} deb RES=\$? echo '===================== BUILD DEBCLOBBER ==================' sudo -E gmake debclobber if (( \$RES > 0 )); then echo "===================== ERROR : \${RES} ==================" exit 1 fi done < /data/repo/pkg/list_component echo '===================== DONE ==================' EOT

Сделайте его исполняемым и запустите:

chmod 777 ./build_all.sh ./build_all.sh

После сборки компонент Вы можете проверить их установку в отдельной новой зоне.

 

Related content