Last active
January 18, 2017 10:09
-
-
Save MuhammetDilmac/9a00fdc3c6c2aea58b21cabb09671be4 to your computer and use it in GitHub Desktop.
piBuild uygulaması bulunduğunuz dizindeki dosyalar ile docker uygulaması içinde pisi paketi oluşturan bir bash scriptidir.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
# Kurulum için; | |
# sudo wget https://gist.githubusercontent.com/MuhammetDilmac/9a00fdc3c6c2aea58b21cabb09671be4/raw/767277730be88febbcaeedd455835b92ea721ce1/pibuild.sh --no-check-certificate -O /usr/bin/pibuild && sudo chmod +x /usr/bin/pibuild | |
# | |
# | |
# Kullanım; | |
# Scripti kullanmak için pspec.xml, actions.py ve translations.xml dosyasının bulunduğu dizinde pibuild yazmanız yeterlidir. | |
# Oluşan çıktı dosyalarını pibuild dizini içinde bulabilirsiniz. | |
# | |
# Set Variables | |
CURRENT_PATH="$(pwd)" | |
DOCKER_SERVICE_RUN="/var/run/docker.sock" | |
COLOR_RED=`tput setaf 1` | |
COLOR_GREEN=`tput setaf 2` | |
COLOR_RESET=`tput sgr0` | |
COLOR_BLUE=`tput setaf 4` | |
PSPEC_FILE="pspec.xml" | |
ACTIONS_FILE="actions.py" | |
TRANSLATIONS_FILE="translations.xml" | |
CONTAINER_IMAGE="ertugerata/pisi-chroot-farm" | |
PIBUILD_PATH="${CURRENT_PATH}/pibuild" | |
CONTAINER_NAME="" | |
CONTAINER_BUILD_SCRIPT="" | |
REQUIRE_KERNEL=" " | |
IGNORE_SANDBOX=" --ignore-sandbox " | |
GONULLU_PATH=" " | |
SANDBOX_PACKAGES=" " | |
KERNEL_REQUIREMENT_PACKAGES=" " | |
GONULLU_VERSION="" | |
ACCEPTABLE_GONULLU_VERSION="113" | |
DOCKER_STATUS="" | |
DOCKER_START_TIME="" | |
# Set Functions | |
function error_log { | |
echo "${COLOR_RED}[-] ${1}${COLOR_RESET}" | |
} | |
function success_log { | |
echo "${COLOR_GREEN}[+] ${1}${COLOR_RESET}" | |
} | |
function info_log { | |
echo "${COLOR_BLUE}[*] ${1}${COLOR_RESET}" | |
} | |
function go_exit { | |
error_log "PiBuild uygulamasından çıkılıyor." | |
exit | |
} | |
function list_include_item { | |
local list="$1" | |
local item="$2" | |
if [[ $list =~ (^|[[:space:]])"$item"($|[[:space:]]) ]] ; then | |
# yes, list include item | |
result=0 | |
else | |
result=1 | |
fi | |
return $result | |
} | |
function check_exist_and_exit { | |
if [ ! -e "$1" ]; then | |
error_log "Bulunduğunuz dizinde $1 dosyası bulunamadı!" | |
go_exit | |
fi | |
} | |
info_log "Pisi Build Uygulamasına Hoş Geldiniz!" | |
info_log "Bulunduğunuz dizin: ${CURRENT_PATH}" | |
check_exist_and_exit $PSPEC_FILE | |
check_exist_and_exit $ACTIONS_FILE | |
check_exist_and_exit $TRANSLATIONS_FILE | |
info_log "Docker servisi kontrol ediliyor." | |
if [ ! -S "${DOCKER_SERVICE_RUN}" ]; then | |
error_log "İlk olarak docker servisini açmanız gerekmekte." | |
go_exit | |
fi | |
GONULLU_PATH=$(python3 -c "exec(\"import gonullu\\nimport os\\nprint(os.path.dirname(gonullu.__file__))\")" 2> /dev/null) | |
SANDBOX_PACKAGES=$(cat $GONULLU_PATH/config/sandbox-requirement.yml | sed s/^[-\S]//) | |
KERNEL_REQUIREMENT_PACKAGES=$(cat $GONULLU_PATH/config/kernel-requirement.yml | sed s/^[-\S]//) | |
if [ $? -ne 0 ]; then | |
error_log "İlk olarak sisteme gonullu uygulamasını kurmanız gerekmekte." | |
go_exit | |
fi | |
GONULLU_VERSION=$(pip3 show gonullu | grep -i version | sed s/Version:[[:blank:]]// | tr -d .) | |
if [ ! $GONULLU_VERSION -ge $ACCEPTABLE_GONULLU_VERSION ]; then | |
error_log "İlk olarak gonullu uygulamasını güncelleyiniz." | |
go_exit | |
fi | |
info_log "PiBuild için dizin kontrolleri yapılıyor." | |
if [ ! -d "${PIBUILD_PATH}" ]; then | |
info_log "${PIBUILD_PATH} dizini oluşturuluyor." | |
mkdir -p $PIBUILD_PATH | |
fi | |
cp $PSPEC_FILE $PIBUILD_PATH/$PSPEC_FILE | |
cp $ACTIONS_FILE $PIBUILD_PATH/$ACTIONS_FILE | |
cp $TRANSLATIONS_FILE $PIBUILD_PATH/$TRANSLATIONS_FILE | |
PACKAGE_NAME=$(python3 -c "exec(\"import xml.etree.ElementTree as ET\\nxml=ET.parse('${PSPEC_FILE}')\\nroot = xml.getroot()\\npackage=root.find('Source/Name')\\nprint(package.text)\")") | |
if ! list_include_item "$SANDBOX_PACKAGES" "$PACKAGE_NAME"; then | |
IGNORE_SANDBOX=" " | |
fi | |
if list_include_item "$KERNEL_REQUIREMENT_PACKAGES" "$PACKAGE_NAME"; then | |
REQUIRE_KERNEL=" kernel " | |
fi | |
CONTAINER_NAME="pisi-${PACKAGE_NAME}-$(( ( RANDOM % 100000 ) + 1 ))" | |
CONTAINER_NAME=`echo $CONTAINER_NAME | grep -i "[a-z0-9_-]"` | |
info_log "Paket Adı: ${PACKAGE_NAME}" | |
info_log "Container Adı: ${CONTAINER_NAME}" | |
CONTAINER_BUILD_SCRIPT="${PIBUILD_PATH}/${CONTAINER_NAME}.sh" | |
info_log "Build scripti ${CONTAINER_BUILD_SCRIPT} dosyasına oluşturuluyor." | |
echo '#!/usr/bin/env bash' > $CONTAINER_BUILD_SCRIPT | |
echo "PSPEC_FILE=\"$PSPEC_FILE\"" >> $CONTAINER_BUILD_SCRIPT | |
echo "REQUIRE_KERNEL=\"${REQUIRE_KERNEL}\"" >> $CONTAINER_BUILD_SCRIPT | |
echo "PACKAGE_NAME=\"${PACKAGE_NAME}\"" >> $CONTAINER_BUILD_SCRIPT | |
echo "CONTAINER_NAME=\"${CONTAINER_NAME}\"" >> $CONTAINER_BUILD_SCRIPT | |
echo "IGNORE_SANDBOX=\"${IGNORE_SANDBOX}\"" >> $CONTAINER_BUILD_SCRIPT | |
echo 'service dbus start && pisi cp && pisi ar pisiBeta --ignore-check http://ciftlik.pisilinux.org/2.0-Beta.1/pisi-index.xml.xz && pisi it --ignore-safety --ignore-dependency autoconf autogen automake binutils bison flex gawk gc gcc gnuconfig guile libmpc libtool-ltdl libtool lzo m4 make mpfr pkgconfig yacc glibc-devel isl$REQUIRE_KERNEL' >> $CONTAINER_BUILD_SCRIPT | |
echo 'pisi ar core --ignore-check https://github.com/pisilinux/core/raw/master/pisi-index.xml.xz && pisi ar main --ignore-check https://github.com/pisilinux/main/raw/master/pisi-index.xml.xz --at 2' >> $CONTAINER_BUILD_SCRIPT | |
echo 'pisi ur' >> $CONTAINER_BUILD_SCRIPT | |
echo 'cd /root' >> $CONTAINER_BUILD_SCRIPT | |
echo 'pisi bi -y $PACKAGE_NAME/$PSPEC_FILE --ignore-safety$IGNORE_SANDBOX 1>/root/$PACKAGE_NAME/$CONTAINER_NAME.log 2>/root/$PACKAGE_NAME/$CONTAINER_NAME.err' >> $CONTAINER_BUILD_SCRIPT | |
echo 'STAT=$?' >> $CONTAINER_BUILD_SCRIPT | |
echo 'for s in `ls *.pisi`' >> $CONTAINER_BUILD_SCRIPT | |
echo 'do' >> $CONTAINER_BUILD_SCRIPT | |
echo ' mv $s /root/$PACKAGE_NAME/$CONTAINER_NAME-$s' >> $CONTAINER_BUILD_SCRIPT | |
echo 'done' >> $CONTAINER_BUILD_SCRIPT | |
echo 'echo $STAT > /root/$PACKAGE_NAME/$PACKAGE_NAME.bitti' >> $CONTAINER_BUILD_SCRIPT | |
chmod +x $CONTAINER_BUILD_SCRIPT | |
info_log "${CONTAINER_IMAGE} imajının güncelliği kontrol ediliyor." | |
docker pull $CONTAINER_IMAGE &> /dev/null | |
DOCKER_START_TIME=$(date +%s) | |
docker run -v /var/cache/pisi/packages:/var/cache/pisi/packages \ | |
-v /var/cache/pisi/archives:/var/cache/pisi/archives \ | |
-v /tmp/varpisi/$PACKAGE_NAME:/var/pisi \ | |
-v $PIBUILD_PATH:/root/$PACKAGE_NAME \ | |
-itd --security-opt=seccomp:unconfined --name "${CONTAINER_NAME}" \ | |
$CONTAINER_IMAGE /root/$PACKAGE_NAME/$CONTAINER_NAME.sh &> /dev/null | |
info_log "Derleme işlemi başlatıldı." | |
while true; do | |
DOCKER_STATUS=$(docker inspect $CONTAINER_NAME | grep -i status | sed -e 's/\s\+\"Status\":\s"//g' | tr -d \",) | |
if [ "${DOCKER_STATUS}" == "exited" ]; then | |
success_log "${CONTAINER_NAME} containerında ${PACKAGE_NAME} paketi için süren derleme işlemi bitti." | |
success_log "Derleme sonucu oluşan çıktı dosyalarına ${PIBUILD_PATH} dizininden erişebilirsiniz." | |
success_log "${CONTAINER_NAME} container'ı temizleniyor." | |
docker rm $CONTAINER_NAME &> /dev/null | |
break | |
else | |
CURRENT_TIME=$(date +%s) | |
ELAPSED_TIME=$(( ($CURRENT_TIME - $DOCKER_START_TIME) )) | |
info_log "Derleme işlemi ${ELAPSED_TIME}sndir devam ediyor." | |
fi | |
sleep 10 | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment