...
Code Block |
---|
|
root@dilos:~# zfs create -o mountpoint=/zones rpool/zones
root@dilos:~# mkdir /export/builds |
2. Добавьте пользователя admin:
Code Block |
---|
|
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
.
...
buildsUpdate the /etc/apt/sources.list file:
cat > /etc/apt/sources.list <<EOT
deb http://10.20.50.188/dilos4 du4-unstable main contrib non-free
deb http://10.20.50.188/dilos dg2-unstable main contrib non-free
deb-src http://10.20.50.188/dilos4 du4-unstable main contrib non-free
EOT
apt-get update |
2. Добавьте пользователя admin:
Code Block |
---|
|
catroot@dilos:~# > 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"
set special="/export/home"
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делайте его выполняемым:
Code Block |
---|
|
chmod 777 ./create_zone.shuseradd -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
или выполнить команду:
Code Block |
---|
|
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"
set special="/export/home"
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делайте его выполняемым:
Code Block |
---|
|
chmod 777 ./create_zone.sh |
Обновите файл /etc/apt/sources.list
:
Code Block |
---|
|
cat > /etc/apt/sources.list <<EOT
deb http://10.20.50.188/dilos4 du4-unstable main contrib non-free
deb http://10.20.50.188/dilos dg2-unstable main contrib non-free
deb-src http://10.20.50.188/dilos4 du4-unstable main contrib non-free
EOT
apt-get update
|
Info |
---|
Теперь Вы можете запустить его в формате ./create_zone.sh <zone-name> <zone-ip-domain> <zone-ip-node> , например!: ./create_zone.sh zone02 192.168.0 3
|
3. Подготовьте скрипт для получения зависимостей
...
Code Block |
---|
|
cat > make_repo.sh <<EOT
#!/bin/bash
#DEP_FILE=""
DEP_FILE="req.txt"
LOG_FILE=""
#LOG_FILE="/data/repo/repo.log"
function print_log {
if [[ "\$LOG_FILE" != "" ]]; then
echo "\$1" >> \$LOG_FILE
fi
}
## Loop for get build components dependencies
echo "" > list_to_check
echo "" > final_list
sed -i '/^[ \\t]*\$/d' list_component
echo "" >> list_component
echo "" > temp
if [[ "\$DEP_FILE" != "" ]]; then
echo "" > \$DEP_FILE
fi
while read comp; do
## Skip empty line
if [[ "" == "\$comp" ]]; then
continue
fi
echo -e "\\033[33m =====> Getting depends for \$comp... \\033[0m"
res=\$(apt-rdepends --build-depends --follow=DEPENDS \$comp)
echo "\$res" | grep 'Build-Depends:' > tmp
echo "\$res" | grep 'Build-Depends-Indep:' >> tmp
sed 's/^[ \\t]*Build-Depends:[ \\t]*//; s/^[ \\t]*Build-Depends-Indep:[ \\t]*//' tmp | sed 's/[ \\t]*(.*)[ \\t]*\$//' >> temp
rm -f tmp
if [[ "\$DEP_FILE" != "" ]]; then
sed "s/^/\$comp:/g" temp >> \$DEP_FILE
fi
done < list_component
## Preparation of initial list of dependencies
sort -u temp > list_to_check
sed -i '/^[ \\t]*\$/d' list_to_check
end=\$(cat list_to_check)
echo "" >> list_to_check
mkdir /data/repo/pkg/_tdir
apt-get -R /data/repo/pkg/_tdir update
## Loop for get packages dependencies
while [[ "\$end" != "" ]]; do
echo "" > temp
while read comp; do
## Skip empty line
if [[ "" == "\$comp" ]]; then
continue
fi
## Skip packages that are already checked for dependencies
res=\$(grep "^[ \\t]*\$comp[ \\t]*\\\$" final_list)
if [[ "" != "\$res" ]]; then
continue
fi
echo "=====> Getting depends for \$comp..."
apt-get -R /data/repo/pkg/_tdir install --dry-run \$comp | grep "^Inst " | sed 's/^Inst //; s/ .*\$//' > tmp
cat tmp >> temp
## Add checked package to the list of already checked packages
echo "\$comp" >> final_list
if [[ "\$DEP_FILE" != "" ]]; then
sed "s/^/\$comp:/g" tmp >> \$DEP_FILE
fi
done < list_to_check
## Remove repeated records from the list
sort -u temp > list_to_check
## Remove empty lines if any
sed -i '/^[ \\t]*\$/d' list_to_check
sed -i '/^[ \\t]*\$/d' final_list
end=\$(cat list_to_check)
echo "" >> list_to_check
done
## Loop for check and download dependencies
sed -i '/^[ \\t]*\$/d' final_list
sort -u final_list > temp
mv -f temp final_list
echo "" >> final_list
rm -f list_to_check tmp
while read pkg; do
if [[ "" == "\$pkg" ]]; then
continue
fi
echo -e "\\033[36m =====> Check \$pkg... \\033[0m"
## Check if a package exists
res=\$(apt-cache show \$pkg | grep "Package: \$pkg")
if [[ "\$res" != "" ]]; then
## Download existed package
echo -e "\\033[35m =====> Downloading package \$pkg... \\033[0m"
res=\$(apt-get -R /data/repo/pkg/_tdir download \$pkg | grep 'E:' | sed -n 's/E://')
if [[ "\$res" == "" ]]; then
print_log "\$pkg : OK"
else
echo -e "\\033[31;1;4m \$res \\033[0m"
print_log "\$pkg: \$res"
if [[ "\$DEP_FILE" != "" ]]; then
echo "=======================================" >> errors.log
echo "\$pkg: \$res" >> errors.log
grep ":\$pkg" \$DEP_FILE >> errors.log
fi
fi
else
## Put error message if package doesn't exist
echo -e "\\033[31;1;4m\$pkg: No package found \\033[0m"
print_log "\$pkg: No package found"
if [[ "\$DEP_FILE" != "" ]]; then
echo "=======================================" >> errors.log
echo "\$pkg: No package found" >> errors.log
grep ":\$pkg" \$DEP_FILE >> errors.log
fi
fi
done < final_list
## Downloading *.deb packages
echo -e "\\033[32;1m =====> Uploading *.deb packages... \\033[0m"
reprepro -b /data/repo --export=never -C main includedeb du4-prebuild /data/repo/pkg/*.deb
## Loop for download sources
while read component; do
if [[ "" == "\$component" ]]; then
continue
fi
echo -e "\\033[33;1m =====> Downloading sources for \$component... \\033[0m"
apt-get source --download-only \$component
continue
fi
echo -e "\\033[3233;1m =====> UploadingDownloading sources for \$component... \\033[0m"
reprepro apt-b /data/repo --export=never -C main includedsc du4-prebuild \$component*.dsc
rm -rf \$component*
done < list_component
## Creating index for local repoget source --download-only \$component
echo -e "\\033[32;1m =====> CreatingUploading indicessources for local repo\$component... \\033[0m"
reprepro -Vbb /data/repo --export=never du4-prebuildC main echoincludedsc du4-eprebuild "\\033[32;1m =====> DONE \\033[0m"
\$component*.dsc
rm -fr /data/repo/pkg/_tdir
if [[ "\$LOG_FILE" != "" ]]; then
echo "Downloaded package list is put to \$LOG_FILE"
fi
EOT
|
Сделайте этот файл исполняемым:
Code Block |
---|
|
chmod 777 ./make_repo.sh |
Если Вы хотите получить лог с ошибками, то в строку LOG_FILE=""
впишите имя файла, куда будет записываться сообщения о ходе выполнения, например:
Code Block |
---|
LOG_FILE="/data/repo/repo.log" |
4. Создайте зону для локального репозитория
Создайте зону и войдите в неё:
Code Block |
---|
|
cd ~
./create_zone.sh zonerepo 192.168.0 2
zlogin zonerepo
|
Info |
---|
Команды ниже выполняются в зоне. |
Обновите файл /etc/apt/sources.list
:
Code Block |
---|
|
cat > /etc/apt/sources.list <<EOT
deb http://10.20.50.188/dilos4 du4-unstable main contrib non-free
deb http://10.20.50.188/dilos dg2-unstable main contrib non-free
deb-src http://10.20.50.188/dilos4 du4-unstable main contrib non-free
EOT
apt-get update
rf \$component*
done < list_component
## Creating index for local repo
echo -e "\\033[32;1m =====> Creating indices for local repo... \\033[0m"
reprepro -Vb /data/repo export du4-prebuild
echo -e "\\033[32;1m =====> DONE \\033[0m"
rm -fr /data/repo/pkg/_tdir
if [[ "\$LOG_FILE" != "" ]]; then
echo "Downloaded package list is put to \$LOG_FILE"
fi
EOT
|
Сделайте этот файл исполняемым:
Code Block |
---|
|
chmod 777 ./make_repo.sh |
Если Вы хотите получить лог с ошибками, то в строку LOG_FILE=""
впишите имя файла, куда будет записываться сообщения о ходе выполнения, например:
Code Block |
---|
LOG_FILE="/data/repo/repo.log" |
4. Создайте зону для локального репозитория
Создайте зону и войдите в неё:
Code Block |
---|
|
cd ~
./create_zone.sh zonerepo 192.168.0 2
zlogin zonerepo
|
Info |
---|
Команды ниже выполняются в зоне. |
Установите в зоне необходимые пакеты для работы репозитория:
...
Expand |
---|
title | Запуск при помощи утилиты screen |
---|
|
Если Вы подключились по SSH и хотите отключиться от сессии SSH или отключить свой компьютер на время, то выполните следующую команду: Code Block |
---|
screen ./make_repo.sh |
Дальше в любой момент Вы можете нажать Ctrl-A d, после чего отключиться от сессии SSH. Затем когда Вы захотите вернуться, залогиньтесь снова по SSH и введите команду: |
...
Expand |
---|
title | Запуск при помощи утилиты screen |
---|
|
Если Вы подключились по SSH и хотите отключиться от сессии SSH или отключить свой компьютер на время, то выполните следующую команду: Code Block |
---|
screen ./build_all.sh |
Дальше в любой момент Вы можете нажать Ctrl-A d, после чего отключиться от сессии SSH. Затем когда Вы захотите вернуться, залогиньтесь снова по SSH и введите команду: |
...