...
Создайте и обновите новую VM
Подготовьте окружение для создания новых зон
Получите зависимости Подготовьте скрипт для получения зависимостей компонент
Создайте зону для локального репозитроия
Создайте в этой зоне локальны локальный репозиторий
Создайте новую зону для сборки компонент
Соберите компоненты
...
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/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 |
...
Info |
---|
Теперь Вы можете запустить его в формате
|
3.
...
Подготовьте скрипт для получения зависимостей
Создайте папку для репозитория и перейдите туда:
Code Block | ||
---|---|---|
| ||
catmkdir >-p /etcdata/aptrepo/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 |
...
pkg
cd /data/repo/pkg
|
Чтобы нижеприведённый скрипт заработал, Вам нужно создать файл list_component
, содержимое которого можно взять отсюда.
Здесь же создайте скрипт для получения исходников и их зависимостей. Для этого скопируйте этот скрипт в файл, например, make_repo.sh
или выполните следующую команду:
Code Block | ||
---|---|---|
| ||
mkdircat -p /data/repo/pkg cd /data/repo/pkg |
Чтобы нижеприведённый скрипт заработал, Вам нужно создать файл list_component
, содержимое которого можно взять отсюда.
Здесь же создайте скрипт для получения исходников и их зависимостей. Для этого скопируйте этот скрипт в файл, например, make_repo.sh
или выполните следующую команду:
Code Block | ||
---|---|---|
| ||
cat > make_repo.sh <<EOT #!/bin/bash #DEP_> make_repo.sh <<EOT #!/bin/bash #DEP_FILE="" DEP_FILE="req.txt" LOG_FILE="" #LOG_FILE="errors.log" function print_log { if [[ "\$LOG_FILE" != "" ]]; then echo "\$1" >> \$LOG_FILE fi } ## Loop for get build components dependencies echo "" > list_to_check echo "publicsuffix" > final_list sed -i '/^[ \\t]*\$/d' list_component echo "" >> list_component echo "" > temp 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/ .*\$//' >> temp ##apt-cache## depends --no-pre-depends --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances apt-cache depends --no-pre-depends --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances \$comp | sed 's/^[ \t|]*Depends: //; /</d; s/^[ \\t]*//' | sed 's/^[ \\t|]*Depends: //; /</d; s/^[ \\t]*//' >> temp ## Add checked package to the list of already checked packages echo "\$comp" >> final_list if [[ "\$DEP_FILE" != "" ]]; then sed "s/^/\$comp:/g" temp >> \$DEP_FILE fi done < Add checked package to the list of already checked packages echo "\$comp" >> final_list if [[ "\$DEP_FILE" != "" ]]; then sed "s/^/\$comp:/g" temp >> \$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 ## Remove repeated records from the list sort -u temp >-i '/^[ \\t]*\$/d' final_list end=\$(cat list_to_check) echo "" >> list_to_check done ## Remove empty lines if any Loop for check and download dependencies rmdir -p --ignore-fail-on-non-empty /data/repo/pkg/_tdir sed -i '/^[ \\t]*\$/d' list_to_check sed -i '/^[ \\t]*\$/d'final_list sort -u final_list > end=\$(cat list_to_check) temp mv -f temp final_list echo "" >> final_list rm -f list_to_check donewhile read ##pkg; Loopdo for check andif download[[ dependencies"" rmdir -p --ignore-fail-on-non-empty /data/repo/pkg/_tdir sed -i '/^[ \\t]*\$/d' final_list sort -u final_list > temp mv -f temp final_list echo "" >> final_list rm -f list_to_check while read pkg; do== "\$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" !== "\$pkg" ]]; then ## continueDownload existed package fi echo -e "\\033[36m35m =====> Downloading Checkpackage \$pkg... \\033[0m" ## Check if a package exists res=\$(apt-cache showget -R /data/repo/pkg/_tdir download \$pkg | grep "Package: \$pkg"'E:' | sed -n 's/E://') if [[ "\$res" !== "" ]]; then print_log "\$pkg : OK" ## Downloadelse existed package echo -e "\\033[35m =====> Downloading package \$pkg...31;1;4m \$res \\033[0m" res=\$(apt-get -R /data/repo/pkg/_tdir download \$pkg | grep 'E:' | sed -n 's/E://') print_log "\$pkg: \$res" if [[ "\$res$DEP_FILE" !== "" ]]; then print_log "\$pkg : OK" elseecho "=======================================" >> errors.log echo -e "\\033[31;1;4m$pkg: \$res \\033[0m"" >> errors.log print_log " grep ":\$pkg: \$res" " \$DEP_FILE >> errors.log fi fi else if [[ "\$DEP_FILE" != "" ]]; then ## 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: \$res No package found" >> errors.log grep ":\$pkg" \$DEP_FILE >> errors.log fi fi done < else final_list ## PutDownloading error message if package doesn't exist *.deb packages echo -e "\\033[31;1;4m\$pkg: No package found32;1m =====> Uploading *.deb packages... \\033[0m" reprepro -b /data/repo --export=never -C main includedeb du4-prebuild /data/repo/pkg/*.deb ## Loop print_log "\$pkg: No package found" for download sources while read component; do if [[ "\$DEP_FILE" !== "\$component" ]]; then continue fi echo -e "\\033[33;1m =======================================" >> errors.log echo "\$pkg: No package found" >> errors.log grep ":\$pkg" \$DEP_FILE >> errors.log fi fi done < final_list ## Downloading *.deb packages > Downloading sources for \$component... \\033[0m" apt-get source --download-only \$component echo -e "\\033[32;1m =====> Uploading sources *.deb packagesfor \$component... \\033[0m" reprepro -b /data/repo --export=never -C main includedebincludedsc du2du4-prebuild /data/repo/pkg/\$component*.debdsc ## Loop for download sources while read component; do if [[ "" == "\$component" ]]; then continue fi rm -rf \$component* done < list_component ## Creating index for local repo echo -e "\\033[3332;1m =====> DownloadingCreating sourcesindices for local \$componentrepo... \\033[0m" reprepro apt-get source --download-only \$component Vb /data/repo export du4-prebuild echo -e "\\033[32;1m =====> Uploading sources for \$component...DONE \\033[0m" if reprepro -b /data/repo --export=never -C main includedsc du2-prebuild \$component*.dsc rm -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 du2-prebuild echo -e "\\033[32;1m =====> DONE \\033[0m" if [[ "\$LOG_FILE" != "" ]]; then echo "Downloaded package list is put to \$LOG_FILE" fi EOT |
Сделайте этот файл исполняемым:
Code Block | ||
---|---|---|
| ||
chmod 777 ./make_repo.sh |
...
[[ "\$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 | ||
---|---|---|
| ||
cat > /etc/apt/sources.list <<EOT deb http://apt10.20.dilos60.org188/dilosdilos4 dg2du4-unstable main contrib non-free deb http://apt10.20.dilos50.org188/dilos du2dg2-unstable main contrib non-free deb-src http://apt10.20.dilos60.org188/dilosdilos4 du2du4-unstable main contrib non-free EOT apt-get update |
...
Code Block | ||
---|---|---|
| ||
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
| ||
Note | ||
Workaround : Для создания локального репозитория нужен reprepro версии 5.3 и выше. В настоящее время его пока нет в DU2. До момента его появления там нужно выполнить следующие действия для его установки:
apt-get update Release . .gz .bz2 .xz
DscIndices: Sources Release . .gz .bz2 .xz
Contents: . .gz .bz2 .xz
" > /data/repo/conf/distributions
|
5. Выполните эти команды для добавления пакетов и исходных файлов в репозиторий:
...
Expand | ||||
---|---|---|---|---|
| ||||
Если Вы подключились по SSH и хотите отключиться от сессии SSH или отключить свой компьютер на время, то выполните следующую команду:
Дальше в любой момент Вы можете нажать Ctrl-A d, после чего отключиться от сессии SSH. Затем когда Вы захотите вернуться, залогиньтесь снова по SSH и введите команду:
|
...
Expand | ||||
---|---|---|---|---|
| ||||
Если Вы подключились по SSH и хотите отключиться от сессии SSH или отключить свой компьютер на время, то выполните следующую команду:
Дальше в любой момент Вы можете нажать Ctrl-A d, после чего отключиться от сессии SSH. Затем когда Вы захотите вернуться, залогиньтесь снова по SSH и введите команду:
|
...