Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 60 Next »

Действия

  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-prebuild main contrib non-free
deb http://apt.dilos.org/dilos du2-prebuild main contrib non-free
deb-src http://apt.dilos.org/dilos du2-prebuild 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 и сделайте его исполняемым:

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 oracle-jdk
EOT
chmod 777 ./prepare.sh

Запустите:

./prepare.sh

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

Эти переменные зарегистрированы в Jenkins:

  1. {WORKSPACE}

  2. {COMPONENT}

  3. {JOBS}

В нашем случае в скрипте нужно объявить три переменные

Создайте файл, например, build_all.sh и сделайте его выполняемым:

cat > build_all.sh <<EOT
#!/bin/bash
COMPONENT=\$1;
WORKDIR=\$2
WORKSPACE=\${WORKDIR}/\$3;
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

test -L /usr/lib/jvm/default-java || sudo -E /usr/bin/ln -fs oracle-default-jdk /usr/lib/jvm/default-java
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

echo '===================== BUILD \${COMPONENT} =================='
test -d \${WORKSPACE}/components/\${COMPONENT} || exit 1
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
echo '===================== DONE =================='
EOT
chmod 777 ./build_all.sh

Запустите его:

./build_all.sh lynx /export/home/admin du2 4

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

  • No labels