...
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 2>&1 | /usr/bin/tee -z \a /var/tmp/${TYPE_ZONE} install && -bts.log zoneadm -z \${TYPE_ZONE} boot echo "127.0.0.1 localhost.\install 2>&1 | /usr/bin/tee -a /var/tmp/${TYPE_ZONE} \-bts.log zoneadm -z ${TYPE_ZONE} boot 2>&1 | /usr/bin/tee -a /var/tmp/${TYPE_ZONE}-bts.log echo "127.0.0.1 localhost.${TYPE_ZONE} ${TYPE_ZONE}" >> /zones/\${TYPE_ZONE}/root/etc/hosts SCRIPT |
...
res=$(grep -e 'WARNING:' -e 'warning:' -e 'W:' -e 'error:' -e 'E:' -e 'cannot' /var/tmp/${TYPE_ZONE}-bts.log | sort -u)
if [[ "$res" == "" ]]; then
echo " =========== Zone ${TYPE_ZONE} is successfully created and ready to use ============="
else
echo " =========== Zone ${TYPE_ZONE} creation log ============="
echo "$res"
echo "$res" | sed '/W: --force-yes is deprecated/d; /\/man\//d'
if [[ "$res" != "" ]]; then
echo " ========================================================"
echo "Please stop and report about zone bootstrap errors!"
fi
fi
SCRIPT
|
Make it executable:
Code Block | ||
---|---|---|
| ||
chmod 777 ./create_zone.sh |
Info |
---|
Now you will be able to run it with the format of
|
...
Code Block | ||
---|---|---|
| ||
cat > make_repo.sh <<EOT
#!/bin/bash
#DEP_FILE=""
DEP_FILE="req.txt"
LOG_FILE=""
#LOG_FILE="/export/home/admin/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 "publicsuffix" > 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/ .*\$//' >> 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 < 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
rmdir --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
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 du2-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
echo -e "\\033[32;1m =====> Uploading sources for \$component... \\033[0m"
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 |
---|
LOG_FILE="/export/home/admin/repo.log" |
4. Create a zone for local
...
repository
Create the new zone and enter it:
...
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 : For local repository creation you need reprepro of version 5.3 or higher. For the moment it is absent in DU2. So, till it is not there you need to get it from another place with help of the following commands:
|
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
|
5. Create the local repository:
...
Expand | ||||
---|---|---|---|---|
| ||||
If you are connected by SSH and would like to turn off SSH session or even temporary turn off your computer, then you have enter the following command for tests running:
Then you can in any time press Ctrl-A d and after that close your SSH session. When you would like to get back, login again to SSH please and enter the command:
|
...
Code Block | ||
---|---|---|
| ||
cat > build_all.sh <<EOT #!/bin/bash BLD_PARALLEL="4" WORKSPACE=/export/home/admin/du2 #STOP_ON_ERROR=1 STOP_ON_ERROR=0 #GCC_COMPILER="gcc-6" GCC_COMPILER="" # Build a component: \$1 - component name, \$2 - stop-on-error flag function build_component {_component { local START_TIME local END_TIME local BLD_RESULT BLD_RESULT="/data/repo/du/\$1" test -z "\$1" && exit 1 test -d \${BLD_RESULT} && rm -rf \${BLD_RESULT} DEB_BUILD_OPTIONS="nocheck notest parallel=\${BLD_PARALLEL}" export DEB_BUILD_OPTIONS test -d \${WORKSPACE}/\$1 && rm -rf \${WORKSPACE}/\$1 mkdir -p \${WORKSPACE}/\$1 cd \${WORKSPACE}/\$1 START_TIME=\$(date +%s) echo "====================== \$1 ======================" | tee berror.log if [[ \$2 -eq 0 ]]; then apt-get build-dep -y \$1 >> berror.log || return 0 2>&1 apt-get source --compile \$1 >> berror.log || return 0 2>&1 else apt-get build-dep -y \$1 >> berror.log || return 1 2>&1 apt-get source --compile \$1 >> berror.log || return 1 2>&1 fi fi END_TIME=\$(date +%s) printf "%06d %s\\n" \$((\${END_TIME} - \${START_TIME})) \$1 >> \${WORKSPACE}/tmpbt.log 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 } if [[ "\$GCC_COMPILER" != "" ]]; then echo "====================== Building GCC ======================" build_component \$GCC_COMPILER 1 if [[ \$? -eq 1 ]]; then exit 1 fi dpkg -i \$WORKSPACE/\$GCC_COMPILER/*.deb fi if [[ ! -f \$WORKSPACE/build_components ]]; then cp /data/repo/pkg/list_component \$WORKSPACE/build_components fi rm -f tmpbt.log while read COMP; do if [[ "" == "\$COMP" ]] || [[ "\$GCC_COMPILER" == "\$COMP" ]]; then continue fi build_component \$COMP \$STOP_ON_ERROR if [[ \$? -eq 1 ]]; then exit 1 fi done < /data/repo/pkg/list_component done < \$WORKSPACE/build_components sort tmpbt.log > build_components sed -i 's/^[0-9]* //g' build_components EOT |
If you’d like stop process on the first error, put 1 the STOP_ON_ERROR variable STOP_ON_ERROR=1
. In other case it will build all components one-by-one regardless of errors. And in every component folder theberror.log
file will be created, where build errors will be stored.
...
Expand | ||||
---|---|---|---|---|
| ||||
If you are connected by SSH and would like to turn off SSH session or even temporary turn off your computer, then you have enter the following command for tests running:
Then you can in any time press Ctrl-A d and after that close your SSH session. When you would like to get back, login again to SSH please and enter the command:
|
...
Code Block | ||
---|---|---|
| ||
cat > check_fails.sh <<EOT #!/bin/bash #WDIR=\$1 WDIR=/export/home/admin/du2 subdirs=\$(ls -1 \$WDIR) for dr in \$subdirs do res=\$(tail -1 \$WDIR/\$dr/berror.log) if [[ "\$(echo \$res | grep 'Fetched')" == "" ]]; then cat \$WDIR/\$dr/berror.log fi done echo ""\$dr :echo \$res" fi done"================= Local repo sources" cat /etc/apt/sources.list EOT chmod 777 ./check_fails.sh ./check_fails.sh |
...