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 52 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

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

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

  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
  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

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
apt-get install -y libgtk-3-dev libdaemon-dev libdbus-1-dev python-all-dev python-gdbm
apt-get install -y python-dbus python-gi-dev gobject-introspection libgirepository1.0-dev
apt-get install -y xmltoman intltool sgmltools-lite libdebconfclient0-dev texi2html
apt-get install -y sharutils man2html libkrb5-dev libgeoip-dev libpipeline-dev 
apt-get install -y python-setuptools python3-all-dev python3-setuptools
/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

cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb [trusted=yes] http://192.168.0.2/dilos du2-prebuild main contrib non-free" >> /etc/apt/sources.list
echo "deb-src [trusted=yes] http://192.168.0.2/dilos du2-prebuild main contrib non-free" 2>/dev/null >> /etc/apt/sources.list
cp /etc/apt/sources.list /etc/apt/sources.list.dev

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}

  if [[ "$COMP" == "bind9" ]]; then
    cp /etc/apt/sources.list.dev /etc/apt/sources.list
    apt-get update
    apt-get install -y libssl1.0-dev
    cp /etc/apt/sources.list.bak /etc/apt/sources.list
    apt-get update
  fi
#  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

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

  • No labels