diff --git a/README.md b/README.md index d9a5c0e..38e1a77 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,15 @@ # Ampache for YunoHost [![Integration level](https://dash.yunohost.org/integration/ampache.svg)](https://dash.yunohost.org/appci/app/ampache) ![](https://ci-apps.yunohost.org/ci/badges/ampache.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/ampache.maintain.svg) -[![Install Ampache with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ampache) +[![Install Ampache with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=ampache) > *This package allow you to install Ampache quickly and simply on a YunoHost server. If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* ## Overview -[Ampache](http://ampache.org) for the love of music. A web based audio/video -streaming application and file manager allowing you to access your -music & videos from anywhere, using almost any internet enabled device. +[Ampache](http://ampache.org) for the love of music. A web based audio/video streaming application and file manager allowing you to access your music & videos from anywhere, using almost any internet enabled device. -**Shipped version:** 3.9.0 +**Shipped version:** 4.4.0 ## Screenshots @@ -27,7 +25,7 @@ music & videos from anywhere, using almost any internet enabled device. ## Documentation * Official documentation: https://github.com/ampache/ampache/wiki - * YunoHost documentation: There no other documentations, feel free to contribute. + * YunoHost documentation: https://yunohost.org/#/app_ampache ## YunoHost specific features @@ -46,16 +44,15 @@ this package: #### Supported architectures -* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/ampache%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/ampache/) +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/ampache%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/ampache/) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/ampache%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/ampache/) -* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/ampache%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/ampache/) ## Limitations -* Also, the SSO authentication not fully working from user panel, we have to work about this. -In fact, it can disrupt external Ampache clients like Subsonic. +* Also, the SSO authentication not fully working from user panel, we have to work about this. In fact, it can disrupt external Ampache clients like Subsonic. ## Additionnal informations + ### Getting started * **Add your first catalog to load music files** @@ -90,8 +87,7 @@ In fact, it can disrupt external Ampache clients like Subsonic. --- -Developers infos ----------------- +## Developers infos Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/ampache_ynh/tree/testing). diff --git a/check_process b/check_process index cbba2de..84ec4ce 100644 --- a/check_process +++ b/check_process @@ -12,13 +12,10 @@ setup_private=1 setup_public=1 upgrade=1 - upgrade=1 from_commit=11caf9791c48fdcd632193a1c82ea52d4819b328 backup_restore=1 multi_instance=1 - incorrect_path=1 + port_already_use=0 change_url=1 -;;; Levels - Level 5=auto ;;; Options Email=aymhce@gmail.com Notification=none diff --git a/conf/ampache.cfg.php b/conf/ampache.cfg.php index 104e255..646ef82 100644 --- a/conf/ampache.cfg.php +++ b/conf/ampache.cfg.php @@ -7,7 +7,13 @@ ; if this config file is up to date ; this is compared against a value hard-coded ; into the init script -config_version = 34 +config_version = 40 + +; Allow you to hard code a default git branch for Ampache +; If you set this value the inbuilt updater will use this branch for updates. +; POSSIBLE VALUES: master develop +; DEFAULT: "" +;github_force_branch = "develop" ;######################################################### ; Path Vars # @@ -34,6 +40,12 @@ http_host = "__DOMAINTOCHANGE__" web_path = "__PATHTOCHANGE__" ; The local http url of your server. +; This is used to access the server from within the +; same host where ampache is running. +; For example, if the ampache server is not +; directly accessed via the public domain but via a reverse +; proxy, local_web_path would need to be changed +; to a localhost URL. ; If not set, retrieved automatically from server information. ; DEFAULT: "" ;local_web_path = "http://localhost/ampache" @@ -262,7 +274,7 @@ catalog_prefix_pattern = "The|An|A|Die|Das|Ein|Eine|Les|Le|La" ;catalog_disable = "false" ; Delete from disk -; This determines if catalog manager users can delete medias from disk. +; This determines if catalog manager users can delete media from disk. ; DEFAULT: false ;delete_from_disk = "false" @@ -280,7 +292,7 @@ catalog_prefix_pattern = "The|An|A|Die|Das|Ein|Eine|Les|Le|La" ; Track User IPs ; If this is enabled Ampache will log the IP of every completed login -; it will store user,ip,time at one row per login. The results are +; it will store user, ip and time at one row per login. The results are ; displayed in Admin --> Users ; DEFAULT: false ;track_user_ip = "false" @@ -326,6 +338,16 @@ catalog_prefix_pattern = "The|An|A|Die|Das|Ein|Eine|Les|Le|La" ; DEFAULT: #FF0000 ;waveform_color = "#FF0000" +; Waveform height +; The waveform height. +; DEFAULT: 32 +;waveform_height = 32 + +; Waveform width +; The waveform width. +; DEFAULT: 400 +;waveform_width = 400 + ; Temporary Directory Path ; If Waveform is enabled this must be set to tell ; Ampache which directory to save the temporary file to. Do not put a @@ -355,7 +377,7 @@ catalog_prefix_pattern = "The|An|A|Die|Das|Ein|Eine|Les|Le|La" ; Username and password. If this is set to false then ampache ; will not ask you for a username and password. false is only ; recommended for internal only instances -; DEFAULT true +; DEFAULT: true use_auth = "true" ; Default Auth Level @@ -373,6 +395,23 @@ default_auth_level = "guest" ; DEFAULT: true ratings = "true" +; Enable filtering on browse pages for artists and albums. +; If you enable this setting the get_random and browse pages +; will remove artists and albums that are <= to that rating +; DEFAULT: false +;rating_browse_filter = "false" + +; Set the rating that will be filtered +; e.g. 2 will filter 1 and 2 star albums and artists +; this setting must be set for the filter to work +; DEFAULT: null +;rating_browse_minimum_stars = 1 + +; Set the amount of items Album/Video of the Moment will display +; This was previously hardcoded into the site +; DEFAULT: 6 +;of_the_moment = 6 + ; User flags/favorites ; This allows user flags for almost any object in ampache as favorite ; POSSIBLE VALUES: false true @@ -407,7 +446,7 @@ sociable = "true" ; This turns the caching mechanisms on or off, due to a large number of ; problems with people with very large catalogs and low memory settings ; this is off by default as it does significantly increase the memory -; requirments on larger catalogs. If you have the memory this can create +; requirements on larger catalogs. If you have the memory this can create ; a 2-3x speed improvement. ; DEFAULT: false ;memory_cache = "false" @@ -479,8 +518,13 @@ sociable = "true" ;playlist_art = "false" ; Statistical Graphs * Requires PHP-GD * -; Set this to true if you want Ampache to generate statistical -; graphs on usages / users. +; Set this to true if you want Ampache to generate statistical graphs on usages / users. +; This is false by default due to issues around the licensing of c-pchart. +; https://github.com/ampache/ampache/issues/1515 +; http://www.pchart.net/license +; REFERENCE: https://github.com/ampache/ampache/wiki/chart-faq +; You can enable c-chart with the following command +; composer require 'szymach/c-pchart' ; DEFAULT: false ;statistical_graphs = "false" @@ -578,6 +622,35 @@ live_stream = "true" ; Possible Values: Int > 5 refresh_limit = "60" +; Embedded Now Playing Page +; Set this to true to enable the embedded Now Playing page (now_playing.php). +; This page allows for embedding a Now Playing badge into a stream +; or status page. Use with the parameter 'user_id' to filter by a +; specific user. This page is like rss in that it doesn't require a +; login to view. +; DEFAULT: false +;use_now_playing_embedded = "false" + +; Now Playing Refresh Limit +; This defines the refresh limit in seconds for the +; Now Playing embedded page. This (now_playing.php) is not +; part of the normal application and is designed to be +; embedded in another app, like a stream or status page. +; If this value is not valid, automatic refresh will be disabled. +; DEFAULT: -1 +; Possible Values; Int > 1 +;now_playing_refresh_limit = "-1" + +; Now Playing Custom CSS +; This defines the custom css file for the Now Playing embedded +; page. This (now_playing.php) is not part of the normal +; application and is designed to be embedded in another app, like +; a stream or status page. +; If this value is not set, no CSS will be used. Custom CSS can +; still be applied in the other application, like OBS. +; DEFAULT: Not enabled +;now_playing_css_file = "templates/now-playing.css" + ; Footer Statistics ; This defines whether statistics (Queries, Cache Hits, Load Time) ; are shown in the page footer. @@ -597,6 +670,12 @@ show_footer_statistics = "true" ; DEFAULT: false ;allow_php_themes = "false" +; Subsonic clients all seem to ignore the download method +; This setting will not scrobble actions from stream actions. +; (This means you can sync playlists without overloading your server) +; Make sure you enable scrobbling in your client to keep recording stats! +; DEFAULT: "true" +;subsonic_stream_scrobble = "false" ;######################################################### ; Debugging # @@ -611,11 +690,11 @@ show_footer_statistics = "true" ; This should always be set in conjunction with the ; debug option, it defines how prolific you want the ; debugging in ampache to be. values are 1-5. -; 1 == Errors only -; 2 == Error + Failures (login attempts etc.) -; 3 == ?? -; 4 == ?? (Profit!) -; 5 == Information (cataloging progress etc.) +; 1 == Basic Errors +; 2 == Errors + Failures (login attempts etc.) +; 3 == Full Error Information +; 4 == General Information +; 5 == Full Information (cataloging progress etc.) ; DEFAULT: 5 debug_level = 5 @@ -715,12 +794,12 @@ ldap_filter = "(uid=%v)" ; OpenLDAP ;ldap_require_group = "cn=yourgroup,ou=yourorg,dc=yoursubdomain,dc=yourdomain,dc=yourtld" ; LDAP name field -; DEFAULT = "cn" +; DEFAULT: = "cn" ldap_name_field = "cn" ;ldap_name_field = "displayName" ; LDAP email field -; DEFAULT = "mail" +; DEFAULT: = "mail" ;ldap_email_field = "mail" ; LDAP avatar field @@ -747,7 +826,6 @@ ldap_name_field = "cn" ;ldap_member_attribute = "memberuid" - ;######################################################### ; OpenID login info (optional) # ;######################################################### @@ -770,7 +848,7 @@ ldap_name_field = "cn" auto_create = "true" ; This setting will silently update an ampache account's -; informations for anyone who can login using LDAP +; information for anyone who can login using LDAP ; (or any other login extension). ; DEFAULT: false ;external_auto_update = "false" @@ -877,14 +955,14 @@ registration_mandatory_fields = "fullname" transcode_m4a = allowed transcode_flac = required transcode_mpc = required -transcode_ogg = required +transcode_ogg = allowed transcode_oga = required transcode_wav = required transcode_wma = required transcode_aif = required transcode_aiff = required -transcode_ape = required -transcode_shn = required +transcode_ape = required +transcode_shn = required transcode_mp3 = allowed ;;; Video transcode_avi = allowed @@ -922,18 +1000,6 @@ encode_target_flac = opus transcode_player_webplayer_m4a = required transcode_player_webplayer_flac = required transcode_player_webplayer_mpc = required -transcode_player_webplayer_avi = required -transcode_player_webplayer_mkv = required -transcode_player_webplayer_mpg = required -transcode_player_webplayer_mpeg = required -transcode_player_webplayer_m4v = required -transcode_player_webplayer_mp4 = required -transcode_player_webplayer_mov = required -transcode_player_webplayer_wmv = required -transcode_player_webplayer_ogv = required -transcode_player_webplayer_divx = required -transcode_player_webplayer_m2ts = required - ; Override the default output format on a per-player basis ; encode_player_PLAYER_target = TYPE @@ -985,8 +1051,8 @@ encode_args_m4a = "-vn -b:a %BITRATE%K -c:a libfdk_aac -f adts pipe:1" encode_args_wav = "-vn -b:a %BITRATE%K -c:a pcm_s16le -f wav pipe:1" encode_args_flv = "-b:a %BITRATE%K -ar 44100 -ac 2 -v 0 -f flv -c:v libx264 -preset superfast -threads 0 pipe:1" encode_args_webm = "-q %QUALITY% -f webm -c:v libvpx -maxrate 800k -preset superfast -threads 0 pipe:1" -;encode_args_webm = "-q %QUALITY% -f webm -c:v libvpx -maxrate %MAXBITRATE%k -preset superfast -threads 0 pipe:1" encode_args_ts = "-q %QUALITY% -s %RESOLUTION% -f mpegts -c:v libx264 -c:a libmp3lame -maxrate %MAXBITRATE%k -preset superfast -threads 0 pipe:1" +encode_args_ogv = "-codec:v libtheora -qscale:v 7 -codec:a libvorbis -qscale:a 5 -f ogg pipe:1" ; Encoding arguments to retrieve an image from a single frame encode_get_image = "-ss %TIME% -f image2 -vframes 1 pipe:1" @@ -1000,12 +1066,18 @@ encode_ss_frame = "-ss %TIME%" ; Encode segment duration argument encode_ss_duration = "-t %DURATION%" +; Use segments for transcoding or send it all in one go. +; Useful if you are having issues streaming the full track. +; You can set it for all streams or a specific player +; POSSIBLE VALUES: true webplayer api +; DEFAULT: = false +;send_full_stream = "webplayer" ;######################################################### ; Proxy Settings (optional) # ;######################################################### -; If Ampache is behind an http proxy, specifiy the hostname or IP address +; If Ampache is behind an http proxy, specify the hostname or IP address ; port, proxyusername, and proxypassword here. ;DEFAULT: not in use ;proxy_host = "192.168.0.1" @@ -1022,6 +1094,12 @@ encode_ss_duration = "-t %DURATION%" ; Mail Settings # ;######################################################### +; Enable or disable email server features +; otherwise, you can reset your password +; and never receive an email with the new one +; Default: false +;mail_enable = "false" + ;Method used to send mail ;POSSIBLE VALUES: smtp sendmail php ;DEFAULT: php @@ -1089,6 +1167,6 @@ encode_ss_duration = "-t %DURATION%" ;############################# ; Abbreviation Filter # ;############################# -; For file name parsing. Any unecessary abbreviations in file names can be removed during parsing +; For file name parsing. Any unnecessary abbreviations in file names can be removed during parsing ; by adding them to the list below so that they will be removed during the parsing process. common_abbr = "divx,xvid,dvdrip,hdtv,lol,axxo,repack,xor,pdtv,real,vtv,caph,2hd,proper,fqm,uncut,topaz,tvt,notv,fpn,fov,orenji,0tv,omicron,dsr,ws,sys,crimson,wat,hiqt,internal,brrip,boheme,vost,vostfr,fastsub,addiction,x264,LOL,720p,1080p,YIFY,evolve,fihtv,first,bokutox,bluray,tvboom,info" diff --git a/conf/app.src b/conf/app.src index 1867c90..58f80c8 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/ampache/ampache/archive/3.9.0.tar.gz -SOURCE_SUM=1e523b52c6402693102dac183d7597d6e0aebf63580167f45661d0f15f57c072 +SOURCE_URL=https://github.com/ampache/ampache/archive/4.4.0.tar.gz +SOURCE_SUM=f91e0f3cd5c4dd57ed051667358e4e5cf77ec40e394a85cf6a3b92b802419b27 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/conf/nginx.conf b/conf/nginx.conf index 7f2ea52..8171468 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -17,7 +17,8 @@ location __PATH__/ { try_files $uri $uri/ index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; + fastcgi_index index.php; include fastcgi_params; fastcgi_param REMOTE_USER $remote_user; diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf deleted file mode 100644 index ab5dca9..0000000 --- a/conf/php-fpm.conf +++ /dev/null @@ -1,430 +0,0 @@ -; Start a new pool named 'www'. -; the variable $pool can be used in any directive and will be replaced by the -; pool name ('www' here) -[__NAMETOCHANGE__] - -; Per pool prefix -; It only applies on the following directives: -; - 'access.log' -; - 'slowlog' -; - 'listen' (unixsocket) -; - 'chroot' -; - 'chdir' -; - 'php_values' -; - 'php_admin_values' -; When not set, the global prefix (or /usr) applies instead. -; Note: This directive can also be relative to the global prefix. -; Default Value: none -;prefix = /path/to/pools/$pool - -; Unix user/group of processes -; Note: The user is mandatory. If the group is not set, the default user's group -; will be used. -user = __USER__ -group = __USER__ - -; The address on which to accept FastCGI requests. -; Valid syntaxes are: -; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on -; a specific port; -; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on -; a specific port; -; 'port' - to listen on a TCP socket to all addresses -; (IPv6 and IPv4-mapped) on a specific port; -; '/path/to/unix/socket' - to listen on a unix socket. -; Note: This value is mandatory. -listen = /var/run/php/php7.0-fpm-__NAMETOCHANGE__.sock - -; Set listen(2) backlog. -; Default Value: 511 (-1 on FreeBSD and OpenBSD) -;listen.backlog = 511 - -; Set permissions for unix socket, if one is used. In Linux, read/write -; permissions must be set in order to allow connections from a web server. Many -; BSD-derived systems allow connections regardless of permissions. -; Default Values: user and group are set as the running user -; mode is set to 0660 -listen.owner = www-data -listen.group = www-data -;listen.mode = 0660 -; When POSIX Access Control Lists are supported you can set them using -; these options, value is a comma separated list of user/group names. -; When set, listen.owner and listen.group are ignored -;listen.acl_users = -;listen.acl_groups = - -; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. -; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original -; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address -; must be separated by a comma. If this value is left blank, connections will be -; accepted from any ip address. -; Default Value: any -;listen.allowed_clients = 127.0.0.1 - -; Specify the nice(2) priority to apply to the pool processes (only if set) -; The value can vary from -19 (highest priority) to 20 (lower priority) -; Note: - It will only work if the FPM master process is launched as root -; - The pool processes will inherit the master process priority -; unless it specified otherwise -; Default Value: no set -; process.priority = -19 - -; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user -; or group is differrent than the master process user. It allows to create process -; core dump and ptrace the process for the pool user. -; Default Value: no -; process.dumpable = yes - -; Choose how the process manager will control the number of child processes. -; Possible Values: -; static - a fixed number (pm.max_children) of child processes; -; dynamic - the number of child processes are set dynamically based on the -; following directives. With this process management, there will be -; always at least 1 children. -; pm.max_children - the maximum number of children that can -; be alive at the same time. -; pm.start_servers - the number of children created on startup. -; pm.min_spare_servers - the minimum number of children in 'idle' -; state (waiting to process). If the number -; of 'idle' processes is less than this -; number then some children will be created. -; pm.max_spare_servers - the maximum number of children in 'idle' -; state (waiting to process). If the number -; of 'idle' processes is greater than this -; number then some children will be killed. -; ondemand - no children are created at startup. Children will be forked when -; new requests will connect. The following parameter are used: -; pm.max_children - the maximum number of children that -; can be alive at the same time. -; pm.process_idle_timeout - The number of seconds after which -; an idle process will be killed. -; Note: This value is mandatory. -pm = dynamic - -; The number of child processes to be created when pm is set to 'static' and the -; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'. -; This value sets the limit on the number of simultaneous requests that will be -; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. -; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP -; CGI. The below defaults are based on a server without much resources. Don't -; forget to tweak pm.* to fit your needs. -; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' -; Note: This value is mandatory. -pm.max_children = 5 - -; The number of child processes created on startup. -; Note: Used only when pm is set to 'dynamic' -; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 -pm.start_servers = 2 - -; The desired minimum number of idle server processes. -; Note: Used only when pm is set to 'dynamic' -; Note: Mandatory when pm is set to 'dynamic' -pm.min_spare_servers = 1 - -; The desired maximum number of idle server processes. -; Note: Used only when pm is set to 'dynamic' -; Note: Mandatory when pm is set to 'dynamic' -pm.max_spare_servers = 3 - -; The number of seconds after which an idle process will be killed. -; Note: Used only when pm is set to 'ondemand' -; Default Value: 10s -;pm.process_idle_timeout = 10s; - -; The number of requests each child process should execute before respawning. -; This can be useful to work around memory leaks in 3rd party libraries. For -; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. -; Default Value: 0 -;pm.max_requests = 500 - -; The URI to view the FPM status page. If this value is not set, no URI will be -; recognized as a status page. It shows the following informations: -; pool - the name of the pool; -; process manager - static, dynamic or ondemand; -; start time - the date and time FPM has started; -; start since - number of seconds since FPM has started; -; accepted conn - the number of request accepted by the pool; -; listen queue - the number of request in the queue of pending -; connections (see backlog in listen(2)); -; max listen queue - the maximum number of requests in the queue -; of pending connections since FPM has started; -; listen queue len - the size of the socket queue of pending connections; -; idle processes - the number of idle processes; -; active processes - the number of active processes; -; total processes - the number of idle + active processes; -; max active processes - the maximum number of active processes since FPM -; has started; -; max children reached - number of times, the process limit has been reached, -; when pm tries to start more children (works only for -; pm 'dynamic' and 'ondemand'); -; Value are updated in real time. -; Example output: -; pool: www -; process manager: static -; start time: 01/Jul/2011:17:53:49 +0200 -; start since: 62636 -; accepted conn: 190460 -; listen queue: 0 -; max listen queue: 1 -; listen queue len: 42 -; idle processes: 4 -; active processes: 11 -; total processes: 15 -; max active processes: 12 -; max children reached: 0 -; -; By default the status page output is formatted as text/plain. Passing either -; 'html', 'xml' or 'json' in the query string will return the corresponding -; output syntax. Example: -; http://www.foo.bar/status -; http://www.foo.bar/status?json -; http://www.foo.bar/status?html -; http://www.foo.bar/status?xml -; -; By default the status page only outputs short status. Passing 'full' in the -; query string will also return status for each pool process. -; Example: -; http://www.foo.bar/status?full -; http://www.foo.bar/status?json&full -; http://www.foo.bar/status?html&full -; http://www.foo.bar/status?xml&full -; The Full status returns for each process: -; pid - the PID of the process; -; state - the state of the process (Idle, Running, ...); -; start time - the date and time the process has started; -; start since - the number of seconds since the process has started; -; requests - the number of requests the process has served; -; request duration - the duration in µs of the requests; -; request method - the request method (GET, POST, ...); -; request URI - the request URI with the query string; -; content length - the content length of the request (only with POST); -; user - the user (PHP_AUTH_USER) (or '-' if not set); -; script - the main script called (or '-' if not set); -; last request cpu - the %cpu the last request consumed -; it's always 0 if the process is not in Idle state -; because CPU calculation is done when the request -; processing has terminated; -; last request memory - the max amount of memory the last request consumed -; it's always 0 if the process is not in Idle state -; because memory calculation is done when the request -; processing has terminated; -; If the process is in Idle state, then informations are related to the -; last request the process has served. Otherwise informations are related to -; the current request being served. -; Example output: -; ************************ -; pid: 31330 -; state: Running -; start time: 01/Jul/2011:17:53:49 +0200 -; start since: 63087 -; requests: 12808 -; request duration: 1250261 -; request method: GET -; request URI: /test_mem.php?N=10000 -; content length: 0 -; user: - -; script: /home/fat/web/docs/php/test_mem.php -; last request cpu: 0.00 -; last request memory: 0 -; -; Note: There is a real-time FPM status monitoring sample web page available -; It's available in: /usr/share/php/7.0/fpm/status.html -; -; Note: The value must start with a leading slash (/). The value can be -; anything, but it may not be a good idea to use the .php extension or it -; may conflict with a real PHP file. -; Default Value: not set -;pm.status_path = /status - -; The ping URI to call the monitoring page of FPM. If this value is not set, no -; URI will be recognized as a ping page. This could be used to test from outside -; that FPM is alive and responding, or to -; - create a graph of FPM availability (rrd or such); -; - remove a server from a group if it is not responding (load balancing); -; - trigger alerts for the operating team (24/7). -; Note: The value must start with a leading slash (/). The value can be -; anything, but it may not be a good idea to use the .php extension or it -; may conflict with a real PHP file. -; Default Value: not set -;ping.path = /ping - -; This directive may be used to customize the response of a ping request. The -; response is formatted as text/plain with a 200 response code. -; Default Value: pong -;ping.response = pong - -; The access log file -; Default: not set -;access.log = log/$pool.access.log - -; The access log format. -; The following syntax is allowed -; %%: the '%' character -; %C: %CPU used by the request -; it can accept the following format: -; - %{user}C for user CPU only -; - %{system}C for system CPU only -; - %{total}C for user + system CPU (default) -; %d: time taken to serve the request -; it can accept the following format: -; - %{seconds}d (default) -; - %{miliseconds}d -; - %{mili}d -; - %{microseconds}d -; - %{micro}d -; %e: an environment variable (same as $_ENV or $_SERVER) -; it must be associated with embraces to specify the name of the env -; variable. Some exemples: -; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e -; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e -; %f: script filename -; %l: content-length of the request (for POST request only) -; %m: request method -; %M: peak of memory allocated by PHP -; it can accept the following format: -; - %{bytes}M (default) -; - %{kilobytes}M -; - %{kilo}M -; - %{megabytes}M -; - %{mega}M -; %n: pool name -; %o: output header -; it must be associated with embraces to specify the name of the header: -; - %{Content-Type}o -; - %{X-Powered-By}o -; - %{Transfert-Encoding}o -; - .... -; %p: PID of the child that serviced the request -; %P: PID of the parent of the child that serviced the request -; %q: the query string -; %Q: the '?' character if query string exists -; %r: the request URI (without the query string, see %q and %Q) -; %R: remote IP address -; %s: status (response code) -; %t: server time the request was received -; it can accept a strftime(3) format: -; %d/%b/%Y:%H:%M:%S %z (default) -; The strftime(3) format must be encapsuled in a %{}t tag -; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t -; %T: time the log has been written (the request has finished) -; it can accept a strftime(3) format: -; %d/%b/%Y:%H:%M:%S %z (default) -; The strftime(3) format must be encapsuled in a %{}t tag -; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t -; %u: remote user -; -; Default: "%R - %u %t \"%m %r\" %s" -;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" - -; The log file for slow requests -; Default Value: not set -; Note: slowlog is mandatory if request_slowlog_timeout is set -;slowlog = log/$pool.log.slow - -; The timeout for serving a single request after which a PHP backtrace will be -; dumped to the 'slowlog' file. A value of '0s' means 'off'. -; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) -; Default Value: 0 -;request_slowlog_timeout = 0 - -; The timeout for serving a single request after which the worker process will -; be killed. This option should be used when the 'max_execution_time' ini option -; does not stop script execution for some reason. A value of '0' means 'off'. -; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) -; Default Value: 0 -request_terminate_timeout = 1d - -; Set open file descriptor rlimit. -; Default Value: system defined value -;rlimit_files = 1024 - -; Set max core size rlimit. -; Possible Values: 'unlimited' or an integer greater or equal to 0 -; Default Value: system defined value -;rlimit_core = 0 - -; Chroot to this directory at the start. This value must be defined as an -; absolute path. When this value is not set, chroot is not used. -; Note: you can prefix with '$prefix' to chroot to the pool prefix or one -; of its subdirectories. If the pool prefix is not set, the global prefix -; will be used instead. -; Note: chrooting is a great security feature and should be used whenever -; possible. However, all PHP paths will be relative to the chroot -; (error_log, sessions.save_path, ...). -; Default Value: not set -;chroot = - -; Chdir to this directory at the start. -; Note: relative path can be used. -; Default Value: current directory or / when chroot -chdir = __FINALPATH__ - -; Redirect worker stdout and stderr into main error log. If not set, stdout and -; stderr will be redirected to /dev/null according to FastCGI specs. -; Note: on highloaded environement, this can cause some delay in the page -; process time (several ms). -; Default Value: no -;catch_workers_output = yes - -; Clear environment in FPM workers -; Prevents arbitrary environment variables from reaching FPM worker processes -; by clearing the environment in workers before env vars specified in this -; pool configuration are added. -; Setting to "no" will make all environment variables available to PHP code -; via getenv(), $_ENV and $_SERVER. -; Default Value: yes -;clear_env = no - -; Limits the extensions of the main script FPM will allow to parse. This can -; prevent configuration mistakes on the web server side. You should only limit -; FPM to .php extensions to prevent malicious users to use other extensions to -; execute php code. -; Note: set an empty value to allow all extensions. -; Default Value: .php -;security.limit_extensions = .php .php3 .php4 .php5 .php7 - -; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from -; the current environment. -; Default Value: clean env -;env[HOSTNAME] = $HOSTNAME -;env[PATH] = /usr/local/bin:/usr/bin:/bin -;env[TMP] = /tmp -;env[TMPDIR] = /tmp -;env[TEMP] = /tmp - -; Additional php.ini defines, specific to this pool of workers. These settings -; overwrite the values previously defined in the php.ini. The directives are the -; same as the PHP SAPI: -; php_value/php_flag - you can set classic ini defines which can -; be overwritten from PHP call 'ini_set'. -; php_admin_value/php_admin_flag - these directives won't be overwritten by -; PHP call 'ini_set' -; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. - -; Defining 'extension' will load the corresponding shared extension from -; extension_dir. Defining 'disable_functions' or 'disable_classes' will not -; overwrite previously defined php.ini values, but will append the new value -; instead. - -; Note: path INI options can be relative and will be expanded with the prefix -; (pool, global or /usr) - -; Default Value: nothing is defined by default except the values in php.ini and -; specified at startup with the -d argument -;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com -;php_flag[display_errors] = off -;php_admin_value[error_log] = /var/log/fpm-php.www.log -;php_admin_flag[log_errors] = on -;php_admin_value[memory_limit] = 32M - -; Common values to change to increase file upload limit -; php_admin_value[upload_max_filesize] = 50M -; php_admin_value[post_max_size] = 50M -; php_admin_flag[mail.add_x_header] = Off - -; Other common parameters -; php_admin_value[max_execution_time] = 600 -; php_admin_value[max_input_time] = 300 -; php_admin_value[memory_limit] = 256M -; php_admin_flag[short_open_tag] = On diff --git a/manifest.json b/manifest.json index bc171fb..853a37c 100644 --- a/manifest.json +++ b/manifest.json @@ -3,23 +3,23 @@ "id": "ampache", "packaging_format": 1, "description": { - "en": "A web based audio/video streaming application", - "fr": "Une application de streaming audio et vidéo" + "en": "Web based audio/video streaming application", + "fr": "Application de streaming audio et vidéo" }, - "version": "3.9.0~ynh2", + "version": "4.4.0~ynh1", "url": "http://ampache.org", "license": "AGPL-3.0", "maintainer": { "name": "aymhce", "email": "aymhce@gmail.com" }, - "multi_instance": true, "requirements": { - "yunohost": ">= 3.5.0" + "yunohost": ">= 4.0.0" }, + "multi_instance": true, "services" : [ "nginx", - "php7.0-fpm", + "php7.3-fpm", "mysql" ], "arguments": { @@ -48,7 +48,7 @@ "type": "user", "ask": { "en": "Choose the Ampache administrator (must be an existing YunoHost user)", - "fr": "Administrateur du serveur Ampache (doit etre un utilisateur Yunohost existant)" + "fr": "Administrateur du serveur Ampache (doit être un utilisateur YunoHost existant)" }, "example": "homer" }, diff --git a/pull_request_template.md b/pull_request_template.md index 0b0593e..6c28fc5 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -13,6 +13,4 @@ ## Package_check results --- -*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results* - -[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/ampache_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/ampache_ynh%20PR-NUM-%20(USERNAME)/) +* An automatic package_check will be launch at https://ci-apps-dev.yunohost.org/, when you add a specific comment to your Pull Request: "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!"* diff --git a/scripts/_common.sh b/scripts/_common.sh index 5258b61..981bf56 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,12 +1,29 @@ #!/bin/bash +#================================================= +# COMMON VARIABLES +#================================================= + +# dependencies used by the app +pkg_dependencies="libav-tools|ffmpeg" + +YNH_PHP_VERSION="7.3" + +extra_php_dependencies="php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-simplexml php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-ldap" + #================================================= # EXPERIMENTAL HELPERS #================================================= +readonly YNH_DEFAULT_COMPOSER_VERSION=1.10.17 +# Declare the actual composer version to use. +# A packager willing to use another version of composer can override the variable into its _common.sh. +YNH_COMPOSER_VERSION=${YNH_COMPOSER_VERSION:-$YNH_DEFAULT_COMPOSER_VERSION} + # Execute a command with Composer # -# usage: ynh_composer_exec --phpversion=phpversion [--workdir=$final_path] --commands="commands" +# usage: ynh_composer_exec [--phpversion=phpversion] [--workdir=$final_path] --commands="commands" +# | arg: -v, --phpversion - PHP version to use with composer # | arg: -w, --workdir - The directory from where the command will be executed. Default $final_path. # | arg: -c, --commands - Commands to execute. ynh_composer_exec () { @@ -19,7 +36,7 @@ ynh_composer_exec () { # Manage arguments with getopts ynh_handle_getopts_args "$@" workdir="${workdir:-$final_path}" - phpversion="${phpversion:-7.3}" + phpversion="${phpversion:-$YNH_PHP_VERSION}" COMPOSER_HOME="$workdir/.composer" \ php${phpversion} "$workdir/composer.phar" $commands \ @@ -28,29 +45,37 @@ ynh_composer_exec () { # Install and initialize Composer in the given directory # -# usage: ynh_install_composer --phpversion=phpversion [--workdir=$final_path] +# usage: ynh_install_composer [--phpversion=phpversion] [--workdir=$final_path] [--install_args="--optimize-autoloader"] [--composerversion=composerversion] +# | arg: -v, --phpversion - PHP version to use with composer # | arg: -w, --workdir - The directory from where the command will be executed. Default $final_path. +# | arg: -a, --install_args - Additional arguments provided to the composer install. Argument --no-dev already include +# | arg: -c, --composerversion - Composer version to install ynh_install_composer () { # Declare an array to define the options of this helper. - local legacy_args=vw - declare -Ar args_array=( [v]=phpversion= [w]=workdir= ) + local legacy_args=vwa + declare -Ar args_array=( [v]=phpversion= [w]=workdir= [a]=install_args= [c]=composerversion=) local phpversion local workdir + local install_args + local composerversion # Manage arguments with getopts ynh_handle_getopts_args "$@" workdir="${workdir:-$final_path}" - phpversion="${phpversion:-7.3}" + phpversion="${phpversion:-$YNH_PHP_VERSION}" + install_args="${install_args:-}" + composerversion="${composerversion:-$YNH_COMPOSER_VERSION}" curl -sS https://getcomposer.org/installer \ | COMPOSER_HOME="$workdir/.composer" \ - php${phpversion} -- --quiet --install-dir="$workdir" \ + php${phpversion} -- --quiet --install-dir="$workdir" --version=$composerversion \ || ynh_die "Unable to install Composer." # update dependencies to create composer.lock - ynh_composer_exec --phpversion="${phpversion}" --workdir="$workdir" --commands="install --no-dev" \ + ynh_composer_exec --phpversion="${phpversion}" --workdir="$workdir" --commands="install --no-dev $install_args" \ || ynh_die "Unable to update core dependencies with Composer." } + #================================================= # FUTURE OFFICIAL HELPERS #================================================= @@ -63,7 +88,7 @@ ynh_multimedia_build_main_dir () { local checksum="806a827ba1902d6911095602a9221181" # Download yunohost.multimedia scripts - wget -nv https://github.com/YunoHost-Apps/yunohost.multimedia/archive/${ynh_media_release}.tar.gz + wget -nv https://github.com/YunoHost-Apps/yunohost.multimedia/archive/${ynh_media_release}.tar.gz 2>&1 # Check the control sum echo "${checksum} ${ynh_media_release}.tar.gz" | md5sum -c --status \ diff --git a/scripts/backup b/scripts/backup index 13a0d3e..59d0489 100644 --- a/scripts/backup +++ b/scripts/backup @@ -6,6 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -19,7 +20,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --weight=2 +ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -28,32 +29,32 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) db_name=$(ynh_app_setting_get --app=$app --key=db_name) #================================================= -# STANDARD BACKUP STEPS +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + #================================================= # BACKUP THE APP MAIN DIR #================================================= -ynh_script_progression --message="Backing up the main app directory..." ynh_backup --src_path="$final_path" #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Backing up nginx web server configuration..." ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # BACKUP THE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Backing up php-fpm configuration..." -ynh_backup --src_path="/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_backup --src_path="/etc/php/${YNH_PHP_VERSION}/fpm/pool.d/$app.conf" #================================================= # BACKUP THE MYSQL DATABASE #================================================= -ynh_script_progression --message="Backing up the MySQL database..." +ynh_print_info --message="Backing up the MySQL database..." ynh_mysql_dump_db --database="$db_name" > db.sql @@ -61,4 +62,4 @@ ynh_mysql_dump_db --database="$db_name" > db.sql # END OF SCRIPT #================================================= -ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/change_url b/scripts/change_url index 857edfe..64103c0 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -50,7 +50,7 @@ fi #================================================= # MODIFY URL IN NGINX CONF #================================================= -ynh_script_progression --message="Updating nginx web server configuration..." --weight=2 +ynh_script_progression --message="Updating NGINX web server configuration..." --weight=2 nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf @@ -81,7 +81,7 @@ fi #================================================= # CHANGE AMPACHE CONFIGURATION #================================================= -ynh_script_progression --message="Updating ampache configuration..." +ynh_script_progression --message="Updating Ampache configuration..." conf_file="$final_path/config/ampache.cfg.php" @@ -93,7 +93,7 @@ ynh_replace_string --match_string="\(http_host.*=.*\)\"$old_domain\"" --replace_ #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/install b/scripts/install index fb18371..720c64f 100644 --- a/scripts/install +++ b/scripts/install @@ -55,7 +55,7 @@ ynh_app_setting_set --app=$app --key=is_public --value=$is_public #================================================= ynh_script_progression --message="Installing dependencies..." --weight=25 -ynh_install_app_dependencies "libav-tools|ffmpeg" php-cli +ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE A MYSQL DATABASE @@ -63,8 +63,9 @@ ynh_install_app_dependencies "libav-tools|ffmpeg" php-cli ynh_script_progression --message="Creating a MySQL database..." db_name=$(ynh_sanitize_dbid --db_name=$app) +db_user=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name -ynh_mysql_setup_db --db_user=$db_name --db_name=$db_name +ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -78,7 +79,7 @@ ynh_setup_source --dest_dir="$final_path" #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Configuring nginx web server..." +ynh_script_progression --message="Configuring NGINX web server..." # Create a dedicated nginx config ynh_add_nginx_config @@ -94,22 +95,22 @@ ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Configuring php-fpm..." +ynh_script_progression --message="Configuring PHP-FPM..." # Create a dedicated php-fpm config -ynh_add_fpm_config +ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" #================================================= # SPECIFIC SETUP #================================================= # CONFIGURE AMPACHE #================================================= -ynh_script_progression --message="Preconfiguring ampache..." --weight=2 +ynh_script_progression --message="Preconfiguring Ampache..." --weight=2 conf_file="$final_path/config/ampache.cfg.php" cp ../conf/ampache.cfg.php "$conf_file" -ynh_replace_string --match_string="__DBUSER__" --replace_string="$db_name" --target_file="$conf_file" +ynh_replace_string --match_string="__DBUSER__" --replace_string="$db_user" --target_file="$conf_file" ynh_replace_string --match_string="__DBPWD__" --replace_string="$db_pwd" --target_file="$conf_file" ynh_replace_string --match_string="__DBNAME__" --replace_string="$db_name" --target_file="$conf_file" ynh_replace_string --match_string="__PATHTOCHANGE__" --replace_string="$path_url" --target_file="$conf_file" @@ -124,6 +125,7 @@ ynh_store_file_checksum --file="$conf_file" #================================================= # LOAD DEFAULT DATABASE #================================================= +ynh_script_progression --message="Loading default database..." # Load default ampache database ynh_mysql_connect_as --user=$app --password="$db_pwd" --database=$app < "$final_path/sql/ampache.sql" @@ -131,30 +133,27 @@ ynh_mysql_connect_as --user=$app --password="$db_pwd" --database=$app < "$final_ #================================================= # INSTALL AMPACHE WITH COMPOSER #================================================= -ynh_script_progression --message="Installing ampache with composer..." --weight=45 +ynh_script_progression --message="Installing ampache with Composer..." --weight=45 # Install composer -ynh_install_composer - -ynh_exec_warn_less ynh_composer_exec --commands=\"install --prefer-source --no-dev\" +ynh_install_composer --phpversion="${YNH_PHP_VERSION}" --workdir="$final_path" --install_args="--prefer-source --no-dev" #================================================= # INSTALL MULTIMEDIA DIRECTORIES #================================================= +ynh_script_progression --message="Installing multimedia directories..." --weight=5 ynh_multimedia_build_main_dir #================================================= # PRE CONFIGURE AMPACHE #================================================= -ynh_script_progression --message="Configuring ampache..." --weight=5 +ynh_script_progression --message="Configuring Ampache..." --weight=5 # Set the app as temporarily public for curl call -ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" -# Reload SSOwat config -yunohost app ssowatconf +ynh_permission_update --permission="main" --add="visitors" -# Reload Nginx +# Reload NGINX ynh_systemd_action --service_name=nginx --action=reload ynh_local_curl /update.php?action=update @@ -163,6 +162,7 @@ sleep 1 #================================================= # LOAD ADMIN DATABASE #================================================= +ynh_script_progression --message="Loading admin database..." cp ../conf/admin.sql /tmp/ ynh_replace_string --match_string="__ADMIN__" --replace_string="$admin_ampache" --target_file=/tmp/admin.sql @@ -176,6 +176,7 @@ ynh_secure_remove --file=/tmp/admin.sql #================================================= # SECURE FILES AND DIRECTORIES #================================================= +ynh_script_progression --message="Securing files and directories..." # Set permissions to ampache directory chown -R $app: $final_path @@ -183,18 +184,17 @@ chown -R $app: $final_path #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Configuring SSOwat..." +ynh_script_progression --message="Configuring permissions..." -# Keep app public if necessary if [ $is_public -eq 0 ] then - ynh_app_setting_delete --app=$app --key=unprotected_uris + ynh_permission_update --permission="main" --remove="visitors" fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/remove b/scripts/remove index 71899c1..f2a5098 100644 --- a/scripts/remove +++ b/scripts/remove @@ -18,6 +18,7 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= @@ -28,7 +29,7 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) ynh_script_progression --message="Removing the MySQL database..." --weight=3 # Remove a database if it exists, along with the associated user -ynh_mysql_remove_db --db_user=$db_name --db_name=$db_name +ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name #================================================= # REMOVE DEPENDENCIES @@ -49,7 +50,7 @@ ynh_secure_remove --file="$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Removing nginx web server configuration..." +ynh_script_progression --message="Removing NGINX web server configuration..." # Remove the dedicated nginx config ynh_remove_nginx_config @@ -57,7 +58,7 @@ ynh_remove_nginx_config #================================================= # REMOVE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Removing php-fpm configuration..." +ynh_script_progression --message="Removing PHP-FPM configuration..." # Remove the dedicated php-fpm config ynh_remove_fpm_config diff --git a/scripts/restore b/scripts/restore index b386bcf..db47654 100644 --- a/scripts/restore +++ b/scripts/restore @@ -6,6 +6,8 @@ # IMPORT GENERIC HELPERS #================================================= +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers #================================================= @@ -25,6 +27,7 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) path_url=$(ynh_app_setting_get --app=$app --key=path) final_path=$(ynh_app_setting_get --app=$app --key=final_path) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name #================================================= # CHECK IF THE APP CAN BE RESTORED @@ -41,6 +44,7 @@ test ! -d $final_path \ #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Restoring the NGINX configuration..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" @@ -62,6 +66,7 @@ ynh_system_user_create --username=$app #================================================= # RESTORE USER RIGHTS #================================================= +ynh_script_progression --message="Restoring user rights..." # Restore permissions on app files chown -R $app: $final_path @@ -69,8 +74,12 @@ chown -R $app: $final_path #================================================= # RESTORE THE PHP-FPM CONFIGURATION #================================================= +ynh_script_progression --message="Restoring PHP-FPM configuration..." -ynh_restore_file --origin_path="/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_restore_file --origin_path="/etc/php/${YNH_PHP_VERSION}/fpm/pool.d/$app.conf" + +# Recreate a dedicated php-fpm config +ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" #================================================= # SPECIFIC RESTORATION @@ -79,7 +88,8 @@ ynh_restore_file --origin_path="/etc/php/7.0/fpm/pool.d/$app.conf" #================================================= ynh_script_progression --message="Reinstalling dependencies..." --weight=30 -ynh_install_app_dependencies ffmpeg +# Define and install dependencies +ynh_install_app_dependencies $pkg_dependencies #================================================= # RESTORE THE MYSQL DATABASE @@ -87,17 +97,17 @@ ynh_install_app_dependencies ffmpeg ynh_script_progression --message="Restoring the MySQL database..." --weight=5 db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) -ynh_mysql_setup_db --db_user=$db_name --db_name=$db_name --db_pwd=$db_pwd -ynh_mysql_connect_as --user=$db_name --password=$db_pwd --database=$db_name < ./db.sql +ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd +ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql #================================================= # GENERIC FINALIZATION #================================================= # RELOAD NGINX AND PHP-FPM #================================================= -ynh_script_progression --message="Reloading nginx web server and php-fpm..." +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." -ynh_systemd_action --service_name=php7.0-fpm --action=reload +ynh_systemd_action --service_name=php${YNH_PHP_VERSION}-fpm --action=reload ynh_systemd_action --service_name=nginx --action=reload #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index ff7ede6..4e145db 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,5 +1,7 @@ #!/bin/bash +#================================================= +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -20,11 +22,13 @@ admin_ampache=$(ynh_app_setting_get --app=$app --key=admin) is_public=$(ynh_app_setting_get --app=$app --key=is_public) final_path=$(ynh_app_setting_get --app=$app --key=final_path) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name secret_key=$(ynh_app_setting_get --app=$app --key=secret_key) #================================================= # CHECK VERSION #================================================= +ynh_script_progression --message="Checking version..." upgrade_type=$(ynh_check_app_version_changed) @@ -52,6 +56,7 @@ fi if [ -z "$db_name" ]; then db_name=$(ynh_sanitize_dbid --db_name=$app) ynh_app_setting_set --app=$app --key=db_name --value=$db_name + db_user=$db_name fi # If final_path doesn't exist, create it @@ -66,7 +71,12 @@ if [ -z "$secret_key" ]; then ynh_app_setting_set --app=$app --key=secret_key --value=$secret_key fi -ynh_app_setting_delete --app=$app --key=skipped_uris +# Cleaning legacy permissions +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public +fi #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP @@ -82,13 +92,6 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors -#================================================= -# CHECK THE PATH -#================================================= - -# Normalize the URL path syntax -path_url=$(ynh_normalize_url_path --path_url=$path_url) - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -104,7 +107,7 @@ fi #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading nginx web server configuration..." --weight=3 +ynh_script_progression --message="Upgrading NGINX web server configuration..." --weight=3 # Create a dedicated nginx config ynh_add_nginx_config @@ -114,7 +117,7 @@ ynh_add_nginx_config #================================================= ynh_script_progression --message="Upgrading dependencies..." --weight=5 -ynh_install_app_dependencies ffmpeg php-cli +ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER @@ -127,10 +130,10 @@ ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading php-fpm configuration..." --weight=2 +ynh_script_progression --message="Upgrading PHP-FPM configuration..." --weight=2 # Create a dedicated php-fpm config -ynh_add_fpm_config +ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" #================================================= # SPECIFIC UPGRADE @@ -140,12 +143,12 @@ ynh_add_fpm_config if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrading ampache configuration..." + ynh_script_progression --message="Upgrading Ampache configuration..." conf_file="$final_path/config/ampache.cfg.php" ynh_backup_if_checksum_is_different --file="$conf_file" - ynh_replace_string --match_string="__DBUSER__" --replace_string="$db_name" --target_file="$conf_file" + ynh_replace_string --match_string="__DBUSER__" --replace_string="$db_user" --target_file="$conf_file" db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) ynh_replace_string --match_string="__DBPWD__" --replace_string="$db_pwd" --target_file="$conf_file" ynh_replace_string --match_string="__DBNAME__" --replace_string="$db_name" --target_file="$conf_file" @@ -159,18 +162,17 @@ then #================================================= # UPDATE AMPACHE WITH COMPOSER #================================================= - ynh_script_progression --message="Upgrading ampache with composer..." --weight=30 + ynh_script_progression --message="Upgrading ampache with Composer..." --weight=30 # Install composer - ynh_install_composer - - ynh_composer_exec --commands="config discard-changes true" - ynh_composer_exec --commands="update --prefer-source --no-interaction --no-dev" + ynh_install_composer --phpversion="${YNH_PHP_VERSION}" --workdir="$final_path" --install_args="--prefer-source --no-dev" + ynh_composer_exec --phpversion="${YNH_PHP_VERSION}" --workdir="$final_path" --commands="config discard-changes true" fi #================================================= # UPDATE MULTIMEDIA DIRECTORIES #================================================= +ynh_script_progression --message="Updating multimedia directories..." ynh_multimedia_build_main_dir @@ -180,14 +182,12 @@ ynh_multimedia_build_main_dir if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrading ampache with curl..." --weight=6 + ynh_script_progression --message="Upgrading Ampache with cURL..." --weight=6 # Set the app as temporarily public for curl call - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" - # Reload SSOwat config - yunohost app ssowatconf + ynh_permission_update --permission="main" --add="visitors" - # Reload Nginx + # Reload NGINX ynh_systemd_action --service_name=nginx --action=reload ynh_local_curl /update.php?action=update @@ -199,6 +199,7 @@ fi #================================================= # SECURE FILES AND DIRECTORIES #================================================= +ynh_script_progression --message="Securing files and directories..." # Set permissions on app files chown -R $app: $final_path @@ -206,18 +207,17 @@ chown -R $app: $final_path #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Upgrading SSOwat configuration..." +ynh_script_progression --message="Configuring permissions..." -# Keep app public if necessary if [ $is_public -eq 0 ] then - ynh_app_setting_delete --app=$app --key=unprotected_uris + ynh_permission_update --permission="main" --remove="visitors" fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload