...
Создайте и обновите новую VM
Подготовьте окружение для создания новых зон
Получите зависимости Подготовьте скрипт для получения зависимостей компонент
Создайте зону для локального репозитроия
Создайте в этой зоне локальны локальный репозиторий
Создайте новую зону для сборки компонент
Соберите компоненты
...
Code Block | ||
---|---|---|
| ||
root@dilos:~# zfs create -o mountpoint=/zones rpool/zones
root@dilos:~# mkdir /export/builds |
2. Добавьте пользователя adminUpdate the /etc/apt/sources.list
file:
Code Block | ||
---|---|---|
| ||
root@dilos:~#cat 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=> /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 | ||
---|---|---|
| ||
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 |
...
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}" >> /zones/\ boot 2>&1 | /usr/bin/tee -a /var/tmp/${TYPE_ZONE}/root/etc/hosts SCRIPT |
Cделайте его выполняемым:
Code Block | ||
---|---|---|
| ||
chmod 777 ./create_zone.sh |
Info |
---|
Теперь Вы можете запустить его в формате
|
3. Получите зависимости
Обновите файл /etc/apt/sources.list
:
Code Block | ||
---|---|---|
| ||
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
|
Создайте папку для репозитория и перейдите туда:
Code Block | ||
---|---|---|
| ||
mkdir -p /data/repo/pkg
cd /data/repo/pkg
|
Чтобы нижеприведённый скрипт заработал, Вам нужно создать файл list_component
, содержимое которого можно взять отсюда.
Здесь же создайте скрипт для получения исходников и их зависимостей. Для этого скопируйте этот скрипт в файл, например, make_repo.sh
или выполните следующую команду:
Code Block | ||
---|---|---|
| ||
cat > 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-bts.log echo "127.0.0.1 localhost.${TYPE_ZONE} ${TYPE_ZONE}" >> /zones/${TYPE_ZONE}/root/etc/hosts 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 |
Cделайте его выполняемым:
Code Block | ||
---|---|---|
| ||
chmod 777 ./create_zone.sh |
Info |
---|
Теперь Вы можете запустить его в формате
|
3. Подготовьте скрипт для получения зависимостей
Создайте папку для репозитория и перейдите туда:
Code Block | ||
---|---|---|
| ||
mkdir -p /data/repo/pkg
cd /data/repo/pkg
|
Чтобы нижеприведённый скрипт заработал, Вам нужно создать файл list_component
, содержимое которого можно взять отсюда.
Здесь же создайте скрипт для получения исходников и их зависимостей. Для этого скопируйте этот скрипт в файл, например, make_repo.sh
или выполните следующую команду:
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 sedecho "s/^/\$comp:/g\$1" temp >> \$DEP$LOG_FILE fi done < list_component } ## PreparationLoop offor initialget listbuild ofcomponents dependencies sortecho -u"" temp > list_to_check sedecho -i "" > final_list sed -i '/^[ \\t]*\$/d' list_to_check end=\$(catcomponent echo "" >> list_to_check)component 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 > temp if [[ "\$DEP_FILE" != "" ]]; then echo "" > temp \$DEP_FILE fi while read comp; do ## Skip empty line if [[ "" == "\$comp" ]]; then continue fi fi echo -e ## Skip packages that are already checked for dependencies "\\033[33m =====> Getting depends for \$comp... \\033[0m" res=\$(grep "^[ \\t]*\$comp[ \\t]*\\\$" final_listapt-rdepends --build-depends --follow=DEPENDS \$comp) echo if [[ "" != "\$res" ]];| then grep 'Build-Depends:' > tmp echo continue"\$res" | fi grep 'Build-Depends-Indep:' >> tmp sed 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'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 [[ "\$DEP_FILE" !== "\$comp" ]]; then sed "s/^/\$comp:/g" temp >> \$DEP_FILE continue fi done < list_to_check## Skip packages that ##are Removealready repeatedchecked recordsfor fromdependencies 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)res=\$(grep "^[ \\t]*\$comp[ \\t]*\\\$" final_list) if [[ "" != "\$res" ]]; then continue fi echo "" >> list_to_check done ## Loop for check and download dependencies rmdir -p --ignore-fail-on-non-empty=====> Getting depends for \$comp..." apt-get -R /data/repo/pkg/_tdir sedinstall -i '/^[ \\t]*\$/d' final_list sort -u final_list > temp mv -f temp final_list echo "--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 rm -f list_to_check while read pkg; do if [[ "\$DEP_FILE" =!= "\$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 existsed "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\$pkg: No package found \$res \\033[0m" print_log "\$pkg: No\$res" package found" if [[ "\$DEP_FILE" != "" ]]; then echo "=======================================" >> errors.log echo "\$pkg: No package found\$res" >> errors.log grep ":\$pkg" \$DEP_FILE >> errors.log fi fi doneelse < final_list ## Downloading *.deb packages Put error message if package doesn't exist echo -e "\\033[32;1m =====> Uploading *.deb packages... \\31;1;4m\$pkg: No package found \\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 print_log "\$pkg: No package found" if [[ "\$DEP_FILE" !== "\$component" ]]; then continue fi echo -e "\\033[33;1m "=======================================>" Downloading>> sourceserrors.log for \$component... \\033[0m" apt-get source --download-only \$component echo -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 sources for \$component*.deb packages... \\033[0m" reprepro -b /data/repo --export=never -C main includedscincludedeb du2du4-prebuild \$component*.dsc rm -rf \$component* done < list_component ## Creating index for local repo/data/repo/pkg/*.deb ## Loop for download sources while read component; do if [[ "" == "\$component" ]]; then continue fi echo -e "\\033[3233;1m =====> CreatingDownloading indicessources for local repo\$component... \\033[0m" reprepro apt-Vb /data/repo export du2-prebuildget source --download-only \$component echo -e "\\033[32;1m =====> DONE Uploading sources for \$component... \\033[0m" ifreprepro [[ "\$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="/export/admin/repo.log" |
4. Создайте зону для локального репозитория
...
-b /data/repo --export=never -C main includedsc du4-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 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 | ||
---|---|---|
| ||
cdchmod ~777 ./createmake_zone.sh zonerepo 192.168.0 2 zlogin zonerepo |
Info |
---|
Команды ниже выполняются в зоне. |
Обновите файл /etc/apt/sources.list
:
Code Block | ||
---|---|---|
| ||
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 updaterepo.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 |
---|
Команды ниже выполняются в зоне. |
Установите в зоне необходимые пакеты для работы репозитория:
Code Block | ||
---|---|---|
| ||
apt-get install reprepro apache2 debhelper dpkg-dev dh-exec apt-rdepends screen -y
ln -s /data/repo /var/www/html/dilos
svcadm enable http
svcs http
|
Создайте директорию, где у вас будут лежать конфигурационные файлы для репозитория:
...
Code Block | ||
---|---|---|
| ||
echo -n "Codename: du2du4-prebuild Suite: prebuild Version: 24.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 |
5.
...
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
5. Выполните эти команды для добавления пакетов и исходных файлов в репозиторий:
Code Block | ||
---|---|---|
| ||
cd /data/repo/pkg
./make_repo.sh
exit
|
Процедура создания репозитория может занять длительное время. Поэтому можно запустить скрипт при помощи утилиты screen.
Expand | ||||
---|---|---|---|---|
| ||||
Если Вы подключились по SSH и хотите отключиться от сессии SSH или отключить свой компьютер на время, то выполните следующую команду:
Дальше в любой момент Вы можете нажать Ctrl-A d, после чего отключиться от сессии SSH. Затем когда Вы захотите вернуться, залогиньтесь снова по SSH и введите команду:
|
6. Создайте новую зону для сборки компонент
Создайте зону и войдите в неё:
Code Block | ||
---|---|---|
| ||
./create_zone.sh zonebld 192.168.0 3
zlogin zonebld
|
Info |
---|
Команды ниже выполняются в зоне. |
Подготовьте зону для сборки компонент. Для этого скопируйте этот скрипт в файл, например, prepare.sh
или выполните команду :
...
language | bash |
---|
...
Выполните эти команды для добавления пакетов и исходных файлов в репозиторий:
Code Block | ||
---|---|---|
| ||
cd /data/repo/pkg
./make_repo.sh
exit
|
Процедура создания репозитория может занять длительное время. Поэтому можно запустить скрипт при помощи утилиты screen.
Expand | ||||
---|---|---|---|---|
| ||||
Если Вы подключились по SSH и хотите отключиться от сессии SSH или отключить свой компьютер на время, то выполните следующую команду:
Дальше в любой момент Вы можете нажать Ctrl-A d, после чего отключиться от сессии SSH. Затем когда Вы захотите вернуться, залогиньтесь снова по SSH и введите команду:
|
6. Создайте новую зону для сборки компонент
Создайте зону и войдите в неё:
Code Block | ||
---|---|---|
| ||
./create_zone.sh zonebld 192.168.0 3
zlogin zonebld
|
Info |
---|
Команды ниже выполняются в зоне. |
Подготовьте зону для сборки компонент. Для этого скопируйте этот скрипт в файл, например, prepare.sh
или выполните команду :
Code Block | ||
---|---|---|
| ||
cat > prepare.sh <<EOT #!/bin/bash WORKSPACE=/home/du4 apt-get clean apt-get autoclean apt-get remove libiconv-dev -y apt-get install -y build-essential git dpkg-dev screen gmake 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 du2du4-prebuild main contrib non-free" >> /etc/apt/sources.list echo "deb-src [trusted=yes] http://192.168.0.2/dilos du2du4-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 |
Сделайте его исполняемым и запустите:
...
7. Постройте компоненты
Скопируйте этот скрипт в файл, например, build_all.sh
или выполните команду:
Code Block | ||
---|---|---|
| ||
cat > build_all.sh <<EOT #!/bin/bash BLD_PARALLEL="4" WORKSPACE=/export/home/admin/du2du4 #STOP_ON_ERROR=1 STOP_ON_ERROR=0 #GCC_COMPILER="gcc-610" GCC_COMPILER="" # Build a component: \$1 - component name, \$2 - stop-on-error flag function build_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/\$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-compile \$1 >> berror.log || return 1 2>&1 fi END_TIME=\$(date +%s) printf "%06d %s\\n" \$((\${END_TIME} - \${START_TIME})) \$1 >> berror\${WORKSPACE}/tmpbt.log || return 1 2>&1 fi 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 1 ]]; then exit 1 fi dpkg -i \$WORKSPACE/\$GCC_COMPILER/*.deb fi if [[ ! -f \$WORKSPACE/build_components ]]; then cp exit 1 /data/repo/pkg/list_component \$WORKSPACE/build_components fi rm dpkg -i \$WORKSPACE/\$GCC_COMPILER/*.deb fi 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 < \$WORKSPACE/build_components sort tmpbt.log > build_components sed -i 's/^[0-9]* //g' build_components EOT |
Если Вы хотите, чтобы пстроение закончилось после первой же ошибки, присвойте 1 переменной STOP_ON_ERROR STOP_ON_ERROR=1
. В противном случае скрипт будет строить все компоненты по-очереди, независимо от ошибок. При этом в директории каждого компонента будет создаваться файл berror.log
, где вы сможете увидеть ошибки построения.
...
Expand | ||||
---|---|---|---|---|
| ||||
Если Вы подключились по SSH и хотите отключиться от сессии SSH или отключить свой компьютер на время, то выполните следующую команду:
Дальше в любой момент Вы можете нажать Ctrl-A d, после чего отключиться от сессии SSH. Затем когда Вы захотите вернуться, залогиньтесь снова по SSH и введите команду:
|
...
Code Block | ||
---|---|---|
| ||
cat > check_fails.sh <<EOT #!/bin/bash #WDIR=\$1 WDIR=/export/home/admin/du2du4 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 |
Info |
---|
Note : Если Вам нужно сначала собрать компилятор GCC и провести построение при его помощи, то укажите имя компоненты компилятора в переменной GCC_COMPILER, например:
|
...