diff --git a/scripts/_common.sh b/scripts/_common.sh index 3497fe9..50162bf 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -17,76 +17,78 @@ pkg_dependencies="curl postgresql xfonts-75dpi xfonts-base wkhtmltopdf node-less #================================================= function debranding() { - # Remove Odoo references to avoid trademark issue - if [ -d $final_path/$appname/$FORKNAME ]; then - python_app=$final_path/$appname/$FORKNAME - else - python_app=$final_path/$appname/openerp - fi - find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/Powered by ]*>Odoo<\/a>//g' {} \; - find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/]*>Powered by <[^>]*>Odoo<\/[^>]*><\/a>//g' {} \; - find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/Powered by <[^>]*>Odoo<\/[^>]*>//g' {} \; - find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/Powered by <[^>]*>]*Odoo[^>]*><\/a>//g' {} \; - sed -i 's/]*>My Odoo.com account<\/a>//g' $final_path/$appname/addons/web/static/src/xml/base.xml - sed -i 's/]*>Documentation<\/a>//g' $final_path/$appname/addons/web/static/src/xml/base.xml - sed -i 's/]*>Support<\/a>//g' $final_path/$appname/addons/web/static/src/xml/base.xml - cp ../conf/logo_type.png $python_app/addons/base/static/img/logo_white.png - cp ../conf/favicon.ico $final_path/$appname/addons/web/static/src/img/favicon.ico + # Remove Odoo references to avoid trademark issue + if [ -d $final_path/$appname/$FORKNAME ]; then + python_app=$final_path/$appname/$FORKNAME + else + python_app=$final_path/$appname/openerp + fi + find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/Powered by ]*>Odoo<\/a>//g' {} \; + find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/]*>Powered by <[^>]*>Odoo<\/[^>]*><\/a>//g' {} \; + find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/Powered by <[^>]*>Odoo<\/[^>]*>//g' {} \; + find $final_path/$appname -type f \( -iname '*.xml' -o -iname '*.po' \) -exec sed -i 's/Powered by <[^>]*>]*Odoo[^>]*><\/a>//g' {} \; + if test -f "$final_path/$appname/addons/web/static/src/xml/base.xml"; then + sed -i 's/]*>My Odoo.com account<\/a>//g' $final_path/$appname/addons/web/static/src/xml/base.xml + sed -i 's/]*>Documentation<\/a>//g' $final_path/$appname/addons/web/static/src/xml/base.xml + sed -i 's/]*>Support<\/a>//g' $final_path/$appname/addons/web/static/src/xml/base.xml + fi + cp ../conf/logo_type.png $python_app/addons/base/static/img/logo_white.png + cp ../conf/favicon.ico $final_path/$appname/addons/web/static/src/img/favicon.ico } function setup_files() { - if [[ $oca -eq 0 ]]; then - ynh_setup_source $final_path/$appname $app_version - else - ynh_setup_source $final_path/$appname "oca-$app_version" - fi - debranding - mkdir -p $final_path/custom-addons - chmod 750 "$final_path" - chmod -R o-rwx "$final_path" - chown -R $app:$app "$final_path" - touch /var/log/$app.log - chown $app:$app /var/log/$app.log - - if [ ! -f $conf_file ]; then - ynh_configure server.conf $conf_file - chmod 400 "$conf_file" + if [[ $oca -eq 0 ]]; then + ynh_setup_source $final_path/$appname $app_version + else + ynh_setup_source $final_path/$appname "oca-$app_version" + fi + debranding + mkdir -p $final_path/custom-addons + chmod 750 "$final_path" + chmod -R o-rwx "$final_path" + chown -R $app:$app "$final_path" + touch /var/log/$app.log + chown $app:$app /var/log/$app.log + + if [ ! -f $conf_file ]; then + ynh_configure server.conf $conf_file + chmod 400 "$conf_file" chown $app:$app "$conf_file" - # Autoinstall the LDAP auth module - if ls $final_path/$appname/$FORKNAME-bin > /dev/null ; then - ynh_replace_string "^{$" "{'auto_install': True," $final_path/$appname/addons/auth_ldap/__manifest__.py - else - ynh_replace_string "'auto_install': False" "'auto_install': True" $final_path/$appname/addons/auth_ldap/__openerp__.py - fi - fi + # Autoinstall the LDAP auth module + if ls $final_path/$appname/$FORKNAME-bin > /dev/null ; then + ynh_replace_string "^{$" "{'auto_install': True," $final_path/$appname/addons/auth_ldap/__manifest__.py + else + ynh_replace_string "'auto_install': False" "'auto_install': True" $final_path/$appname/addons/auth_ldap/__openerp__.py + fi + fi } function setup_database() { - export preinstall=1 - ynh_configure server.conf $conf_file - chown $app:$app $conf_file - # Load translation - #param=" --without-demo True --addons-path $final_path/$appname/addons --db_user $app --db_password $db_pwd --db_host 127.0.0.1 --db_port 5432 --db-filter '^$app\$' -d $app " - param=" -c $conf_file -d $app " - ynh_exec_as $app $bin_file -c $conf_file --stop-after-init -i base -d $app - ynh_exec_as $app $bin_file -c $conf_file --stop-after-init -i auth_ldap -d $app - ynh_exec_as $app $bin_file -c $conf_file --stop-after-init --load-language $lang -d $app - # Configure language, timezone and ldap - ynh_exec_as $app $bin_file shell -c $conf_file -d $app <<< \ + export preinstall=1 + ynh_configure server.conf $conf_file + chown $app:$app $conf_file + # Load translation + #param=" --without-demo True --addons-path $final_path/$appname/addons --db_user $app --db_password $db_pwd --db_host 127.0.0.1 --db_port 5432 --db-filter '^$app\$' -d $app " + param=" -c $conf_file -d $app " + ynh_exec_as $app $bin_file -c $conf_file --stop-after-init -i base -d $app + ynh_exec_as $app $bin_file -c $conf_file --stop-after-init -i auth_ldap -d $app + ynh_exec_as $app $bin_file -c $conf_file --stop-after-init --load-language $lang -d $app + # Configure language, timezone and ldap + ynh_exec_as $app $bin_file shell -c $conf_file -d $app <<< \ " self.env['res.users'].search([['login', '=', 'admin']])[0].write({'password': '$admin_password'}) self.env.cr.commit() " - ynh_exec_as $app $bin_file shell -c $conf_file -d $app <<< \ + ynh_exec_as $app $bin_file shell -c $conf_file -d $app <<< \ " self.write({'tz':'$tz','lang':'$lang'}) self.env.cr.commit() " - ynh_exec_as $app $bin_file shell -c $conf_file -d $app <<< \ + ynh_exec_as $app $bin_file shell -c $conf_file -d $app <<< \ " template=env['res.users'].create({ 'login':'template', @@ -108,20 +110,20 @@ self.company_id.ldaps.create({ }) self.env.cr.commit() " - export preinstall=0 - ynh_configure server.conf $conf_file - chown $app:$app $conf_file + export preinstall=0 + ynh_configure server.conf $conf_file + chown $app:$app $conf_file } ynh_configure () { - local TEMPLATE=$1 - local DEST=$2 - content="" - content2="" - content3="" - if [[ $preinstall == '1' ]] - then - content="dbfilter = $db_name" + local TEMPLATE=$1 + local DEST=$2 + content="" + content2="" + content3="" + if [[ $preinstall == '1' ]] + then + content="dbfilter = $db_name" else content="db_name = $db_name" if [[ $app_version > 9 ]] @@ -131,12 +133,12 @@ ynh_configure () { content3="list_db = False" fi - mkdir -p "$(dirname $DEST)" - if [ -f '../manifest.json' ] ; then - ynh_add_config "${YNH_CWD}/../conf/$TEMPLATE" "$DEST" - else - ynh_add_config "${YNH_CWD}/../settings/conf/$TEMPLATE" "$DEST" - fi + mkdir -p "$(dirname $DEST)" + if [ -f '../manifest.json' ] ; then + ynh_add_config "${YNH_CWD}/../conf/$TEMPLATE" "$DEST" + else + ynh_add_config "${YNH_CWD}/../settings/conf/$TEMPLATE" "$DEST" + fi } #================================================= @@ -148,75 +150,75 @@ ynh_configure () { # usage: ynh_add_swap --size=SWAP in Mb # | arg: -s, --size= - Amount of SWAP to add in Mb. ynh_add_swap () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [s]=size= ) - local size - # Manage arguments with getopts - ynh_handle_getopts_args "$@" + # Declare an array to define the options of this helper. + declare -Ar args_array=( [s]=size= ) + local size + # Manage arguments with getopts + ynh_handle_getopts_args "$@" - local swap_max_size=$(( $size * 1024 )) + local swap_max_size=$(( $size * 1024 )) - local free_space=$(df --output=avail / | sed 1d) - # Because we don't want to fill the disk with a swap file, divide by 2 the available space. - local usable_space=$(( $free_space / 2 )) + local free_space=$(df --output=avail / | sed 1d) + # Because we don't want to fill the disk with a swap file, divide by 2 the available space. + local usable_space=$(( $free_space / 2 )) - SD_CARD_CAN_SWAP=${SD_CARD_CAN_SWAP:-0} + SD_CARD_CAN_SWAP=${SD_CARD_CAN_SWAP:-0} - # Swap on SD card only if it's is specified - if ynh_is_main_device_a_sd_card && [ "$SD_CARD_CAN_SWAP" == "0" ] - then - ynh_print_warn --message="The main mountpoint of your system '/' is on an SD card, swap will not be added to prevent some damage of this one, but that can cause troubles for the app $app. If you still want activate the swap, you can relaunch the command preceded by 'SD_CARD_CAN_SWAP=1'" - return - fi + # Swap on SD card only if it's is specified + if ynh_is_main_device_a_sd_card && [ "$SD_CARD_CAN_SWAP" == "0" ] + then + ynh_print_warn --message="The main mountpoint of your system '/' is on an SD card, swap will not be added to prevent some damage of this one, but that can cause troubles for the app $app. If you still want activate the swap, you can relaunch the command preceded by 'SD_CARD_CAN_SWAP=1'" + return + fi - # Compare the available space with the size of the swap. - # And set a acceptable size from the request - if [ $usable_space -ge $swap_max_size ] - then - local swap_size=$swap_max_size - elif [ $usable_space -ge $(( $swap_max_size / 2 )) ] - then - local swap_size=$(( $swap_max_size / 2 )) - elif [ $usable_space -ge $(( $swap_max_size / 3 )) ] - then - local swap_size=$(( $swap_max_size / 3 )) - elif [ $usable_space -ge $(( $swap_max_size / 4 )) ] - then - local swap_size=$(( $swap_max_size / 4 )) - else - echo "Not enough space left for a swap file" >&2 - local swap_size=0 - fi + # Compare the available space with the size of the swap. + # And set a acceptable size from the request + if [ $usable_space -ge $swap_max_size ] + then + local swap_size=$swap_max_size + elif [ $usable_space -ge $(( $swap_max_size / 2 )) ] + then + local swap_size=$(( $swap_max_size / 2 )) + elif [ $usable_space -ge $(( $swap_max_size / 3 )) ] + then + local swap_size=$(( $swap_max_size / 3 )) + elif [ $usable_space -ge $(( $swap_max_size / 4 )) ] + then + local swap_size=$(( $swap_max_size / 4 )) + else + echo "Not enough space left for a swap file" >&2 + local swap_size=0 + fi - # If there's enough space for a swap, and no existing swap here - if [ $swap_size -ne 0 ] && [ ! -e /swap_$app ] - then - # Preallocate space for the swap file, fallocate may sometime not be used, use dd instead in this case - if ! fallocate -l ${swap_size}K /swap_$app - then - dd if=/dev/zero of=/swap_$app bs=1024 count=${swap_size} - fi - chmod 0600 /swap_$app - # Create the swap - mkswap /swap_$app - # And activate it - swapon /swap_$app - # Then add an entry in fstab to load this swap at each boot. - echo -e "/swap_$app swap swap defaults 0 0 #Swap added by $app" >> /etc/fstab - fi + # If there's enough space for a swap, and no existing swap here + if [ $swap_size -ne 0 ] && [ ! -e /swap_$app ] + then + # Preallocate space for the swap file, fallocate may sometime not be used, use dd instead in this case + if ! fallocate -l ${swap_size}K /swap_$app + then + dd if=/dev/zero of=/swap_$app bs=1024 count=${swap_size} + fi + chmod 0600 /swap_$app + # Create the swap + mkswap /swap_$app + # And activate it + swapon /swap_$app + # Then add an entry in fstab to load this swap at each boot. + echo -e "/swap_$app swap swap defaults 0 0 #Swap added by $app" >> /etc/fstab + fi } ynh_del_swap () { - # If there a swap at this place - if [ -e /swap_$app ] - then - # Clean the fstab - sed -i "/#Swap added by $app/d" /etc/fstab - # Desactive the swap file - swapoff /swap_$app - # And remove it - rm /swap_$app - fi + # If there a swap at this place + if [ -e /swap_$app ] + then + # Clean the fstab + sed -i "/#Swap added by $app/d" /etc/fstab + # Desactive the swap file + swapoff /swap_$app + # And remove it + rm /swap_$app + fi } # Check if the device of the main mountpoint "/" is an SD card @@ -225,14 +227,14 @@ ynh_del_swap () { # # return 0 if it's an SD card, else 1 ynh_is_main_device_a_sd_card () { - local main_device=$(lsblk --output PKNAME --noheadings $(findmnt / --nofsroot --uniq --output source --noheadings --first-only)) + local main_device=$(lsblk --output PKNAME --noheadings $(findmnt / --nofsroot --uniq --output source --noheadings --first-only)) - if echo $main_device | grep --quiet "mmc" && [ $(tail -n1 /sys/block/$main_device/queue/rotational) == "0" ] - then - return 0 - else - return 1 - fi + if echo $main_device | grep --quiet "mmc" && [ $(tail -n1 /sys/block/$main_device/queue/rotational) == "0" ] + then + return 0 + else + return 1 + fi } #================================================= diff --git a/scripts/install b/scripts/install index 6092822..eb5f1fc 100644 --- a/scripts/install +++ b/scripts/install @@ -47,10 +47,10 @@ test ! -e "$final_path" || ynh_die --message="This path already contains a folde export bin_file="$final_path/venv/bin/python3 $final_path/$appname/$FORKNAME-bin" if [ "$app_version" = "9" ]; then - bin_file="$final_path/venv/bin/python3 $final_path/$appname/$FORKNAME.py" + bin_file="$final_path/venv/bin/python3 $final_path/$appname/$FORKNAME.py" fi if [ "$app_version" = "8" ]; then - bin_file="$final_path/venv/bin/python3 $final_path/$appname/$FORKNAME.py" + bin_file="$final_path/venv/bin/python3 $final_path/$appname/$FORKNAME.py" fi # Register (book) web path @@ -141,10 +141,10 @@ ynh_add_nginx_config #================================================= if [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then - : + : else - ynh_script_progression --message="Adding swap..." - ynh_add_swap --size=$swap_needed + ynh_script_progression --message="Adding swap..." + ynh_add_swap --size=$swap_needed fi #================================================= @@ -153,26 +153,32 @@ fi ynh_script_progression --message="Building $app..." if ! wkhtmltopdf --version | grep "wkhtmltopdf 0.12.4 (with patched qt)"; then - # The debian package has a bug so we deploy a more recent version - if [ -f '../manifest.json' ] ; then - ynh_setup_source /usr/ - else - OLD_YNH_CWD=$YNH_CWD - YNH_CWD=$YNH_CWD/../settings/conf - ynh_setup_source /usr/ - YNH_CWD=$OLD_YNH_CWD - fi + # The debian package has a bug so we deploy a more recent version + if [ -f '../manifest.json' ] ; then + ynh_setup_source /usr/ + else + OLD_YNH_CWD=$YNH_CWD + YNH_CWD=$YNH_CWD/../settings/conf + ynh_setup_source /usr/ + YNH_CWD=$OLD_YNH_CWD + fi fi pushd $final_path - if grep "python3" $final_path/$appname/$FORKNAME-bin ; then - python3 -m venv venv - venv/bin/pip3 install wheel - venv/bin/pip3 install -r $appname/requirements.txt - else - virtualenv venv - venv/bin/pip install wheel - venv/bin/pip install -r $appname/requirements.txt - fi + RUSTUP_HOME="$final_path/.rustup" CARGO_HOME="$final_path/.cargo" bash -c 'curl -sSf -L https://static.rust-lang.org/rustup.sh | sh -s -- -y --default-toolchain=stable --profile=minimal' + PATH="$PATH:$final_path/.cargo/bin:$final_path/.local/bin:/usr/local/sbin" + if grep "python3" $final_path/$appname/$FORKNAME-bin ; then + python3 -m venv venv + venv/bin/pip3 install --upgrade pip + venv/bin/pip3 install wheel + venv/bin/pip3 install -r $appname/requirements.txt + else + virtualenv venv + venv/bin/pip3 install --upgrade pip + venv/bin/pip install wheel + venv/bin/pip install -r $appname/requirements.txt + fi + ynh_secure_remove --file="$final_path/.cargo" + ynh_secure_remove --file="$final_path/.rustup" popd #================================================= diff --git a/scripts/restore b/scripts/restore index e76377d..ed0ac2a 100644 --- a/scripts/restore +++ b/scripts/restore @@ -40,10 +40,10 @@ export final_path=$(ynh_app_setting_get --app=$app --key=final_path) export conf_file=$(ynh_app_setting_get --app=$app --key=conf_file) export bin_file="$final_path/venv/bin/python $final_path/$appname/$FORKNAME-bin" if [ "$app_version" = "9" ]; then - bin_file="$final_path/venv/bin/python $final_path/$appname/$FORKNAME.py" + bin_file="$final_path/venv/bin/python $final_path/$appname/$FORKNAME.py" fi if [ "$app_version" = "8" ]; then - bin_file="$final_path/venv/bin/python $final_path/$appname/$FORKNAME.py" + bin_file="$final_path/venv/bin/python $final_path/$appname/$FORKNAME.py" fi export preinstall=0 @@ -100,10 +100,10 @@ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= if [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then - : + : else - ynh_script_progression --message="Adding swap..." - ynh_add_swap --size=$swap_needed + ynh_script_progression --message="Adding swap..." + ynh_add_swap --size=$swap_needed fi #================================================= @@ -112,26 +112,32 @@ fi ynh_script_progression --message="Building $app..." if ! wkhtmltopdf --version | grep "wkhtmltopdf 0.12.4 (with patched qt)"; then - # The debian package has a bug so we deploy a more recent version - if [ -f '../manifest.json' ] ; then - ynh_setup_source /usr/ - else - OLD_YNH_CWD=$YNH_CWD - YNH_CWD=$YNH_CWD/../settings/conf - ynh_setup_source /usr/ - YNH_CWD=$OLD_YNH_CWD - fi + # The debian package has a bug so we deploy a more recent version + if [ -f '../manifest.json' ] ; then + ynh_setup_source /usr/ + else + OLD_YNH_CWD=$YNH_CWD + YNH_CWD=$YNH_CWD/../settings/conf + ynh_setup_source /usr/ + YNH_CWD=$OLD_YNH_CWD + fi fi pushd $final_path - if grep "python3" $final_path/$appname/$FORKNAME-bin ; then - python3 -m venv venv - venv/bin/pip3 install wheel - venv/bin/pip3 install -r $appname/requirements.txt - else - virtualenv venv - venv/bin/pip install wheel - venv/bin/pip install -r $appname/requirements.txt - fi + RUSTUP_HOME="$final_path/.rustup" CARGO_HOME="$final_path/.cargo" bash -c 'curl -sSf -L https://static.rust-lang.org/rustup.sh | sh -s -- -y --default-toolchain=stable --profile=minimal' + PATH="$PATH:$final_path/.cargo/bin:$final_path/.local/bin:/usr/local/sbin" + if grep "python3" $final_path/$appname/$FORKNAME-bin ; then + python3 -m venv venv + venv/bin/pip3 install --upgrade pip + venv/bin/pip3 install wheel + venv/bin/pip3 install -r $appname/requirements.txt + else + virtualenv venv + venv/bin/pip3 install --upgrade pip + venv/bin/pip install wheel + venv/bin/pip install -r $appname/requirements.txt + fi + ynh_secure_remove --file="$final_path/.cargo" + ynh_secure_remove --file="$final_path/.rustup" popd #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index f7c3c0b..5eb8b24 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -115,10 +115,10 @@ ynh_add_nginx_config #================================================= if [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then - : + : else - ynh_script_progression --message="Adding swap..." - ynh_add_swap --size=$swap_needed + ynh_script_progression --message="Adding swap..." + ynh_add_swap --size=$swap_needed fi #================================================= @@ -127,26 +127,32 @@ fi ynh_script_progression --message="Building $app..." if ! wkhtmltopdf --version | grep "wkhtmltopdf 0.12.4 (with patched qt)"; then - # The debian package has a bug so we deploy a more recent version - if [ -f '../manifest.json' ] ; then - ynh_setup_source /usr/ - else - OLD_YNH_CWD=$YNH_CWD - YNH_CWD=$YNH_CWD/../settings/conf - ynh_setup_source /usr/ - YNH_CWD=$OLD_YNH_CWD - fi + # The debian package has a bug so we deploy a more recent version + if [ -f '../manifest.json' ] ; then + ynh_setup_source /usr/ + else + OLD_YNH_CWD=$YNH_CWD + YNH_CWD=$YNH_CWD/../settings/conf + ynh_setup_source /usr/ + YNH_CWD=$OLD_YNH_CWD + fi fi pushd $final_path - if grep "python3" $final_path/$appname/$FORKNAME-bin ; then - python3 -m venv venv - venv/bin/pip3 install wheel - venv/bin/pip3 install -r $appname/requirements.txt - else - virtualenv venv - venv/bin/pip install wheel - venv/bin/pip install -r $appname/requirements.txt - fi + RUSTUP_HOME="$final_path/.rustup" CARGO_HOME="$final_path/.cargo" bash -c 'curl -sSf -L https://static.rust-lang.org/rustup.sh | sh -s -- -y --default-toolchain=stable --profile=minimal' + PATH="$PATH:$final_path/.cargo/bin:$final_path/.local/bin:/usr/local/sbin" + if grep "python3" $final_path/$appname/$FORKNAME-bin ; then + python3 -m venv venv + venv/bin/pip3 install --upgrade pip + venv/bin/pip3 install wheel + venv/bin/pip3 install -r $appname/requirements.txt + else + virtualenv venv + venv/bin/pip3 install --upgrade pip + venv/bin/pip install wheel + venv/bin/pip install -r $appname/requirements.txt + fi + ynh_secure_remove --file="$final_path/.cargo" + ynh_secure_remove --file="$final_path/.rustup" popd #=================================================