forked from artix/artools
		
	Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ce481f6b07 | |||
| b6a4619ab3 | |||
| 88ebc5c476 | |||
| c27c516610 | |||
| 42ee8522dd | |||
| b7f05f4dd2 | 
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							| @@ -54,8 +54,7 @@ BIN_PKG = \ | ||||
| 	bin/buildpkg \ | ||||
| 	bin/buildtree \ | ||||
| 	bin/deploypkg \ | ||||
| 	bin/commitpkg \ | ||||
| 	bin/mkpkgclean | ||||
| 	bin/commitpkg | ||||
|  | ||||
| LIBS_PKG = \ | ||||
| 	$(wildcard lib/util-pkg*.sh) | ||||
|   | ||||
| @@ -34,7 +34,6 @@ artools | ||||
|   * libisoburn | ||||
|   * squashfs-tools | ||||
|   * mkinitcpio | ||||
|   * mktorrent | ||||
|   * grub | ||||
|  | ||||
| #### Configuration | ||||
|   | ||||
| @@ -20,6 +20,36 @@ SYSCONFDIR='@sysconfdir@' | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-mount.sh | ||||
|  | ||||
| select_os(){ | ||||
|     local os_list=( $(detect) ) count=${#os_list[@]} | ||||
|     if [[ ${count} > 1 ]];then | ||||
|         msg "Detected systems:" | ||||
|         local i=0 | ||||
|         for os in ${os_list[@]};do | ||||
|             local last=${os##*:} | ||||
|             case $last in | ||||
|                 'efi') count=$((count-1)) ;; | ||||
|                 *) info "$i) $(get_os_name $os)"; i=$((i+1)) ;; | ||||
|             esac | ||||
|         done | ||||
|         i=0 | ||||
|         msg "Select system to mount [0-%s] : " "$((count-1))" | ||||
|         read select | ||||
|     else | ||||
|         select=0 | ||||
|     fi | ||||
|     local os_str=${os_list[$select]} type | ||||
|     type=$os_str | ||||
|     root=${os_str%%:*} | ||||
|     type=${type##*:} | ||||
|     if [[ "${type##*:}" == 'linux' ]];then | ||||
|         msg "Mounting (%s) [%s]" "$(get_os_name $os_str)" "$root" | ||||
|         mount_os "$1" "$root" | ||||
|     else | ||||
|         die "You can't mount %s!" "$select" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|   | ||||
| @@ -35,7 +35,7 @@ prepare_build(){ | ||||
|  | ||||
|     iso_file=$(gen_iso_fn).iso | ||||
|  | ||||
|     mkchroot_args+=(-C ${pacman_conf}) | ||||
|     mkchroot_args+=(-C ${pacman_conf} -m) | ||||
|     work_dir=${chroots_iso}/${profile}/${target_arch} | ||||
|  | ||||
|     iso_dir="${iso_pool}/${profile}" | ||||
|   | ||||
| @@ -22,7 +22,6 @@ import ${LIBDIR}/util-mount.sh | ||||
|  | ||||
| working_dir='' | ||||
| files=() | ||||
| keep_mirrors=false | ||||
| nosetarch=false | ||||
|  | ||||
| usage() { | ||||
|   | ||||
| @@ -16,7 +16,23 @@ SYSCONFDIR='@sysconfdir@' | ||||
|  | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-iso-publish.sh | ||||
|  | ||||
| connect(){ | ||||
|     local home="/home/frs/project/${project}" | ||||
|     echo "${account},${project}@frs.${file_host}:${home}" | ||||
| } | ||||
|  | ||||
| prepare_transfer(){ | ||||
|     target_dir="/iso/${profile}/" | ||||
|     src_dir="${iso_pool}/${profile}/" | ||||
| } | ||||
|  | ||||
| sync_dir(){ | ||||
|     msg "Start upload [%s] ..." "${profile}" | ||||
|     rsync "${rsync_args[@]}" ${src_dir} $(connect)${target_dir} | ||||
|     msg "Done upload [%s]" "${profile}" | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
| @@ -29,14 +45,6 @@ display_settings(){ | ||||
|     msg "ARGS:" | ||||
|     msg2 "update: %s" "${update}" | ||||
|     msg2 "verbose: %s" "${verbose}" | ||||
|     msg2 "torrent: %s" "${torrent}" | ||||
|  | ||||
|     if ${torrent};then | ||||
|         msg2 "tracker_url: %s" "${tracker_url}" | ||||
|         msg2 "piece_size: %s" "${piece_size}" | ||||
|         msg2 "host_mirrors: %s" "${host_mirrors[*]}" | ||||
|         msg2 "torrent_meta: %s" "${torrent_meta}" | ||||
|     fi | ||||
|  | ||||
|     msg "REMOTE:" | ||||
|     msg2 "account: %s" "${account}" | ||||
| @@ -55,7 +63,6 @@ load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artoo | ||||
| pretend=false | ||||
| update=false | ||||
| verbose=false | ||||
| torrent=false | ||||
|  | ||||
| rsync_args=(-aP --progress -e ssh) | ||||
|  | ||||
| @@ -64,7 +71,6 @@ usage() { | ||||
|     echo "    -p                 Source folder to upload [default: ${profile}]" | ||||
|     echo "    -l                 Limit bandwidth in kB/s [default:${uplimit}]" | ||||
|     echo '    -u                 Update remote directory' | ||||
|     echo '    -t                 Create iso torrent' | ||||
|     echo '    -q                 Query settings and pretend upload' | ||||
|     echo '    -v                 Verbose output' | ||||
|     echo '    -h                 This help' | ||||
| @@ -73,14 +79,13 @@ usage() { | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| opts='p:l:uvtqh' | ||||
| opts='p:l:uvqh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         p) profile="$OPTARG" ;; | ||||
|         l) uplimit="$OPTARG" ;; | ||||
|         u) update=true; rsync_args+=(-u) ;; | ||||
|         t) torrent=true ;; | ||||
|         v) verbose=true; rsync_args+=(-v --stats) ;; | ||||
|         q) pretend=true; rsync_args+=(-n) ;; | ||||
|         h|?) usage 0 ;; | ||||
|   | ||||
| @@ -23,15 +23,17 @@ working_dir='' | ||||
| files=() | ||||
|  | ||||
| nosetarch=false | ||||
| copy_mirrorlist=true | ||||
| basestrap_args=(-Gc) | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] working-dir package-list..." | ||||
|     echo ' options:' | ||||
|     echo '    -C <file>     Location of a pacman config file' | ||||
|     echo '    -M <file>     Location of a makepkg config file' | ||||
|     echo '    -U <url>      Set a specific mirror' | ||||
|     echo '    -c <dir>      Set pacman cache' | ||||
|     echo '    -f <file>     Copy file from the host to the chroot' | ||||
|     echo '    -m            Do not copy mirrorlist to the chroot' | ||||
|     echo '    -s            Do not run setarch' | ||||
|     echo '    -h            This message' | ||||
|     exit 1 | ||||
| @@ -39,16 +41,16 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='hC:M:U:c:f:s' | ||||
| opts='hC:M:c:f:sm' | ||||
|  | ||||
| while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
|         C) pacman_conf="$OPTARG" ;; | ||||
|         M) makepkg_conf="$OPTARG" ;; | ||||
|         U) mirror="$OPTARG" ;; | ||||
|         c) cache_dir="$OPTARG" ;; | ||||
|         f) files+=("$OPTARG") ;; | ||||
|         s) nosetarch=true ;; | ||||
|         m) copy_mirrorlist=false; basestrap_args+=(-M) ;; | ||||
|         h|?) usage ;; | ||||
|         *) error "invalid argument '%s'" "$arg"; usage ;; | ||||
|     esac | ||||
| @@ -98,7 +100,7 @@ while read -r varname; do | ||||
|     _env+=("$varname=${!varname}") | ||||
| done < <(declare -x | sed -r 's/^declare -x ([^=]*)=.*/\1/' | grep -i '_proxy$') | ||||
| env -i "${_env[@]}" \ | ||||
| basestrap -Gc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' | ||||
| basestrap "${basestrap_args[@]}" ${pacman_conf:+-C "$pacman_conf"} "$working_dir" ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' | ||||
|  | ||||
| echo "$chroot_version" > "$working_dir/.artools" | ||||
|  | ||||
|   | ||||
| @@ -1,93 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; version 2 of the License. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| version=@version@ | ||||
|  | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
|  | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
|  | ||||
| prepare_clean(){ | ||||
|     if [[ -n ${repository} ]];then | ||||
|         storage_dir=${repos_root}/${repository}/os/${target_arch} | ||||
|         paccache_args+=(-c "${storage_dir}" -k 1) | ||||
|     else | ||||
|         if [[ -n ${PKGDEST} ]];then | ||||
|             storage_dir=${PKGDEST} | ||||
|             paccache_args+=(-c "${storage_dir}" -k 4) | ||||
|         else | ||||
|             die "PKGDEST not set in makepkg.conf!" | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "OPTIONS:" | ||||
|     msg2 "repository: %s" "${repository}" | ||||
|  | ||||
|     msg "PATH:" | ||||
|     msg2 "storage_dir: %s" "${storage_dir}" | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "paccache_args: %s" "${paccache_args[*]}" | ||||
|  | ||||
|     paccache "${paccache_args[@]}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| clean=false | ||||
| pretend=false | ||||
| repository='' | ||||
| storage_dir='' | ||||
| paccache_args=(-v) | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "    -d <dir>           Directory [default:${repository}]" | ||||
|     echo '    -c                 Clean up' | ||||
|     echo '    -q                 Query settings and pretend cleaning' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='d:cqh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         d) repository="$OPTARG" ;; | ||||
|         c) clean=true ; paccache_args+=(-r) ;; | ||||
|         q) pretend=true; paccache_args+=(-d) ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| prepare_clean | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| ${clean} && paccache "${paccache_args[@]}" | ||||
| @@ -12,7 +12,7 @@ | ||||
| ################ artools-pkg ################ | ||||
| ############################################# | ||||
|  | ||||
| # git user access token | ||||
| # gitea user access token | ||||
| # git_token='' | ||||
|  | ||||
| # host_tree_artix='gitea@gitea.artixlinux.org:artix' | ||||
| @@ -32,21 +32,15 @@ | ||||
| # the dist release; default: auto | ||||
| # iso_version=$(date +%Y%m%d) | ||||
|  | ||||
| # possible values: openrc, (s6, runit) not yet supported | ||||
| # possible values: openrc, runit (s6 not yet supported) | ||||
| # initsys="openrc" | ||||
|  | ||||
| # unset defaults to given value | ||||
| # kernel="linux" | ||||
|  | ||||
| # gpg key; leave empty or commented to skip sfs signing | ||||
| # gpgkey="" | ||||
|  | ||||
| # set upload bandwidth limit in kB/s | ||||
| # uplimit=100 | ||||
|  | ||||
| # the torrent tracker urls, comma separated | ||||
| # tracker_url='udp://mirror.strits.dk:6969' | ||||
|  | ||||
| # file_host="sourceforge.net" | ||||
|  | ||||
| # the server user | ||||
| @@ -54,9 +48,3 @@ | ||||
|  | ||||
| # the server project | ||||
| # project="artix-linux" | ||||
|  | ||||
| # host mirrors | ||||
| # host_mirrors=('netcologne' 'freefr' 'netix' 'kent' '10gbps-io') | ||||
|  | ||||
| # Piece size, 2^n | ||||
| # piece_size=21 | ||||
|   | ||||
| @@ -1,51 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; version 2 of the License. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| connect(){ | ||||
|     local home="/home/frs/project/${project}" | ||||
|     echo "${account},${project}@frs.${file_host}:${home}" | ||||
| } | ||||
|  | ||||
| gen_webseed(){ | ||||
|     local webseed seed="$1" | ||||
|     for mirror in ${host_mirrors[@]};do | ||||
|         webseed=${webseed:-}${webseed:+,}"https://${mirror}.dl.${seed}" | ||||
|     done | ||||
|     echo ${webseed} | ||||
| } | ||||
|  | ||||
| make_torrent(){ | ||||
|     find ${src_dir} -type f -name "*.torrent" -delete | ||||
|  | ||||
|     if [[ -n $(find ${src_dir} -type f -name "*.iso") ]]; then | ||||
|         for iso in $(ls ${src_dir}/*.iso);do | ||||
|             local seed=${file_host}/project/${project}${target_dir}${iso##*/} | ||||
|             local mktorrent_args=(-c "${torrent_meta}" -p -l ${piece_size} -a ${tracker_url} -w $(gen_webseed ${seed})) | ||||
|             ${verbose} && mktorrent_args+=(-v) | ||||
|             info "mktorrent_args: %s" "${mktorrent_args[@]}" | ||||
|             msg2 "Creating (%s) ..." "${iso##*/}.torrent" | ||||
|             mktorrent ${mktorrent_args[*]} -o ${iso}.torrent ${iso} | ||||
|         done | ||||
|     fi | ||||
| } | ||||
|  | ||||
| prepare_transfer(){ | ||||
|     target_dir="/iso/${profile}/" | ||||
|     src_dir="${iso_pool}/${profile}/" | ||||
|     ${torrent} && make_torrent | ||||
| } | ||||
|  | ||||
| sync_dir(){ | ||||
|     msg "Start upload [%s] ..." "${profile}" | ||||
|     rsync "${rsync_args[@]}" ${src_dir} $(connect)${target_dir} | ||||
|     msg "Done upload [%s]" "${profile}" | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
| @@ -407,7 +407,10 @@ make_iso() { | ||||
| gen_iso_fn(){ | ||||
|     local vars=("artix") name | ||||
|     vars+=("${profile}") | ||||
|     [[ ${initsys} == 'runit' ]] && vars+=("${initsys}") | ||||
|     vars+=("${initsys}") | ||||
|     case "${stablility}" in | ||||
|         'gremlins'|'goblins') vars+=("${stablility}") ;; | ||||
|     esac | ||||
|     vars+=("${iso_version}") | ||||
|     vars+=("${target_arch}") | ||||
|     for n in ${vars[@]};do | ||||
|   | ||||
| @@ -33,47 +33,11 @@ get_os_name(){ | ||||
|     echo "$str" | ||||
| } | ||||
|  | ||||
| get_chroot_arch(){ | ||||
|     local elf=$(file $1/usr/bin/file) | ||||
|     elf=${elf//*executable,} | ||||
|     echo ${elf%%,*} | ||||
| } | ||||
|  | ||||
| chroot_part_mount() { | ||||
|     info "mount: [%s]" "$2" | ||||
|     mount "$@" && CHROOT_ACTIVE_PART_MOUNTS=("$2" "${CHROOT_ACTIVE_PART_MOUNTS[@]}") | ||||
| } | ||||
|  | ||||
| select_os(){ | ||||
|     local os_list=( $(detect) ) count=${#os_list[@]} | ||||
|     if [[ ${count} > 1 ]];then | ||||
|         msg "Detected systems:" | ||||
|         local i=0 | ||||
|         for os in ${os_list[@]};do | ||||
|             local last=${os##*:} | ||||
|             case $last in | ||||
|                 'efi') count=$((count-1)) ;; | ||||
|                 *) info "$i) $(get_os_name $os)"; i=$((i+1)) ;; | ||||
|             esac | ||||
|         done | ||||
|         i=0 | ||||
|         msg "Select system to mount [0-%s] : " "$((count-1))" | ||||
|         read select | ||||
|     else | ||||
|         select=0 | ||||
|     fi | ||||
|     local os_str=${os_list[$select]} type | ||||
|     type=$os_str | ||||
|     root=${os_str%%:*} | ||||
|     type=${type##*:} | ||||
|     if [[ "${type##*:}" == 'linux' ]];then | ||||
|         msg "Mounting (%s) [%s]" "$(get_os_name $os_str)" "$root" | ||||
|         mount_os "$1" "$root" | ||||
|     else | ||||
|         die "You can't mount %s!" "$select" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| trap_setup(){ | ||||
|     [[ $(trap -p EXIT) ]] && die 'Error! Attempting to overwrite existing EXIT trap' | ||||
|     trap "$1" EXIT | ||||
| @@ -151,16 +115,6 @@ mount_os(){ | ||||
|         esac | ||||
|     done | ||||
|  | ||||
|     local chroot_arch=$(get_chroot_arch $1) | ||||
|     [[ ${chroot_arch} == x86-64 ]] && chroot_arch=${chroot_arch/-/_} | ||||
|     case ${target_arch} in | ||||
|         i686) | ||||
|             if [[ ${chroot_arch} == x86_64 ]];then | ||||
|                 die "You can't chroot from %s host into %s!" "${target_arch}" "${chroot_arch}" | ||||
|             fi | ||||
|         ;; | ||||
|     esac | ||||
|  | ||||
|     chroot_setup "$1" | ||||
|     chroot_add_resolv_conf "$1" | ||||
| } | ||||
| @@ -171,16 +125,18 @@ chroot_api_mount() { | ||||
|     chroot_setup "$1" | ||||
| } | ||||
|  | ||||
| chroot_part_umount() { | ||||
|     info "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|     umount "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|     info "umount: [%s]" "${CHROOT_ACTIVE_PART_MOUNTS[@]}" | ||||
|     umount "${CHROOT_ACTIVE_PART_MOUNTS[@]}" | ||||
|     unset CHROOT_ACTIVE_PART_MOUNTS CHROOT_ACTIVE_MOUNTS | ||||
| } | ||||
|  | ||||
| chroot_api_umount() { | ||||
|     info "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|     umount "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|     if (( ${#CHROOT_ACTIVE_MOUNTS[@]} )); then | ||||
|         info "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|         umount "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||
|     fi | ||||
|     unset CHROOT_ACTIVE_MOUNTS | ||||
| } | ||||
|  | ||||
| chroot_part_umount() { | ||||
|     chroot_api_umount | ||||
|     info "umount: [%s]" "${CHROOT_ACTIVE_PART_MOUNTS[@]}" | ||||
|     umount "${CHROOT_ACTIVE_PART_MOUNTS[@]}" | ||||
|     unset CHROOT_ACTIVE_PART_MOUNTS | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -98,19 +98,11 @@ init_artools_iso(){ | ||||
|  | ||||
|     [[ -z ${uplimit} ]] && uplimit=100 | ||||
|  | ||||
|     [[ -z ${tracker_url} ]] && tracker_url='udp://mirror.strits.dk:6969' | ||||
|  | ||||
|     [[ -z ${piece_size} ]] && piece_size=21 | ||||
|  | ||||
|     [[ -z ${file_host} ]] && file_host="sourceforge.net" | ||||
|  | ||||
|     [[ -z ${project} ]] && project="artix-linux" | ||||
|  | ||||
|     [[ -z ${account} ]] && account="[SetUser]" | ||||
|  | ||||
|     [[ -z ${host_mirrors[@]} ]] && host_mirrors=('netcologne' 'freefr' 'netix' 'kent' '10gbps-io') | ||||
|  | ||||
|     torrent_meta="$(get_osname)" | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user