From c60f000cacff5907c46dabf281bff8fb51a84236 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Mon, 11 Feb 2019 20:21:00 +0100 Subject: [PATCH] Normalization from example_ynh --- README.md | 20 +- conf/admin.sql | 2 +- conf/ampache.cfg.php | 12 +- conf/ampache.cfg.php.dist | 1081 ------------------------------------- conf/app.src | 9 +- conf/nginx.conf | 9 +- conf/php-fpm.conf | 430 +++++++++++++++ manifest.json | 12 +- scripts/_common.sh | 68 +-- scripts/backup | 25 +- scripts/install | 158 ++++-- scripts/remove | 59 +- scripts/restore | 76 ++- scripts/upgrade | 151 +++++- 14 files changed, 825 insertions(+), 1287 deletions(-) delete mode 100644 conf/ampache.cfg.php.dist create mode 100644 conf/php-fpm.conf diff --git a/README.md b/README.md index d687c57..4ed9eca 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Ampache for YunoHost -[![Integration level](https://dash.yunohost.org/integration/ampache.svg)](https://ci-apps.yunohost.org/jenkins/job/ampache%20%28Official%29/lastBuild/consoleFull) +[![Integration level](https://dash.yunohost.org/integration/ampache.svg)](https://dash.yunohost.org/appci/app/ampache) [![Install Ampache with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ampache) -> *This package allow you to install ampache quickly and simply on a YunoHost server. +> *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 @@ -17,11 +17,15 @@ music & videos from anywhere, using almost any internet enabled device. ![](http://ampache.org/img/previews/visualizer.jpg) +## Demo + +* [YunoHost demo](https://demo.yunohost.org/ampache/) + ## Configuration ## Documentation - * Official documentation: + * Official documentation: https://github.com/ampache/ampache/wiki * YunoHost documentation: There no other documentations, feel free to contribute. ## YunoHost specific features @@ -41,12 +45,12 @@ this package: #### Supported architectures -* Tested on x86_64 -* Tested on armhf +* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/ampache%20%28Official%29.svg)](https://ci-apps.yunohost.org/ci/apps/ampache/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/ampache%20%28Official%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%28Official%29.svg)](https://ci-stretch.nohost.me/ci/apps/ampache/) ## Limitations -* The user panel button was disabled because it hides an essential part of the ampache user interface. * 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. @@ -91,7 +95,7 @@ Please do your pull request to the [testing branch](https://github.com/YunoHost- To try the testing branch, please proceed like that. ``` -sudo yunohost app install https://github.com/YunoHost-Apps/ampache_ynh/tree/testing --verbose +sudo yunohost app install https://github.com/YunoHost-Apps/ampache_ynh/tree/testing --debug or -sudo yunohost app upgrade ampache -u https://github.com/YunoHost-Apps/ampache_ynh/tree/testing --verbose +sudo yunohost app upgrade ampache -u https://github.com/YunoHost-Apps/ampache_ynh/tree/testing --debug ``` diff --git a/conf/admin.sql b/conf/admin.sql index c190924..050f1e3 100644 --- a/conf/admin.sql +++ b/conf/admin.sql @@ -1,4 +1,4 @@ -INSERT INTO user(id,username,fullname,access) VALUES("", "yunoadmin", "yunoadmin", "100"); +INSERT INTO user(id,username,fullname,access) VALUES("", "__ADMIN__", "__ADMIN__", "100"); UPDATE `user_preference` SET `value` = 'en_US' WHERE `preference` = 31 ; diff --git a/conf/ampache.cfg.php b/conf/ampache.cfg.php index e684ead..104e255 100644 --- a/conf/ampache.cfg.php +++ b/conf/ampache.cfg.php @@ -17,7 +17,7 @@ config_version = 34 ; If not set, retrieved automatically from client request. ; This setting is required for WebSocket server ; DEFAULT: "" -http_host = "DOMAINTOCHANGE" +http_host = "__DOMAINTOCHANGE__" ; The public http port of your server. ; If not set, retrieved automatically from client request. @@ -31,7 +31,7 @@ http_host = "DOMAINTOCHANGE" ; if it is located at http://localhost/music you need to ; set web_path to /music ; DEFAULT: "" -web_path = "PATHTOCHANGE" +web_path = "__PATHTOCHANGE__" ; The local http url of your server. ; If not set, retrieved automatically from server information. @@ -54,17 +54,17 @@ database_hostname = localhost ; Name of your ampache database ; DEFAULT: ampache -database_name = "yunobase" +database_name = "__DBNAME__" ; Username for your ampache database ; DEFAULT: "" -database_username = "yunouser" +database_username = "__DBUSER__" ; Password for your ampache database, this can not be blank ; this is a 'forced' security precaution, the default value ; will not work (except if using socket authentication) ; DEFAULT: "" -database_password = "yunopass" +database_password = "__DBPWD__" ;######################################################### @@ -73,7 +73,7 @@ database_password = "yunopass" ; Cryptographic secret ; This MUST BE changed with your own secret key. Ampache-specific, just pick any random string you want. -secret_key = "RANDOMKEYTOCHANGE" +secret_key = "__RANDOMKEYTOCHANGE__" ; Length that a session will last expressed in seconds. Default is ; one hour. diff --git a/conf/ampache.cfg.php.dist b/conf/ampache.cfg.php.dist deleted file mode 100644 index 78a532a..0000000 --- a/conf/ampache.cfg.php.dist +++ /dev/null @@ -1,1081 +0,0 @@ -;### -;######################################################### -; General Config # -;######################################################### - -; This value is used to detect quickly -; if this config file is up to date -; this is compared against a value hard-coded -; into the init script -config_version = 34 - -;######################################################### -; Path Vars # -;######################################################### - -; The public http host of your server. -; If not set, retrieved automatically from client request. -; This setting is required for WebSocket server -; DEFAULT: "" -;http_host = "localhost" - -; The public http port of your server. -; If not set, retrieved automatically from client request. -; DEFAULT: -;http_port = 80 - -; The public path to your ampache install -; Do not put a trailing / on this path -; For example if your site is located at http://localhost -; than you do not need to enter anything for the web_path -; if it is located at http://localhost/music you need to -; set web_path to /music -; DEFAULT: "" -;web_path = "" - -; The local http url of your server. -; If not set, retrieved automatically from server information. -; DEFAULT: "" -;local_web_path = "http://localhost/ampache" - - -;######################################################### -; Database # -;######################################################### - -; Hostname of your database -; For socket authentication, set the path to socket file (e.g. /var/run/mysqld/mysqld.sock) -; DEFAULT: localhost -database_hostname = localhost - -; Port to use when connecting to your database -; DEFAULT: none -;database_port = 3306 - -; Name of your ampache database -; DEFAULT: ampache -database_name = ampache - -; Username for your ampache database -; DEFAULT: "" -database_username = username - -; Password for your ampache database, this can not be blank -; this is a 'forced' security precaution, the default value -; will not work (except if using socket authentication) -; DEFAULT: "" -database_password = password - - -;######################################################### -; Session and Security # -;######################################################### - -; Cryptographic secret -; This MUST BE changed with your own secret key. Ampache-specific, just pick any random string you want. -secret_key = "abcdefghijklmnoprqstuvwyz0123456" - -; Length that a session will last expressed in seconds. Default is -; one hour. -; DEFAULT: 3600 -session_length = 3600 - -; Length that the session for a single streaming instance will last -; the default is two hours. With some clients, and long songs this can -; cause playback to stop, increase this value if you experience that -; DEFAULT: 7200 -stream_length = 7200 - -; This length defines how long a 'remember me' session and cookie will -; last, the default is 86400, same as length. It is up to the administrator -; of the box to increase this, for reference 86400 = 1 day, -; 604800 = 1 week, and 2419200 = 1 month -; DEFAULT: 604800 -remember_length = 604800 - -; Name of the Session/Cookie that will sent to the browser -; default should be fine -; DEFAULT: ampache -session_name = ampache - -; Lifetime of the Cookie, 0 == Forever (until browser close) , otherwise in terms of seconds -; If you want cookies to last past a browser close set this to a value in seconds. -; DEFAULT: 0 -session_cookielife = 0 - -; Is the cookie a "secure" cookie? This should only be set to 1 (true) if you are -; running a secure site (HTTPS). -; DEFAULT: 0 -session_cookiesecure = 0 - -; Auth Methods -; This defines which auth methods Auth will attempt to use and in which order. -; If auto_create isn't enabled the user must exist locally. -; DEFAULT: mysql -; VALUES: mysql,ldap,http,pam,external,openid -auth_methods = "mysql" - -; External authentication -; This sets the helper used for external authentication. It should conform to -; the interface used by mod_authnz_external -; DEFAULT: none -;external_authenticator = "/usr/sbin/pwauth" - -; Automatic local password updating -; Determines whether successful authentication against an external source -; will result in an update to the password stored in the database. -; A locally stored password is needed for API access. -; DEFAULT: false -;auth_password_save = "false" - -; Logout redirection target -; Defaults to our own login.php, but we can override it here if, for instance, -; we want to redirect to an SSO provider instead. -; logout_redirect = "http://sso.example.com/logout" - -; Use Access List -; Toggle this on if you want ampache to pay attention to the access list -; and only allow streaming/downloading/api-rpc from known hosts api-rpc -; will not work without this on. -; NOTE: Default Behavior is DENY FROM ALL -; DEFAULT: true -access_control = "true" - -; Require Session -; If this is set to true ampache will make sure that the URL passed when -; attempting to retrieve a song contains a valid Session ID This prevents -; others from guessing URL's. This setting is ignored if you have use_auth -; disabled. -; DEFAULT: true -require_session = "true" - -; Require LocalNet Session -; If this is set to true then ampache will require that a valid session -; is passed even on hosts defined in the Local Network ACL. This setting -; has no effect if access_control is not enabled -; DEFAULT: true -require_localnet_session = "true" - -; Multiple Logins -; Added by Vlet 07/25/07 -; When this setting is enabled a user may only be logged in from a single -; IP address at any one time, this is to prevent sharing of accounts -; DEFAULT: false -;prevent_multiple_logins = "false" - - -;######################################################### -; Metadata # -;######################################################### - -; This determines the tag order for all cataloged -; music. If none of the listed tags are found then -; ampache will randomly use whatever was found. -; POSSIBLE VALUES: ape asf avi id3v1 id3v2 lyrics3 matroska mpeg quicktime riff -; vorbiscomment -; DEFAULT: id3v2 id3v1 vorbiscomment quicktime matroska ape asf avi mpeg riff -getid3_tag_order = "id3v2,id3v1,vorbiscomment,quicktime,matroska,ape,asf,avi,mpeg,riff" - -; This determines whether we try to autodetect the encoding for id3v2 tags. -; May break valid tags. -; DEFAULT: false -;getid3_detect_id3v2_encoding = "false" - -; This determines if we write the changes to files (as id3 tags) when modifying metadata, or only keep them in Ampache (the default). -; DEFAULT: false -;write_id3 = "false" - -; This determines if we write the changes to files (as id3 tags) when modifying album art, or only keep them in Ampache (the default) -; as id3 metadata when updated. -; DEFAULT: false -;write_id3_art = "false" - -; This determines the order in which metadata sources are used (and in the -; case of plugins, checked) -; POSSIBLE VALUES (builtins): filename and getID3 -; POSSIBLE VALUES (plugins): MusicBrainz,TheAudioDb, plus any others you've installed. -; DEFAULT: getID3 filename -metadata_order = "getID3,filename" - -; This determines the order in which metadata sources are used (and in the -; case of plugins, checked) for video files -; POSSIBLE VALUES (builtins): filename and getID3 -; POSSIBLE VALUES (plugins): Tvdb,Tmdb,Omdb, plus any others you've installed. -; DEFAULT: filename getID3 -metadata_order_video = "filename,getID3" - -; This determines if extended metadata grabbed from external services should be deferred. -; If enabled, extended metadata is retrieved when browsing the library item. -; If disabled, extended metadata is retrieved at catalog update. -; Today, only Artist information (summary, place formed, ...) can be deferred. -; DEFAULT: true -deferred_ext_metadata = "true" - -; Some taggers use delimiters other than \0 for fields -; This list specifies possible delimiters additional to \0 -; This setting takes a regex pattern. -; DEFAULT: // / \ | , ; -additional_genre_delimiters = "[/]{2}|[/|\\\\|\|,|;]" - -; Enable importing custom metadata from files. -; This will need a bit of time during the import. So you may want to disable this -; if you have troubles with huge databases. -; DEFAULT: false -;enable_custom_metadata = "false" - - -;######################################################### -; Catalog # -;######################################################### - -; File Pattern -; This defines which file types Ampache will attempt to catalog -; You can specify any file extension you want in here separating them -; with a | -; DEFAULT: mp3|mpc|m4p|m4a|aac|ogg|oga|wav|aif|aiff|rm|wma|asf|flac|opus|spx|ra|ape|shn|wv -catalog_file_pattern = "mp3|mpc|m4p|m4a|aac|ogg|oga|wav|aif|aiff|rm|wma|asf|flac|opus|spx|ra|ape|shn|wv" - -; Video Pattern -; This defines which video file types Ampache will attempt to catalog -; You can specify any file extension you want in here separating them with -; a | but ampache may not be able to parse them -; DEAFULT: avi|mpg|mpeg|flv|m4v|mp4|webm|mkv|wmv|ogv|mov|divx|m2ts -catalog_video_pattern = "avi|mpg|mpeg|flv|m4v|mp4|webm|mkv|wmv|ogv|mov|divx|m2ts" - -; Playlist Pattern -; This defines which playlist types Ampache will attempt to catalog -; You can specify any file extension you want in here separating them with -; a | but ampache may not be able to parse them -; DEFAULT: m3u|m3u8|pls|asx|xspf -catalog_playlist_pattern = "m3u|m3u8|pls|asx|xspf" - -; Prefix Pattern -; This defines which prefix Ampache will ignore when importing tags from -; your music. You may add any prefix you want separating them with a | -; DEFAULT: The|An|A|Die|Das|Ein|Eine|Les|Le|La -catalog_prefix_pattern = "The|An|A|Die|Das|Ein|Eine|Les|Le|La" - -; Catalog disable -; This defines if catalog can be disabled without removing database entries -; WARNING: this increase sensibly sql requests and slow down Ampache a lot -; DEFAULT: false -;catalog_disable = "false" - -; Delete from disk -; This determines if catalog manager users can delete medias from disk. -; DEFAULT: false -;delete_from_disk = "false" - - -;######################################################### -; Program Settings # -;######################################################### - -; Downsample Remote -; If this is set to true and access control is on any users who are not -; coming from a defined 'network' ACL will be automatically downsampled -; regardless of their preferences. Requires access_control to be enabled -; DEFAULT: false -;downsample_remote = "false" - -; 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 -; displayed in Admin --> Users -; DEFAULT: false -;track_user_ip = "false" - -; User IP Cardinality -; This defines how many days worth of IP history Ampache will track -; As it is one row per login on high volume sites you will want to -; clear it every now and then. -; DEFAULT: 42 days -;user_ip_cardinality = "42" - -; Allow Zip Download -; This setting allows/disallows using zlib to zip up an entire -; playlist/album for download. Even if this is turned on you will -; still need to enabled downloading for the specific user you -; want to be able to use this function -; DEFAULT: false -;allow_zip_download = "false" - -; Allow Zip Types -; This setting allows/disallows zip download of specific object types -; If empty, all supported object types can be zipped. -; Otherwise, only the given object list can be zipped. -; POSSIBLE VALUES: artist, album, playlist, search, tmp_playlist -; DEFAULT: none -;allow_zip_types = "album" - -; File Zip Comment -; This is an optional configuration option that adds a comment -; to your zip files, this only applies if you've got allow_zip_downloads -; DEFAULT: Ampache - Zip Batch Download -;file_zip_comment = "Ampache - Zip Batch Download" - -; Waveform -; This settings tells Ampache to attempt to generate a waveform -; for each song. It requires transcode and encode_args_wav settings. -; You must also set tmp_dir_path in order for this to work -; DEFAULT: false -;waveform = "false" - -; Waveform color -; The waveform color. -; DEFAULT: #FF0000 -;waveform_color = "#FF0000" - -; 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 -; trailing slash or this will not work. -; DEFAULT: false -;tmp_dir_path = "false" - -; This setting throttles a persons downloading to the specified -; bytes per second. This is not a 100% guaranteed function, and -; you should really use a server based rate limiter if you want -; to do this correctly. -; DEFAULT: off -; VALUES: any whole number (in bytes per second) -;throttle_download = 10 - -; This determines if a preview image should be retrieved from video files -; It requires encode_get_image transcode settings. -; DEFAULT: false -;generate_video_preview = "true" - -; Un comment if don't want ampache to follow symlinks -; DEFAULT: false -;no_symlinks = "false" - -; Use auth? -; If this is set to "Yes" ampache will require a valid -; 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 -use_auth = "true" - -; Default Auth Level -; If use_auth is set to false then this option is used -; to determine the permission level of the 'default' users -; default is administrator. This setting only takes affect -; if use_auth is false -; POSSIBLE VALUES: user, admin, manager, guest -; DEFAULT: guest -default_auth_level = "guest" - -; 5 Star Ratings -; This allows ratings for almost any object in ampache -; POSSIBLE VALUES: false true -; DEFAULT: true -ratings = "true" - -; User flags/favorites -; This allows user flags for almost any object in ampache as favorite -; POSSIBLE VALUES: false true -; DEFAULT: true -userflags = "true" - -; Direct play -; This allows user to play directly a song or album -; POSSIBLE VALUES: false true -; DEFAULT: true -directplay = "true" - -; Sociable -; This turns on / off all of the "social" features of ampache -; default is on, but if you don't care and just want music -; turn this off to disable all social features. -; DEFAULT: true -sociable = "true" - -; License -; This turns on / off all licensing features on Ampache -; DEFAULT: false -;licensing = "false" - -; This options will turn on/off Demo Mode -; If Demo mode is on you can not play songs or update your catalog -; in other words.. leave this commented out -; DEFAULT: false -;demo_mode = "false" - -; Caching -; 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 -; a 2-3x speed improvement. -; DEFAULT: false -;memory_cache = "false" - -; Memory Limit -; This defines the "Min" memory limit for PHP if your php.ini -; has a lower value set Ampache will set it up to this. If you -; set it below 16MB getid3() will not work! -; DEFAULT: 32 -;memory_limit = 32 - -; Album Art Preferred Filename -; Specify a filename to look for if you always give the same filename -; i.e. "folder.jpg" Ampache currently only supports jpg/gif and png -; Especially useful if you have a front and a back image in a folder -; comment out if ampache should search for any jpg,gif or png -; DEFAULT: folder.jpg -;album_art_preferred_filename = "folder.jpg" - -; Album Art Store on Disk -; This defines if arts should be stored on disk instead of database. -; DEFAULT: false -;album_art_store_disk = "false" - -; Local Metadata Directory -; This define a local metadata directory with write access where to store -; heavy data if enabled (album arts, ...) -; DEFAULT: none -;local_metadata_dir = "/metadata" - -; Maximal upload size -; Specify the maximal allowed upload size for images, in bytes. -; DEFAULT: 1048576 -;max_upload_size = 1048576 - -; Album Art Minimum Width -; Specify the minimum width for arts (in pixel). -; DEFAULT: none -;album_art_min_width = 100 - -; Album Art Maximum Width -; Specify the maximum width for arts (in pixel). -; DEFAULT: none -;album_art_max_width = 1024 - -; Album Art Minimum Height -; Specify the minimum height for arts (in pixel). -; DEFAULT: none -;album_art_min_height = 100 - -; Album Art Maximum Height -; Specify the maximum height for arts (in pixel). -; DEFAULT: none -;album_art_max_height = 1024 - -; Resize Images * Requires PHP-GD * -; Set this to true if you want Ampache to resize the Album -; art on the fly, this increases load time and CPU usage -; and also requires the PHP-GD library. This is very useful -; If you have high-quality album art and a small upload cap -; DEFAULT: false -;resize_images = "false" - -; Playlist Cover Art -; Set this to true if you want Ampache to generate -; cover art for playlists automatically based on -; the content. -; DEFAULT: false -;playlist_art = "false" - -; Statistical Graphs * Requires PHP-GD * -; Set this to true if you want Ampache to generate statistical -; graphs on usages / users. -; DEFAULT: false -;statistical_graphs = "false" - -; Art Gather Order -; Simply arrange the following in the order you would like -; ampache to search. If you want to disable one of the search -; methods simply leave it out. DB should be left as the first -; method unless you want it to overwrite what's already in the -; database -; POSSIBLE VALUES (builtins): db tags folder lastfm musicbrainz google -; POSSIBLE VALUES (plugins): Amazon,TheAudioDb,Tmdb,Omdb,Flickr -; DEFAULT: db,tags,folder,musicbrainz,lastfm,google -art_order = "db,tags,folder,musicbrainz,lastfm,google" - -; Recommendations -; Set this to true to enable display of similar artists or albums -; while browsing. Requires Last.FM. -; DEFAULT: false -;show_similar = "false" - -; Concerts -; Set this to true to enable display of artist concerts -; Requires Last.FM. -; DEFAULT: false -;show_concerts = "false" - -; Last.FM API Key -; Set this to your Last.FM api key to actually use Last.FM for -; recommendations and metadata. -lastfm_api_key = "d5df942424c71b754e54ce1832505ae2" - -; Last.FM API secret -; Set this to your Last.FM api secret to actually use Last.FM for -; scrobbling. -lastfm_api_secret = "" - -; Wanted -; Set this to true to enable display missing albums and the -; possibility for users to mark it as wanted. -; DEFAULT: false -wanted = "true" - -; Wanted types -; Set the allowed types of wanted releases (album,compilation,single,ep,live,remix,promotion,official) -; DEFAULT: album,official -wanted_types = "album,official" - -; Wanted Auto Accept -; Mark wanted requests as accepted by default (no content manager agreement required) -; DEFAULT: false -;wanted_auto_accept = "false" - -; EchoNest API key -; EchoNest provides several music services. Currently used for missing song 30 seconds preview. -;echonest_api_key = "" - -; Labels -; Use labels to browse artists per label membership. -; DEFAULT: false -;label = "false" - -; Broadcasts -; Allow users to broadcast music. -; This feature requires advanced server configuration, please take a look on the wiki for more information. -; DEFAULT: false -;broadcast = "false" - -; Channels -; Set this to true to enable channels and the -; possibility for users to create channels from playlists -; DEFAULT: true -channel = "true" - -; Live Streams -; Set this to true to enable live streams (radio) and the -; possibility for users to add new live streams. -; DEFAULT: true -live_stream = "true" - -; Podcasts -; Set this to true to enable podcasts and the -; possibility for admins to subscribe to new podcasts. -; DEFAULT: false -;podcast = "false" - -; Web Socket address -; Declare the web socket server address -; DEFAULT: determined automatically -;websocket_address = "ws://localhost:8100" - -; Refresh Limit -; This defines the default refresh limit in seconds for -; pages with dynamic content, such as now playing -; DEFAULT: 60 -; Possible Values: Int > 5 -refresh_limit = "60" - -; Footer Statistics -; This defines whether statistics (Queries, Cache Hits, Load Time) -; are shown in the page footer. -; DEFAULT: true -; Possible values: true, false -show_footer_statistics = "true" - -; RSS Feeds -; Set this to true to enable rss feeds. -; (latest albums, shouts, albums of artist, ...) -; use_rss = false (values true | false) -;DEFAULT: use_rss = false -;use_rss = "false" - -; This setting allows themes to overwrite PHP template files. This can be really -; dangerous. Do this only if you trust every theme in your themes/ directory. -; DEFAULT: false -;allow_php_themes = "false" - - -;######################################################### -; Debugging # -;######################################################### - -; Debug -; If this is enabled Ampache will write debugging information to the log file -; DEFAULT: false -;debug = "false" - -; Debug Level -; 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.) -; DEFAULT: 5 -debug_level = 5 - -; Path to Log File -; This defines where you want ampache to log events to -; this will only happen if debug is turned on. Do not -; include trailing slash. You will need to make sure that -; the specified directory exists and your HTTP server has -; write access. -; DEFAULT: none -;log_path = "/var/log/ampache" - -; Log filename pattern -; This defines where the log file name pattern -; %name.%Y%m%d.log will create a different log file every day. -; DEFAULT: %name.%Y%m%d.log -log_filename = "%name.%Y%m%d.log" - - -;######################################################### -; Encoding Settings # -;######################################################### - -; Charset of generated HTML pages -; Default of UTF-8 should work for most people -; DEFAULT: UTF-8 -site_charset = UTF-8 - -; Locale Charset -; Local charset (mainly for file operations) if different -; from site_charset. -; This is disabled by default, enable only if needed -; (for Windows please set lc_charset to ISO8859-1) -; DEFAULT: ISO8859-1 -;lc_charset = "ISO8859-1" - -; Multibyte -; See http://php.net/manual/mbstring.supported-encodings.php -; If you want ID3v1 encoding detection to work, you should uncomment this line -; so that the ordering is sane. -; DEFAULT: auto -;mb_detect_order = "ASCII,UTF-8,EUC-JP,ISO-2022-JP,SJIS,JIS" - - -;######################################################### -; Custom actions (optional) # -;######################################################### - -; Your custom play action title -;custom_play_action_title_0 = "" -; Your custom play action icon name (stored as /images/icon_[your_image].png) -;custom_play_action_icon_0 = "" -; Your custom action script, where: -; - %f: the media file path -; - %c: the excepted codec target (mp3, ogg, ...) -; - %a: the artist name -; - %A: the album name -; - %t: the song title -;custom_play_action_run_0 = "" - -; Example for Karaoke playing -;custom_play_action_title_0 = "Karaoke" -;custom_play_action_icon_0 = "microphone" -;custom_play_action_run_0 = "sox \"%f\" -p oops | ffmpeg -i pipe:0 -f %c pipe:1" - - -;######################################################### -; LDAP login info (optional) # -;######################################################### - -; LDAP server URL (required) -; DEFAULT: none -;ldap_url = "ldap://localhost/" -;ldap_url = "ldaps://localhost/" - -; LDAP credentials (optional) -; DEFAULT: none -;ldap_username = "" -;ldap_password = "" - -; LDAP Base DN for the search (required) -; DEFAULT: none -;ldap_search_dn = "ou=People,dc=yoursubdomain,dc=yourdomain,dc=yourtld" - -; LDAP objectClass (required) -; DEFAULT: none -;ldap_objectclass = "posixAccount" ; OpenLDAP -;ldap_objectclass = "organizationalPerson" ; Microsoft Active Directory - -; LDAP filter for search (required) -; DEFAULT: none -;ldap_filter = "(uid=%v)" ; OpenLDAP -;ldap_filter = "(sAMAccountName=%v)" ; Microsoft Active Directory - -; Require that the user is in a specific group (optional) -; DEFAULT: none -;ldap_require_group = "cn=yourgroup,ou=yourorg,dc=yoursubdomain,dc=yourdomain,dc=yourtld" - -; LDAP name field -; DEFAULT = "cn" -;ldap_name_field = "cn" -;ldap_name_field = "displayName" - -; LDAP email field -; DEFAULT = "mail" -;ldap_email_field = "mail" - -; LDAP avatar field -; DEFAULT: none -;ldap_avatar_field = "jpegPhoto" - -; LDAP avatar mime type -; DEFAULT: image/jpeg -;ldap_avatar_mime = "image/jpeg" - -; LDAP protocol version to use -; DEFAULT: 3 -;ldap_protocol_version = 3 - -; LDAP StartTLS -; DEFAULT: false -;ldap_start_tls = "false" - -; LDAP member attribute name. -; That's the name of the attribute of the group that will contain -; the usernames. -; DEFAULT: member -;ldap_member_attribute = "member" -;ldap_member_attribute = "memberuid" - - - -;######################################################### -; OpenID login info (optional) # -;######################################################### - -; Requires specific OpenID Provider Authentication Policy -; DEFAULT: none -; VALUES: PAPE_AUTH_MULTI_FACTOR_PHYSICAL,PAPE_AUTH_MULTI_FACTOR,PAPE_AUTH_PHISHING_RESISTANT -;openid_required_pape = "" - - -;######################################################### -; Public Registration settings, defaults to disabled # -;######################################################### - -; This setting will silently create an ampache account -; for anyone who can login using LDAP (or any other login -; extension). The default is to create new users as guests -; see auto_user config option if you would like to change this -; DEFAULT: false -;auto_create = "false" - -; This setting will silently update an ampache account's -; informations for anyone who can login using LDAP -; (or any other login extension). -; DEFAULT: false -;external_auto_update = "false" - -; This setting turns on/off public registration. It is -; recommended you leave this off, as it will allow anyone to -; sign up for an account on your server. -; REMEMBER: don't forget to set the mail from address further down in the config. -; DEFAULT: false -;allow_public_registration = "false" - -; Require Captcha Text on Image confirmation -; Turning this on requires the user to correctly -; type in the letters in the image created by Captcha -; Default is off because its very hard to detect if it failed -; to draw, or they failed to enter it. -; DEFAULT: false -;captcha_public_reg = "false" - -; This setting turns on/off admin notification of registration. -; DEFAULT: false -;admin_notify_reg = "false" - -; This setting determines whether the user will be created as a disabled user. -; If this is on, an administrator will need to manually enable the account -; before it's usable. -; DEFAULT: false -;admin_enable_required = "false" - -; This setting will allow all registrants/ldap/http users -; to be auto-approved as a user. By default, they will be -; added as a guest and must be promoted by the admin. -; POSSIBLE VALUES: guest, user, admin -; DEFAULT: guest -;auto_user = "guest" - -; This will display the user agreement when registering -; For agreement text, edit config/registration_agreement.php -; User will need to accept the agreement before they can register -; DEFAULT: false -;user_agreement = "false" - -; This disable email confirmation when registering. -; DEFAULT: false -;user_no_email_confirm = "false" - -; This will display the cookie disclaimer (EU Cookie Law) -; DEFAULT: false -;cookie_disclaimer = "false" - -; The fields that will be shown on Registration page -; If a user wants to register. -; Username and email fields are forced. -; POSSIBLE VALUES: fullname,website,state,city -; DEFAULT: "fullname,website" -registration_display_fields = "fullname,website" - -; The fields that will be mandatory -; This controls which fields are mandatory for registration. -; Username and email fields are forced mandatory. -; POSSIBLE VALUES: fullname,website,state,city -; DEFAULT: fullname -registration_mandatory_fields = "fullname" - - -;######################################################## -; These options control the dynamic downsampling based # -; on current usage # -; *Note* Transcoding must be enabled and working # -;######################################################## - -; Attempt to optimize bandwidth by dynamically lowering the bit rate of new -; streams. Since the bit rate is only adjusted at the beginning of a song, the -; actual cumulative bitrate for concurrent streams can be up to around -; double the configured value. It also only applies to streams that are -; transcoded. -; DEFAULT: none -;max_bit_rate = 576 - -; New dynamically downsampled streams will be denied if they are forced below -; this value. -; DEFAULT: 8 -;min_bit_rate = 48 - -;###################################################### -; These are commands used to transcode non-streaming -; formats to the target file type for streaming. -; This can be useful in re-encoding file types that don't stream -; very well, or if your player doesn't support some file types. -; -; 'Downsampling' will also use these commands. -; -; To state the bleeding obvious, any programs referenced in the transcode -; commands must be installed, in the web server's search path (or referenced -; by their full path), and executable by the web server. - -; Input type selection -; TYPE is the extension. 'allowed' certifies that transcoding works properly for -; this input format. 'required' further forbids the direct streaming of a format -; (e.g. if you store everything in FLAC, but don't want to ever stream that.) -; transcode_TYPE = {allowed|required|false} -; DEFAULT: false -;;; Audio -;transcode_m4a = allowed -;transcode_flac = required -;transcode_mpc = required -;transcode_ogg = required -;transcode_oga = required -;transcode_wav = required -;transcode_wma = required -;transcode_aif = required -;transcode_aiff = required -;transcode_ape = required -;transcode_shn = required -;transcode_mp3 = allowed -;;; Video -;transcode_avi = allowed -;transcode_mkv = allowed -;transcode_mpg = allowed -;transcode_mpeg = allowed -;transcode_m4v = allowed -;transcode_mp4 = allowed -;transcode_mov = allowed -;transcode_wmv = allowed -;transcode_ogv = allowed -;transcode_divx = allowed -;transcode_m2ts = allowed -;transcode_webm = allowed - -; Default audio output format -; DEFAULT: none -;encode_target = mp3 - -; Default video output format -; DEFAULT: none -;encode_video_target = webm - -; Override the default output format on a per-type basis, for example, -; to stream lossless encoded files in lossy formats. -; encode_target_TYPE = TYPE -; DEFAULT: none -;encode_target_flac = opus - -; Override the default TYPE transcoding behavior on a per-player basis, for example, -; to stream lossless using the api and lossy using the web interface. -; transcode_player_PLAYER_TYPE = TYPE -; Valid PLAYER is: webplayer, api -; DEFAULT: none -;transcode_player_webplayer_m4a = required -;transcode_player_webplayer_flac = required -;transcode_player_webplayer_mpc = required - -; Override the default output format on a per-player basis -; encode_player_PLAYER_target = TYPE -; Valid PLAYER is: webplayer, api -; DEFAULT: none -;encode_player_webplayer_target = mp3 -;encode_player_api_target = mp3 - -; Allow clients to override transcode settings (output type, bitrate, codec ...) -; DEFAULT: true -transcode_player_customize = "true" - -; Command configuration. Substitutions will be made as follows: -; %FILE% => filename -; %BITRATE% => target bit rate (as chosen by the admin or users in the -; preferences, if transcode_player_customize = "true") -; You can do fancy things like VBR, but consider whether the consequences are -; acceptable in your environment. - -; Master transcode command -; transcode_cmd should be a single command that supports multiple file types, -; such as ffmpeg or avconv. It's still possible to make a configuration that's -; equivalent to the old default, but if you find that necessary you should be -; clever enough to figure out how on your own. -; DEFAULT: none -;transcode_cmd = "ffmpeg" -;transcode_cmd = "avconv" -;transcode_cmd = "/usr/bin/neatokeen" - -; Transcode input file argument -transcode_input = "-i %FILE%" - -; Specific transcode commands -; It shouldn't be necessary in most cases, but you can override the transcode -; command for specific source formats. It still needs to accept the -; encoding arguments, so the easiest approach is to use your normal command as -; a clearing-house. -; transcode_cmd_TYPE = TRANSCODE_CMD -;transcode_cmd_mid = "timidity -Or -o – %FILE% | ffmpeg -f s16le -i pipe:0" - -; Encoding arguments -; For each output format, you should provide the necessary arguments for -; your transcode_cmd. -; encode_args_TYPE = TRANSCODE_CMD_ARGS -encode_args_mp3 = "-vn -b:a %BITRATE%K -c:a libmp3lame -f mp3 pipe:1" -encode_args_ogg = "-vn -b:a %BITRATE%K -c:a libvorbis -f ogg pipe:1" -encode_args_opus = "-vn -b:a %BITRATE%K -c:a libopus -compression_level 10 -vsync 2 -f ogg pipe:1" -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 %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" - -; Encoding arguments to retrieve an image from a single frame -encode_get_image = "-ss %TIME% -f image2 -vframes 1 pipe:1" - -; Encoding argument to encrust subtitle -encode_srt = "-vf \"subtitles='%SRTFILE%'\"" - -; Encode segment frame argument -encode_ss_frame = "-ss %TIME%" - -; Encode segment duration argument -encode_ss_duration = "-t %DURATION%" - - -;######################################################### -; Proxy Settings (optional) # -;######################################################### - -; If Ampache is behind an http proxy, specifiy the hostname or IP address -; port, proxyusername, and proxypassword here. -;DEFAULT: not in use -;proxy_host = "192.168.0.1" -;proxy_port = "8080" -;proxy_user = "" -;proxy_pass = "" - -; If Ampache is behind an https reverse proxy, force use HTTPS protocol. -;Default: false -;force_ssl = "true" - - -;######################################################### -; Mail Settings # -;######################################################### - -;Method used to send mail -;POSSIBLE VALUES: smtp sendmail php -;DEFAULT: php -;mail_type = "php" - -;Mail domain. -;DEFAULT: example.com -;mail_domain = "example.com" - -;This will be combined with mail_domain and used as the source address for -;emails generated by Ampache. For example, setting this to 'me' will set the -;sender to 'me@example.com'. -;DEFAULT: info -;mail_user = "info" - -;A name to go with the email address. -;DEFAULT: Ampache -;mail_name = "Ampache" - -;How strictly email addresses should be checked. -;easy does a regex match, strict actually performs some SMTP transactions -;to see if we can send to this address. -;POSSIBLE VALUES: strict easy none -; DEFAULT: strict -;mail_check = "strict" - - -;######################################################### -; sendmail Settings # -;######################################################### - -;DEFAULT: /usr/sbin/sendmail -;sendmail_path = "/usr/sbin/sendmail" - - -;######################################################### -; SMTP Settings # -;######################################################### - -;Mail server (hostname or IP address) -;DEFAULT: localhost -;mail_host = "localhost" - -; SMTP port -;DEFAULT: 25 -;mail_port = 25 - -;Secure SMTP -;POSSIBLE VALUES: ssl tls -;DEFAULT: none -;mail_secure_smtp = tls - -;Enable SMTP authentication -;DEFAULT: false -;mail_auth = "true" - -;SMTP Username -;your mail auth username. -;mail_auth_user = "" - -; SMTP Password -; your mail auth password. -;mail_auth_pass = "" - -;############################# -; Abbreviation Filter # -;############################# -; For file name parsing. Any unecessary 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 9b91422..1867c90 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,3 +1,6 @@ -SOURCE_URL=https://github.com/ampache/ampache/archive/3.9.0.zip -SOURCE_SUM=4b047cf8bbb4b0987e1c789536754b60e8fb1572030842193fb86ec21b6da2d8 -SOURCE_FORMAT=zip +SOURCE_URL=https://github.com/ampache/ampache/archive/3.9.0.tar.gz +SOURCE_SUM=1e523b52c6402693102dac183d7597d6e0aebf63580167f45661d0f15f57c072 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= diff --git a/conf/nginx.conf b/conf/nginx.conf index 55d8d7e..0caae02 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,13 +1,15 @@ #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; location __PATH__/ { + # Path to source alias __FINALPATH__/; + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } - #enable subsonic api + # Enable subsonic api if ( !-d $request_filename ) { rewrite ^__PATH__/rest/(.*)\.view$ __PATH__/rest/index.php?action=$1 last; rewrite ^__PATH__/rest/fake/(.+)$ __PATH__/play/$1 last; @@ -21,7 +23,7 @@ location __PATH__/ { try_files $uri $uri/ index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param REMOTE_USER $remote_user; @@ -49,6 +51,5 @@ location __PATH__/ { } # Include SSOWAT user panel. - # include conf.d/yunohost_panel.conf.inc; - + include conf.d/yunohost_panel.conf.inc; } diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf new file mode 100644 index 0000000..ab5dca9 --- /dev/null +++ b/conf/php-fpm.conf @@ -0,0 +1,430 @@ +; 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 cdd479b..1d920c3 100644 --- a/manifest.json +++ b/manifest.json @@ -1,13 +1,13 @@ { "name": "Ampache", "id": "ampache", + "packaging_format": 1, "description": { "en": "A web based audio/video streaming application", "fr": "Une application de streaming audio et vidéo" }, - "version": "3.9.0~ynh1", + "version": "3.9.0~ynh2", "url": "http://ampache.org", - "packaging_format": 1, "license": "AGPL-3.0", "maintainer": { "name": "aymhce", @@ -15,12 +15,12 @@ }, "multi_instance": true, "requirements": { - "yunohost": ">= 2.7.2" + "yunohost": ">= 3.2.0" }, "services" : [ "nginx", - "php5-fpm", - "mysql" + "php7.0-fpm", + "mysql" ], "arguments": { "install" : [ @@ -43,7 +43,7 @@ "example": "/ampache", "default": "/ampache" }, - { + { "name": "admin", "type": "user", "ask": { diff --git a/scripts/_common.sh b/scripts/_common.sh index 409a23a..25a968b 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,57 +1,29 @@ #!/bin/bash -# Copy files to the right place -ampache_ynh_getsources () { - final_path=/var/www/$app - mkdir -p $final_path/log - - ynh_setup_source $final_path - - cp ../conf/ampache.cfg.php $final_path/config/ampache.cfg.php -} - -# Change variables in Ampache configuration -ampache_ynh_prepareconfig () { - ynh_replace_string "yunouser" "$app" $final_path/config/ampache.cfg.php - ynh_replace_string "yunopass" "$db_pwd" $final_path/config/ampache.cfg.php - ynh_replace_string "yunobase" "$app" $final_path/config/ampache.cfg.php - ynh_replace_string "PATHTOCHANGE" "$path_url" $final_path/config/ampache.cfg.php - ynh_replace_string "DOMAINTOCHANGE" "$domain" $final_path/config/ampache.cfg.php -} - -# Ampache installation -ampache_ynh_install () { - ( - export COMPOSER_HOME=$final_path - cd $final_path - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php - #php composer.phar update --no-interaction - php composer.phar install --prefer-source --no-interaction --no-dev - ) - # Set permissions to ampache directory - chown -R www-data: $final_path - -} - -# Regenerate SSOwat conf -ampache_ynh_reloadservices () { - ynh_app_setting_set $app skipped_uris "/" - yunohost app ssowatconf -} - -# Pre config ampache -ampache_ynh_doconfig () { - sleep 1 - ynh_local_curl /update.php?action=update - sleep 5 -} +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= # Install or update the main directory yunohost.multimedia # # usage: ynh_multimedia_build_main_dir ynh_multimedia_build_main_dir () { - wget -nv https://github.com/YunoHost-Apps/yunohost.multimedia/archive/master.zip 2>&1 - unzip -q master.zip + local ynh_media_release="v1.2" + local checksum="806a827ba1902d6911095602a9221181" + + # Download yunohost.multimedia scripts + wget -nv https://github.com/YunoHost-Apps/yunohost.multimedia/archive/${ynh_media_release}.tar.gz + + # Check the control sum + echo "${checksum} ${ynh_media_release}.tar.gz" | md5sum -c --status \ + || ynh_die "Corrupt source" + + # Check if the package acl is installed. Or install it. + ynh_package_is_installed 'acl' \ + || ynh_package_install acl + + # Extract + mkdir yunohost.multimedia-master + tar -xf ${ynh_media_release}.tar.gz -C yunohost.multimedia-master --strip-components 1 ./yunohost.multimedia-master/script/ynh_media_build.sh } diff --git a/scripts/backup b/scripts/backup index 6c2ac8d..10a40d8 100644 --- a/scripts/backup +++ b/scripts/backup @@ -1,17 +1,19 @@ #!/bin/bash -set -eu - +#================================================= +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers #================================================= # MANAGE SCRIPT FAILURE #================================================= +# Exit if an error occurs during the execution of the script ynh_abort_if_errors #================================================= @@ -19,12 +21,14 @@ ynh_abort_if_errors #================================================= app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get "$app" domain) -path_url=$(ynh_app_setting_get "$app" path) -admin=$(ynh_app_setting_get "$app" admin) -final_path=/var/www/$app +final_path=$(ynh_app_setting_get $app final_path) +domain=$(ynh_app_setting_get $app domain) +path_url=$(ynh_app_setting_get $app path) +db_name=$(ynh_app_setting_get $app db_name) +#================================================= +# STANDARD BACKUP STEPS #================================================= # BACKUP THE APP MAIN DIR #================================================= @@ -37,8 +41,15 @@ ynh_backup "$final_path" ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" +#================================================= +# BACKUP THE PHP-FPM CONFIGURATION +#================================================= + +ynh_backup "/etc/php/7.0/fpm/pool.d/$app.conf" + #================================================= # BACKUP THE MYSQL DATABASE #================================================= -ynh_mysql_dump_db "$app" > db.sql +ynh_mysql_dump_db "$db_name" > db.sql + diff --git a/scripts/install b/scripts/install index 70eb113..121ba30 100644 --- a/scripts/install +++ b/scripts/install @@ -1,20 +1,11 @@ #!/bin/bash #================================================= -# RETRIEVE ARGUMENTS FROM THE MANIFEST -#================================================= - -# Retrieve arguments -app=$YNH_APP_INSTANCE_NAME -domain=$YNH_APP_ARG_DOMAIN -path_url=$YNH_APP_ARG_PATH -admin_ampache=$YNH_APP_ARG_ADMIN - +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= -# Source helpers source _common.sh source /usr/share/yunohost/helpers @@ -22,95 +13,172 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= +# Exit if an error occurs during the execution of the script ynh_abort_if_errors +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= + +domain=$YNH_APP_ARG_DOMAIN +path_url=$YNH_APP_ARG_PATH +admin_ampache=$YNH_APP_ARG_ADMIN + +app=$YNH_APP_INSTANCE_NAME + #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= -# Check domain/path availability +final_path=/var/www/$app +test ! -e "$final_path" || ynh_die "This path already contains a folder" + +# Normalize the url path syntax path_url=$(ynh_normalize_url_path $path_url) -ynh_webpath_available $domain $path_url + +# Register (book) web path ynh_webpath_register $app $domain $path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app path $path_url ynh_app_setting_set $app admin $admin_ampache #================================================= -# DOWNLOAD, CHECK AND UNPACK SOURCE +# STANDARD MODIFICATIONS +#================================================= +# INSTALL DEPENDENCIES #================================================= -# get sources and copy files to the right place -ampache_ynh_getsources -cp ../conf/admin.sql /tmp/ +ynh_install_app_dependencies libav-tools php-cli #================================================= # CREATE A MYSQL DATABASE #================================================= -# Initialize database and store mysql password for upgrade -ynh_mysql_setup_db "$app" "$app" -db_pwd=$(ynh_app_setting_get $app mysqlpwd) -ynh_mysql_connect_as "$app" "$db_pwd" "$app" < "$final_path/sql/ampache.sql" +db_name=$(ynh_sanitize_dbid $app) +ynh_app_setting_set $app db_name $db_name +ynh_mysql_setup_db $db_name $db_name #================================================= -# MODIFY A CONFIG FILE +# DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -# Change variables in Ampache configuration -ampache_ynh_prepareconfig - -ynh_replace_string "yunoadmin" "$admin_ampache" /tmp/admin.sql -ynh_replace_string "RANDOMKEYTOCHANGE" $(ynh_string_random 24) $final_path/config/ampache.cfg.php +ynh_app_setting_set $app final_path $final_path +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source "$final_path" #================================================= # NGINX CONFIGURATION #================================================= -if [ "$path_url" != "/" ] -then - ynh_replace_string "^#sub_path_only" "" "../conf/nginx.conf" -fi +# Create a dedicated nginx config ynh_add_nginx_config #================================================= -# INSTALL DEPENDENCIES +# CREATE DEDICATED USER #================================================= -# Install dependency -ynh_install_app_dependencies libav-tools +# Create a system user +ynh_system_user_create $app + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= + +# Create a dedicated php-fpm config +ynh_add_fpm_config #================================================= # SPECIFIC SETUP #================================================= +# CONFIGURE AMPACHE +#================================================= -# Ampache installation -ampache_ynh_install +conf_file="$final_path/config/ampache.cfg.php" +cp ../conf/ampache.cfg.php "$conf_file" + +ynh_replace_string "__DBUSER__" "$db_name" "$conf_file" +ynh_replace_string "__DBPWD__" "$db_pwd" "$conf_file" +ynh_replace_string "__DBNAME__" "$db_name" "$conf_file" +ynh_replace_string "__PATHTOCHANGE__" "$path_url" "$conf_file" +ynh_replace_string "__DOMAINTOCHANGE__" "$domain" "$conf_file" +secret_key=$(ynh_string_random 24) +ynh_replace_string "__RANDOMKEYTOCHANGE__" "$secret_key" "$conf_file" +ynh_app_setting_set $app secret_key $secret_key + +# Calculate and store the config file checksum into the app settings +ynh_store_file_checksum "$conf_file" + +#================================================= +# LOAD DEFAULT DATABASE +#================================================= + +# Load default ampache database +ynh_mysql_connect_as $app $db_pwd $app < "$final_path/sql/ampache.sql" + +#================================================= +# INSTALL AMPACHE WITH COMPOSER +#================================================= + +( + export COMPOSER_HOME=$final_path + cd $final_path + + # Install composer + curl -sS https://getcomposer.org/installer \ + | php -- --quiet --install-dir="$final_path" \ + || ynh_die "Unable to install Composer" + + ynh_exec_warn_less php composer.phar install --prefer-source --no-interaction --no-dev +) + +#================================================= +# INSTALL MULTIMEDIA DIRECTORIES +#================================================= -# Create multimedia directories if necessary ynh_multimedia_build_main_dir #================================================= -# RELOAD SSOWAT +# PRE CONFIGURE AMPACHE #================================================= -# Regenerate SSOwat conf -ampache_ynh_reloadservices +# Set the app as temporarily public for curl call +ynh_app_setting_set $app unprotected_uris "/" +# Reload SSOwat config +yunohost app ssowatconf + +# Reload Nginx +systemctl reload nginx + +ynh_local_curl /update.php?action=update +sleep 1 #================================================= -# SETUP APPLICATION WITH CURL +# LOAD ADMIN DATABASE #================================================= -# Pre config ampache -ampache_ynh_doconfig +cp ../conf/admin.sql /tmp/ +ynh_replace_string "__ADMIN__" "$admin_ampache" /tmp/admin.sql + ynh_mysql_connect_as "$app" "$db_pwd" "$app" < /tmp/admin.sql +ynh_secure_remove /tmp/admin.sql + #================================================= -# CLEANING +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES #================================================= -# Clean install -ynh_secure_remove /tmp/admin.sql +# Set permissions to ampache directory +chown -R $app: $final_path + +#================================================= +# RELOAD NGINX +#================================================= + +systemctl reload nginx diff --git a/scripts/remove b/scripts/remove index b4578a9..f3ec028 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,9 +1,12 @@ #!/bin/bash +#================================================= +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= +source _common.sh source /usr/share/yunohost/helpers #================================================= @@ -11,33 +14,53 @@ source /usr/share/yunohost/helpers #================================================= app=$YNH_APP_INSTANCE_NAME + domain=$(ynh_app_setting_get $app domain) +db_name=$(ynh_app_setting_get $app db_name) +final_path=$(ynh_app_setting_get $app final_path) -final_path=/var/www/$app - +#================================================= +# STANDARD REMOVE #================================================= # REMOVE THE MYSQL DATABASE #================================================= -ynh_mysql_drop_db $app -ynh_mysql_drop_user $app - -#================================================= -# REMOVE APP MAIN DIR -#================================================= - -# Remove sources -ynh_secure_remove $final_path - -#================================================= -# REMOVE NGINX CONFIGURATION -#================================================= - -ynh_remove_nginx_config +# Remove a database if it exists, along with the associated user +ynh_mysql_remove_db $db_name $db_name #================================================= # REMOVE DEPENDENCIES #================================================= -# Remove dependencies +# Remove metapackage and its dependencies ynh_remove_app_dependencies + +#================================================= +# REMOVE APP MAIN DIR +#================================================= + +# Remove the app directory securely +ynh_secure_remove "$final_path" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= + +# Remove the dedicated nginx config +ynh_remove_nginx_config + +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= + +# Remove the dedicated php-fpm config +ynh_remove_fpm_config + +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= + +# Delete a system user +ynh_system_user_delete $app diff --git a/scripts/restore b/scripts/restore index 0162a1c..29b3b4b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -19,42 +19,28 @@ ynh_abort_if_errors #================================================= app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get "$app" domain) -path_url=$(ynh_app_setting_get "$app" path) -admin=$(ynh_app_setting_get "$app" admin) -final_path=/var/www/$app +domain=$(ynh_app_setting_get $app domain) +path_url=$(ynh_app_setting_get $app path) +final_path=$(ynh_app_setting_get $app final_path) +db_name=$(ynh_app_setting_get $app db_name) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= -# Check domain/path availability +ynh_webpath_available $domain $path_url \ + || ynh_die "Path not available: ${domain}${path_url}" test ! -d $final_path \ - || ynh_die "There is already a directory: $final_path" + || ynh_die "There is already a directory: $final_path " #================================================= -# IMPORT GENERIC HELPERS AFTER YNH_DIE FOR LINTER +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION #================================================= -if [ ! -e _common.sh ]; then - cp ../settings/scripts/_common.sh ./_common.sh - chmod a+rx _common.sh -fi -source _common.sh - -#================================================= -# CHECK THE PATH -#================================================= - -path_url=$(ynh_normalize_url_path $path_url) - -#================================================= -# REINSTALL DEPENDENCIES -#================================================= - -# Install dependency -ynh_install_app_dependencies libav-tools +ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE APP MAIN DIR @@ -63,16 +49,46 @@ ynh_install_app_dependencies libav-tools ynh_restore_file "$final_path" #================================================= -# RESTORE THE NGINX CONFIGURATION +# RECREATE THE DEDICATED USER #================================================= -ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" -systemctl reload nginx +# Create the dedicated user (if not existing) +ynh_system_user_create $app + +#================================================= +# RESTORE USER RIGHTS +#================================================= + +# Restore permissions on app files +chown -R $app: $final_path + +#================================================= +# RESTORE THE PHP-FPM CONFIGURATION +#================================================= + +ynh_restore_file "/etc/php/7.0/fpm/pool.d/$app.conf" + +#================================================= +# SPECIFIC RESTORATION +#================================================= +# REINSTALL DEPENDENCIES +#================================================= + +ynh_install_app_dependencies libav-tools #================================================= # RESTORE THE MYSQL DATABASE #================================================= db_pwd=$(ynh_app_setting_get $app mysqlpwd) -ynh_mysql_setup_db $app $app $db_pwd -ynh_mysql_connect_as $app $db_pwd $app < ./db.sql +ynh_mysql_setup_db $db_name $db_name $db_pwd +ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= + +systemctl reload php7.0-fpm +systemctl reload nginx diff --git a/scripts/upgrade b/scripts/upgrade index 66d8101..03fe0de 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -7,74 +7,165 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_abort_if_errors - #================================================= # LOAD SETTINGS #================================================= -# Retrieve arguments app=$YNH_APP_INSTANCE_NAME + domain=$(ynh_app_setting_get $app domain) path_url=$(ynh_app_setting_get $app path) -db_pwd=$(ynh_app_setting_get $app mysqlpwd) admin_ampache=$(ynh_app_setting_get $app admin) +final_path=$(ynh_app_setting_get $app final_path) +db_name=$(ynh_app_setting_get $app db_name) +secret_key=$(ynh_app_setting_get $app secret_key) + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= + +# If db_name doesn't exist, create it +if [ -z $db_name ]; then + db_name=$(ynh_sanitize_dbid $app) + ynh_app_setting_set $app db_name $db_name +fi + +# If final_path doesn't exist, create it +if [ -z $final_path ]; then + final_path=/var/www/$app + ynh_app_setting_set $app final_path $final_path +fi + +# If secret_key doesn't exist, create it +if [ -z $secret_key ]; then + secret_key="$(grep "^secret_key" "$final_path/config/ampache.cfg.php" | cut -d'"' -f2)" + ynh_app_setting_set $app secret_key $secret_key +fi + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# 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) #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -# Get sources and copy files to the right place -ampache_ynh_getsources - -# Change variables in Ampache configuration -ampache_ynh_prepareconfig +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source "$final_path" #================================================= # NGINX CONFIGURATION #================================================= -# Modify Nginx configuration file and copy it to Nginx conf directory -if [ "$path_url" != "/" ] -then - ynh_replace_string "^#sub_path_only" "" "../conf/nginx.conf" -fi +# Create a dedicated nginx config ynh_add_nginx_config #================================================= -# INSTALL DEPENDENCIES +# UPGRADE DEPENDENCIES #================================================= -# Install dependency -ynh_install_app_dependencies libav-tools +ynh_install_app_dependencies libav-tools php-cli #================================================= -# SPECIFIC SETUP +# CREATE DEDICATED USER #================================================= -# Ampache installation -ampache_ynh_install +# Create a dedicated user (if not existing) +ynh_system_user_create $app #================================================= -# RELOAD SSOWAT +# PHP-FPM CONFIGURATION #================================================= -# Regenerate SSOwat conf -ampache_ynh_reloadservices +# Create a dedicated php-fpm config +ynh_add_fpm_config #================================================= -# SETUP APPLICATION WITH CURL +# SPECIFIC UPGRADE +#================================================= +# RECONFIGURE AMPACHE #================================================= -# Pre config ampache -ampache_ynh_doconfig +conf_file="$final_path/config/ampache.cfg.php" +ynh_backup_if_checksum_is_different "$conf_file" + +ynh_replace_string "__DBUSER__" "$db_name" "$conf_file" +db_pwd=$(ynh_app_setting_get $app mysqlpwd) +ynh_replace_string "__DBPWD__" "$db_pwd" "$conf_file" +ynh_replace_string "__DBNAME__" "$db_name" "$conf_file" +ynh_replace_string "__PATHTOCHANGE__" "$path_url" "$conf_file" +ynh_replace_string "__DOMAINTOCHANGE__" "$domain" "$conf_file" +ynh_replace_string "__RANDOMKEYTOCHANGE__" $secret_key "$conf_file" + +# Calculate and store the config file checksum into the app settings +ynh_store_file_checksum "$conf_file" + +#================================================= +# UPDATE AMPACHE WITH COMPOSER +#================================================= + +( + export COMPOSER_HOME=$final_path + cd $final_path + + # Install composer + curl -sS https://getcomposer.org/installer \ + | php -- --quiet --install-dir="$final_path" \ + || ynh_die "Unable to install Composer" + + ynh_exec_warn_less php composer.phar config discard-changes true + ynh_exec_warn_less php composer.phar update --prefer-source --no-interaction --no-dev +) + +#================================================= +# UPDATE MULTIMEDIA DIRECTORIES +#================================================= + +ynh_multimedia_build_main_dir + +#================================================= +# UPGRADE AMPACHE WITH CURL +#================================================= + +# Set the app as temporarily public for curl call +ynh_app_setting_set $app unprotected_uris "/" +# Reload SSOwat config +yunohost app ssowatconf + +# Reload Nginx +systemctl reload nginx + +ynh_local_curl /update.php?action=update +sleep 1 + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +# Set permissions on app files +chown -R $app: $final_path + + +#================================================= +# RELOAD NGINX +#================================================= + +systemctl reload nginx