mirror of
				https://framagit.org/YunoHost-Apps/gitea_ynh.git
				synced 2025-10-30 21:35:36 +01:00 
			
		
		
		
	Add binary support to setup_source
This commit is contained in:
		| @@ -79,3 +79,131 @@ set_permission() { | |||||||
|     chmod u=rwX,g=rX,o= "/home/$app" |     chmod u=rwX,g=rX,o= "/home/$app" | ||||||
|     chmod u=rwX,g=rX,o= "/var/log/$app" |     chmod u=rwX,g=rX,o= "/var/log/$app" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # Download, check integrity, uncompress and patch the source from app.src | ||||||
|  | # | ||||||
|  | # The file conf/app.src need to contains: | ||||||
|  | # | ||||||
|  | # SOURCE_URL=Address to download the app archive | ||||||
|  | # SOURCE_SUM=Control sum | ||||||
|  | # # (Optional) Program to check the integrity (sha256sum, md5sum...) | ||||||
|  | # # default: sha256 | ||||||
|  | # SOURCE_SUM_PRG=sha256 | ||||||
|  | # # (Optional) Archive format | ||||||
|  | # # default: tar.gz | ||||||
|  | # SOURCE_FORMAT=tar.gz | ||||||
|  | # # (Optional) Put false if sources are directly in the archive root | ||||||
|  | # # default: true | ||||||
|  | # SOURCE_IN_SUBDIR=false | ||||||
|  | # # (Optionnal) Name of the local archive (offline setup support) | ||||||
|  | # # default: ${src_id}.${src_format} | ||||||
|  | # SOURCE_FILENAME=example.tar.gz  | ||||||
|  | # # (Optional) If it set as false don't extract the source. | ||||||
|  | # # (Useful to get a debian package or a python wheel.) | ||||||
|  | # # default: true | ||||||
|  | # SOURCE_EXTRACT=(true|false) | ||||||
|  | # | ||||||
|  | # Details: | ||||||
|  | # This helper downloads sources from SOURCE_URL if there is no local source | ||||||
|  | # archive in /opt/yunohost-apps-src/APP_ID/SOURCE_FILENAME | ||||||
|  | # | ||||||
|  | # Next, it checks the integrity with "SOURCE_SUM_PRG -c --status" command. | ||||||
|  | # | ||||||
|  | # If it's ok, the source archive will be uncompressed in $dest_dir. If the | ||||||
|  | # SOURCE_IN_SUBDIR is true, the first level directory of the archive will be | ||||||
|  | # removed. | ||||||
|  | # | ||||||
|  | # Finally, patches named sources/patches/${src_id}-*.patch and extra files in | ||||||
|  | # sources/extra_files/$src_id will be applied to dest_dir | ||||||
|  | # | ||||||
|  | # | ||||||
|  | # usage: ynh_setup_source dest_dir [source_id] | ||||||
|  | # | arg: dest_dir  - Directory where to setup sources | ||||||
|  | # | arg: source_id - Name of the app, if the package contains more than one app | ||||||
|  | ynh_setup_source () { | ||||||
|  |     local dest_dir=$1 | ||||||
|  |     local src_id=${2:-app} # If the argument is not given, source_id equals "app" | ||||||
|  |  | ||||||
|  |     # Load value from configuration file (see above for a small doc about this file | ||||||
|  |     # format) | ||||||
|  |     local src_url=$(grep 'SOURCE_URL=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-) | ||||||
|  |     local src_sum=$(grep 'SOURCE_SUM=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-) | ||||||
|  |     local src_sumprg=$(grep 'SOURCE_SUM_PRG=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-) | ||||||
|  |     local src_format=$(grep 'SOURCE_FORMAT=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-) | ||||||
|  |     local src_extract=$(grep 'SOURCE_EXTRACT=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-) | ||||||
|  |     local src_in_subdir=$(grep 'SOURCE_IN_SUBDIR=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-) | ||||||
|  |     local src_filename=$(grep 'SOURCE_FILENAME=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-) | ||||||
|  |  | ||||||
|  |     # Default value | ||||||
|  |     src_sumprg=${src_sumprg:-sha256sum} | ||||||
|  |     src_in_subdir=${src_in_subdir:-true} | ||||||
|  |     src_format=${src_format:-tar.gz} | ||||||
|  |     src_format=$(echo "$src_format" | tr '[:upper:]' '[:lower:]') | ||||||
|  |     src_extract=${src_extract:-true} | ||||||
|  |     if [ "$src_filename" = "" ] ; then | ||||||
|  |         src_filename="${src_id}.${src_format}" | ||||||
|  |     fi | ||||||
|  |     local local_src="/opt/yunohost-apps-src/${YNH_APP_ID}/${src_filename}" | ||||||
|  |  | ||||||
|  |     if test -e "$local_src" | ||||||
|  |     then    # Use the local source file if it is present | ||||||
|  |         cp $local_src $src_filename | ||||||
|  |     else    # If not, download the source | ||||||
|  |         wget -nv -O $src_filename $src_url | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # Check the control sum | ||||||
|  |     echo "${src_sum} ${src_filename}" | ${src_sumprg} -c --status \ | ||||||
|  |         || ynh_die "Corrupt source" | ||||||
|  |  | ||||||
|  |     # Extract source into the app dir | ||||||
|  |     mkdir -p "$dest_dir" | ||||||
|  |      | ||||||
|  |     if ! "$src_extract" | ||||||
|  |     then | ||||||
|  |         mv $src_filename $dest_dir | ||||||
|  |     elif [ "$src_format" = "zip" ] | ||||||
|  |     then  | ||||||
|  |         # Zip format | ||||||
|  |         # Using of a temp directory, because unzip doesn't manage --strip-components | ||||||
|  |         if $src_in_subdir ; then | ||||||
|  |             local tmp_dir=$(mktemp -d) | ||||||
|  |             unzip -quo $src_filename -d "$tmp_dir" | ||||||
|  |             cp -a $tmp_dir/*/. "$dest_dir" | ||||||
|  |             ynh_secure_remove "$tmp_dir" | ||||||
|  |         else | ||||||
|  |             unzip -quo $src_filename -d "$dest_dir" | ||||||
|  |         fi | ||||||
|  |     else | ||||||
|  |         local strip="" | ||||||
|  |         if $src_in_subdir ; then | ||||||
|  |             strip="--strip-components 1" | ||||||
|  |         fi | ||||||
|  |         if [[ "$src_format" =~ ^tar.gz|tar.bz2|tar.xz$ ]] ; then | ||||||
|  |             tar -xf $src_filename -C "$dest_dir" $strip | ||||||
|  |         fi | ||||||
|  |         if [[ "$src_format" = "bin" ]] ; then | ||||||
|  |             chmod +x $src_filename | ||||||
|  |         else | ||||||
|  |             ynh_die "Archive format unrecognized." | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # Apply patches | ||||||
|  |     if (( $(find $YNH_CWD/../sources/patches/ -type f -name "${src_id}-*.patch" 2> /dev/null | wc -l) > "0" )); then | ||||||
|  |         local old_dir=$(pwd) | ||||||
|  |         (cd "$dest_dir" \ | ||||||
|  |             && for p in $YNH_CWD/../sources/patches/${src_id}-*.patch; do \ | ||||||
|  |                 patch -p1 < $p; done) \ | ||||||
|  |             || ynh_die "Unable to apply patches" | ||||||
|  |         cd $old_dir | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # Add supplementary files | ||||||
|  |     if test -e "$YNH_CWD/../sources/extra_files/${src_id}"; then | ||||||
|  |         cp -a $YNH_CWD/../sources/extra_files/$src_id/. "$dest_dir" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Rafi59
					Rafi59