Действия
Создайте и обновите новую VM
Создайте новую зону по умолчанию
Проверьте, что новая зона по умолчанию создалась правильно
Создайте зону для получения зависимостей и получите зависимости
Создайте новую зону для создания локального репозитория
Создайте новую зону для сборки компонент
Создайте новую зону для тестовой установки компонент
1. Создайте и обновите новую VM
Для создания новой VM в vmware/virtualbox/kvm воспользуйтесь этой инструкцией.
Для создания VM в vSphere SPB-LABS выполните шаги 1-5 из этой инструкции.
2. Залогиньтесь с правами root и создайте новую зону по умолчанию
Для KVM используйте следующие инструкции:
Для VM в vSphere:
Создайте mountpoint, куда будут монтироваться зоны:
root@dilos:~# zfs create -o mountpoint=/zones rpool/zones root@dilos:~# mkdir /export/builds
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. Для автоматизации создания зон и входа в них можно скопировать этот скрипт в файл create_zone.sh
или выполнить команду:
cat > create_zone.sh <<SCRIPT #!/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 echo "127.0.0.1 localhost.\${TYPE_ZONE} \${TYPE_ZONE}" >> /zones/\${TYPE_ZONE}/root/etc/hosts SCRIPT
Cделайте его выполняемым:
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. Получите зависимости
Обновите файл /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
Создайте папку для репозитория и перейдите туда:
mkdir -p /data/repo/pkg cd /data/repo/pkg
Чтобы нижеприведённый скрипт заработал, Вам нужно создать два файла (текущее содержимое их можно получить по ссылкам ниже):
list_component
- список компонент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 echo -e "\\033[33;1;4m =====> Getting depends for \$component... \\033[0m" 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 echo -e "\\033[32;1;4m =====> Installing \$pkg... \\033[0m" 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 echo -e "\\033[36;1;4m =====> Getting depends for \$pkg... \\033[0m" 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 echo -e "\\033[35;1;4m =====> Downloading \$pkg... \\033[0m" sudo apt-get download \$pkg done < tmp EOT
Сделайте файл исполняемым и запустите:
chmod 777 ./get_deps.sh ./get_deps.sh
4. Создайте зону для локального репозитория
Создайте зону и войдите в неё:
cd ~ ./create_zone.sh zonerepo 192.168.0 2 zlogin zonerepo
Команды ниже выполняются в зоне.
Обновите файл /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 apache2 debhelper dpkg-dev dh-exec -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: unstable 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
Workaround : Для создания локального репозитория нужен reprepro версии 5.3 и выше. В настоящее время его пока нет в DU2. До момента его появления там нужно выполнить следующие действия для его установки:
mv /etc/apt/sources.list /etc/apt/sources.list.bak
cat > /etc/apt/sources.list <<EOT
deb http://apt.dilos.org/dilos du3-unstable main contrib non-free
EOT
apt-get update && apt-get install reprepro -y
mv /etc/apt/sources.list.bak /etc/apt/sources.list
apt-get update
Выполните эти команды для добавления пакетов *.deb
в репозиторий:
cd /data/repo/pkg reprepro -Vb /data/repo export du2-prebuild reprepro -b /data/repo -C main includedeb du2-prebuild /data/repo/pkg/*.deb
Получите исходные файлы для локального репозитория, для чего создайте файл, например, get_sources.sh
и сделайте его исполняемым:
cat > get_sources.sh <<EOT #!/bin/bash while read component; do if [[ "" == "\$component" ]]; then continue fi apt-get source --download-only \$component reprepro -b /data/repo --export=never -C main includedsc du2-prebuild \$component*.dsc rm -rf \$component* done < /data/repo/pkg/list_component reprepro -Vb /data/repo export EOT chmod 777 ./get_sources.sh
Теперь запустите его:
./get_sources.sh exit
5. Создайте новую зону для сборки компонент
Создайте зону и войдите в неё:
./create_zone.sh zonebld 192.168.0 3 zlogin zonebld
Команды ниже выполняются в зоне.
Подготовьте зону для сборки компонент. Для этого скопируйте этот скрипт в файл, например, prepare.sh
или выполните команду :
cat > prepare.sh <<EOT #!/bin/bash WORKSPACE=/export/home/admin/du2 apt-get clean apt-get autoclean apt-get remove libiconv-dev -y APTLIST="/tmp/apt_sources.list" APTLISTETC="/etc/apt/sources.list" apt-get install -y acl iputils-ping kbd ksh scheduler system-data-console-fonts apt-get install -y traceroute gmake build-essential man-db po-debconf po4a debhelper apt-get install -y libx11-6 libxi6 libxtst6 liblua5.2-dev libnghttp2-dev libjansson-dev apt-get install -y jdupes libaprutil1-dev libbrotli-dev liblua5.2-dev libxml2-dev apt-get install -y mawk doxygen graphviz libdb-dev libgdbm-dev libsqlite3-dev libpq-dev apt-get install -y default-libmysqlclient-dev unixodbc-dev libssl-dev bison lsb-release apt-get install -y libcurl4-openssl-dev libcurl4-gnutls-dev libcurl4-nss-dev dh-exec apt-get install -y cmake docbook-xml docbook-xsl libgtest-dev liblz4-dev libbz2-dev apt-get install -y xsltproc w3m gperf guile-2.0-dev texinfo texlive cm-super-minimal /usr/bin/ln -fs libX11.so.6 /usr/lib/64/libX11.so.4 /usr/bin/ln -fs libXi.so.6 /usr/lib/64/libXi.so.5 /usr/bin/ln -fs libXtst.so.6 /usr/lib/64/libXtst.so.1 echo "" > \$APTLIST echo "deb [trusted=yes] http://192.168.0.2/dilos du2-prebuild main contrib non-free" >> \$APTLIST echo "deb-src [trusted=yes] http://192.168.0.2/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 BLD_PARALLEL="4" WORKSPACE=/export/home/admin/du2 while read COMP; do if [[ "" == "\$COMP" ]]; then continue fi BLD_RESULT="/data/repo/du/\$COMP" test -z "\$COMP" && exit 1 test -d \${BLD_RESULT} && rm -rf \${BLD_RESULT} # apt-get update && apt-get upgrade -y || exit 1 # apt-get install -y build-essential illumos-dev dpkg-dev gmake || exit 1 DEB_BUILD_OPTIONS="nocheck notest parallel=\${BLD_PARALLEL}" export DEB_BUILD_OPTIONS test -d \${WORKSPACE}/\$COMP && rm -rf \${WORKSPACE}/\$COMP mkdir -p \${WORKSPACE}/\$COMP cd \${WORKSPACE}/\$COMP apt-get build-dep -y \$COMP || exit 1 #DEB_BUILD_OPTIONS="nocheck notest parallel=4" apt-get source --compile \$COMP || exit 1 apt-get source --compile \$COMP || exit 1 mkdir -p \${BLD_RESULT} cp -ax *.deb \${BLD_RESULT}/ || exit 1 cp -ax *.changes \${BLD_RESULT}/ || exit 1 cp -ax *.buildinfo \${BLD_RESULT}/ || exit 1 done < /data/repo/pkg/list_component EOT
Сделайте файл выполняемым и запустите его:
chmod 777 ./build_all.sh ./build_all.sh
После сборки компонент Вы можете проверить их установку в отдельной новой зоне.