diff --git a/README.md b/README.md index d687c57..07c1030 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,16 @@ 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/) +* [Official demo](http://ampache.org/demo.html) + ## 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 +46,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 +96,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/check_process b/check_process index 633486f..cbcaa6a 100644 --- a/check_process +++ b/check_process @@ -1,18 +1,16 @@ -# See here for more informations -# https://github.com/YunoHost/package_check#syntax-check_process-file - ;; Test complet ; Manifest domain="domain.tld" (DOMAIN) path="/ampache" (PATH) admin="john" (USER) + is_public=1 (PUBLIC|public=1|private=0) ; Checks pkg_linter=1 setup_sub_dir=1 setup_root=1 setup_nourl=0 - setup_private=0 - setup_public=0 + setup_private=1 + setup_public=1 upgrade=1 upgrade=1 from_commit=11caf9791c48fdcd632193a1c82ea52d4819b328 backup_restore=1 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 c062f6a..7f2ea52 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,8 +1,10 @@ #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; } @@ -15,7 +17,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; @@ -50,6 +52,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..571cf98 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": { @@ -51,6 +51,15 @@ "fr": "Administrateur du serveur Ampache (doit etre un utilisateur Yunohost existant)" }, "example": "homer" + }, + { + "name": "is_public", + "type": "boolean", + "ask": { + "en": "Is it a public application?", + "fr": "Est-ce une application publique ?" + }, + "default": true } ] } diff --git a/scripts/_common.sh b/scripts/_common.sh index 409a23a..da5746c 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,57 +1,76 @@ #!/bin/bash -# Copy files to the right place -ampache_ynh_getsources () { - final_path=/var/www/$app - mkdir -p $final_path/log +#================================================= +# EXPERIMENTAL HELPERS +#================================================= - ynh_setup_source $final_path +# Execute a command with Composer +# +# usage: ynh_composer_exec [--workdir=$final_path] --commands="commands" +# | arg: -w, --workdir - The directory from where the command will be executed. Default $final_path. +# | arg: -c, --commands - Commands to execute. +ynh_composer_exec () { + # Declare an array to define the options of this helper. + local legacy_args=wc + declare -Ar args_array=( [w]=workdir= [c]=commands= ) + local workdir + local commands + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + workdir="${workdir:-$final_path}" - cp ../conf/ampache.cfg.php $final_path/config/ampache.cfg.php + COMPOSER_HOME="$workdir/.composer" \ + php "$workdir/composer.phar" $commands \ + -d "$workdir" --quiet --no-interaction } -# 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 +# Install and initialize Composer in the given directory +# +# usage: ynh_install_composer [--workdir=$final_path] +# | arg: -w, --workdir - The directory from where the command will be executed. Default $final_path. +ynh_install_composer () { + # Declare an array to define the options of this helper. + local legacy_args=w + declare -Ar args_array=( [w]=workdir= ) + local workdir + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + workdir="${workdir:-$final_path}" + + curl -sS https://getcomposer.org/installer \ + | COMPOSER_HOME="$workdir/.composer" \ + php -- --quiet --install-dir="$workdir" \ + || ynh_die "Unable to install Composer." + + # update dependencies to create composer.lock + ynh_composer_exec --workdir="$workdir" --commands="install --no-dev" \ + || ynh_die "Unable to update core dependencies with Composer." } -# 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/_getopts_fix.sh b/scripts/_getopts_fix.sh new file mode 100644 index 0000000..25a71be --- /dev/null +++ b/scripts/_getopts_fix.sh @@ -0,0 +1,213 @@ +#!/bin/bash + +#================================================= +# FIX OF YNH_HANDLE_GETOPTS_ARGS FROM UNSTABLE +#================================================= + +# Internal helper design to allow helpers to use getopts to manage their arguments +# +# [internal] +# +# example: function my_helper() +# { +# declare -Ar args_array=( [a]=arg1= [b]=arg2= [c]=arg3 ) +# local arg1 +# local arg2 +# local arg3 +# ynh_handle_getopts_args "$@" +# +# [...] +# } +# my_helper --arg1 "val1" -b val2 -c +# +# usage: ynh_handle_getopts_args "$@" +# | arg: $@ - Simply "$@" to tranfert all the positionnal arguments to the function +# +# This helper need an array, named "args_array" with all the arguments used by the helper +# that want to use ynh_handle_getopts_args +# Be carreful, this array has to be an associative array, as the following example: +# declare -Ar args_array=( [a]=arg1 [b]=arg2= [c]=arg3 ) +# Let's explain this array: +# a, b and c are short options, -a, -b and -c +# arg1, arg2 and arg3 are the long options associated to the previous short ones. --arg1, --arg2 and --arg3 +# For each option, a short and long version has to be defined. +# Let's see something more significant +# declare -Ar args_array=( [u]=user [f]=finalpath= [d]=database ) +# +# NB: Because we're using 'declare' without -g, the array will be declared as a local variable. +# +# Please keep in mind that the long option will be used as a variable to store the values for this option. +# For the previous example, that means that $finalpath will be fill with the value given as argument for this option. +# +# Also, in the previous example, finalpath has a '=' at the end. That means this option need a value. +# So, the helper has to be call with --finalpath /final/path, --finalpath=/final/path or -f /final/path, the variable $finalpath will get the value /final/path +# If there's many values for an option, -f /final /path, the value will be separated by a ';' $finalpath=/final;/path +# For an option without value, like --user in the example, the helper can be called only with --user or -u. $user will then get the value 1. +# +# To keep a retrocompatibility, a package can still call a helper, using getopts, with positional arguments. +# The "legacy mode" will manage the positional arguments and fill the variable in the same order than they are given in $args_array. +# e.g. for `my_helper "val1" val2`, arg1 will be filled with val1, and arg2 with val2. +ynh_handle_getopts_args () { + # Manage arguments only if there's some provided + set +x + if [ $# -ne 0 ] + then + # Store arguments in an array to keep each argument separated + local arguments=("$@") + + # For each option in the array, reduce to short options for getopts (e.g. for [u]=user, --user will be -u) + # And built parameters string for getopts + # ${!args_array[@]} is the list of all option_flags in the array (An option_flag is 'u' in [u]=user, user is a value) + local getopts_parameters="" + local option_flag="" + for option_flag in "${!args_array[@]}" + do + # Concatenate each option_flags of the array to build the string of arguments for getopts + # Will looks like 'abcd' for -a -b -c -d + # If the value of an option_flag finish by =, it's an option with additionnal values. (e.g. --user bob or -u bob) + # Check the last character of the value associate to the option_flag + if [ "${args_array[$option_flag]: -1}" = "=" ] + then + # For an option with additionnal values, add a ':' after the letter for getopts. + getopts_parameters="${getopts_parameters}${option_flag}:" + else + getopts_parameters="${getopts_parameters}${option_flag}" + fi + # Check each argument given to the function + local arg="" + # ${#arguments[@]} is the size of the array + for arg in `seq 0 $(( ${#arguments[@]} - 1 ))` + do + # And replace long option (value of the option_flag) by the short option, the option_flag itself + # (e.g. for [u]=user, --user will be -u) + # Replace long option with = + arguments[arg]="${arguments[arg]//--${args_array[$option_flag]}/-${option_flag} }" + # And long option without = + arguments[arg]="${arguments[arg]//--${args_array[$option_flag]%=}/-${option_flag}}" + done + done + + # Read and parse all the arguments + # Use a function here, to use standart arguments $@ and be able to use shift. + parse_arg () { + # Read all arguments, until no arguments are left + while [ $# -ne 0 ] + do + # Initialize the index of getopts + OPTIND=1 + # Parse with getopts only if the argument begin by -, that means the argument is an option + # getopts will fill $parameter with the letter of the option it has read. + local parameter="" + getopts ":$getopts_parameters" parameter || true + + if [ "$parameter" = "?" ] + then + ynh_die --message="Invalid argument: -${OPTARG:-}" + elif [ "$parameter" = ":" ] + then + ynh_die --message="-$OPTARG parameter requires an argument." + else + local shift_value=1 + # Use the long option, corresponding to the short option read by getopts, as a variable + # (e.g. for [u]=user, 'user' will be used as a variable) + # Also, remove '=' at the end of the long option + # The variable name will be stored in 'option_var' + local option_var="${args_array[$parameter]%=}" + # If this option doesn't take values + # if there's a '=' at the end of the long option name, this option takes values + if [ "${args_array[$parameter]: -1}" != "=" ] + then + # 'eval ${option_var}' will use the content of 'option_var' + eval ${option_var}=1 + else + # Read all other arguments to find multiple value for this option. + # Load args in a array + local all_args=("$@") + + # If the first argument is longer than 2 characters, + # There's a value attached to the option, in the same array cell + if [ ${#all_args[0]} -gt 2 ]; then + # Remove the option and the space, so keep only the value itself. + all_args[0]="${all_args[0]#-${parameter} }" + # Reduce the value of shift, because the option has been removed manually + shift_value=$(( shift_value - 1 )) + fi + + # Declare the content of option_var as a variable. + eval ${option_var}="" + # Then read the array value per value + local i + for i in `seq 0 $(( ${#all_args[@]} - 1 ))` + do + # If this argument is an option, end here. + if [ "${all_args[$i]:0:1}" == "-" ] + then + # Ignore the first value of the array, which is the option itself + if [ "$i" -ne 0 ]; then + break + fi + else + # Else, add this value to this option + # Each value will be separated by ';' + if [ -n "${!option_var}" ] + then + # If there's already another value for this option, add a ; before adding the new value + eval ${option_var}+="\;" + fi + # Escape double quote to prevent any interpretation during the eval + all_args[$i]="${all_args[$i]//\"/\\\"}" + + eval ${option_var}+=\"${all_args[$i]}\" + shift_value=$(( shift_value + 1 )) + fi + done + fi + fi + + # Shift the parameter and its argument(s) + shift $shift_value + done + } + + # LEGACY MODE + # Check if there's getopts arguments + if [ "${arguments[0]:0:1}" != "-" ] + then + # If not, enter in legacy mode and manage the arguments as positionnal ones.. + # Dot not echo, to prevent to go through a helper output. But print only in the log. + set -x; echo "! Helper used in legacy mode !" > /dev/null; set +x + local i + for i in `seq 0 $(( ${#arguments[@]} -1 ))` + do + # Try to use legacy_args as a list of option_flag of the array args_array + # Otherwise, fallback to getopts_parameters to get the option_flag. But an associative arrays isn't always sorted in the correct order... + # Remove all ':' in getopts_parameters + getopts_parameters=${legacy_args:-${getopts_parameters//:}} + # Get the option_flag from getopts_parameters, by using the option_flag according to the position of the argument. + option_flag=${getopts_parameters:$i:1} + if [ -z "$option_flag" ]; then + ynh_print_warn --message="Too many arguments ! \"${arguments[$i]}\" will be ignored." + continue + fi + # Use the long option, corresponding to the option_flag, as a variable + # (e.g. for [u]=user, 'user' will be used as a variable) + # Also, remove '=' at the end of the long option + # The variable name will be stored in 'option_var' + local option_var="${args_array[$option_flag]%=}" + + # Escape double quote to prevent any interpretation during the eval + arguments[$i]="${arguments[$i]//\"/\\\"}" + + # Store each value given as argument in the corresponding variable + # The values will be stored in the same order than $args_array + eval ${option_var}+=\"${arguments[$i]}\" + done + unset legacy_args + else + # END LEGACY MODE + # Call parse_arg and pass the modified list of args as an array of arguments. + parse_arg "${arguments[@]}" + fi + fi + set -x +} diff --git a/scripts/backup b/scripts/backup index 6c2ac8d..6d5a35f 100644 --- a/scripts/backup +++ b/scripts/backup @@ -1,44 +1,65 @@ #!/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 #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading installation settings..." 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 #================================================= +ynh_print_info "Backing up the main app directory..." ynh_backup "$final_path" #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= +ynh_print_info "Backing up nginx web server configuration..." ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" +#================================================= +# BACKUP THE PHP-FPM CONFIGURATION +#================================================= +ynh_print_info "Backing up php-fpm configuration..." + +ynh_backup "/etc/php/7.0/fpm/pool.d/$app.conf" + #================================================= # BACKUP THE MYSQL DATABASE #================================================= +ynh_print_info "Backing up the MySQL database..." -ynh_mysql_dump_db "$app" > db.sql +ynh_mysql_dump_db "$db_name" > db.sql + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/install b/scripts/install index 70eb113..39366e2 100644 --- a/scripts/install +++ b/scripts/install @@ -1,116 +1,211 @@ #!/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 +# Overload the helper ynh_handle_getopts_args to have fixes from unstable. +# Needed for composer helpers +source _getopts_fix.sh #================================================= # 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 +is_public=$YNH_APP_ARG_IS_PUBLIC + +app=$YNH_APP_INSTANCE_NAME + #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= +ynh_print_info "Validating installation parameters..." -# 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_print_info "Storing installation settings..." +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app path $path_url ynh_app_setting_set $app admin $admin_ampache +ynh_app_setting_set $app is_public $is_public #================================================= -# DOWNLOAD, CHECK AND UNPACK SOURCE +# STANDARD MODIFICATIONS #================================================= +# INSTALL DEPENDENCIES +#================================================= +ynh_print_info "Installing 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 #================================================= +ynh_print_info "Creating 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 #================================================= +ynh_print_info "Setting up source files..." -# 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 #================================================= +ynh_print_info "Configuring nginx web server..." -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 #================================================= +ynh_print_info "Configuring system user..." -# Install dependency -ynh_install_app_dependencies libav-tools +# Create a system user +ynh_system_user_create $app + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_print_info "Configuring php-fpm..." + +# Create a dedicated php-fpm config +ynh_add_fpm_config #================================================= # SPECIFIC SETUP #================================================= +# CONFIGURE AMPACHE +#================================================= +ynh_print_info "Preconfiguring 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 +#================================================= +ynh_print_info "Installing ampache with composer..." + +# Install composer +ynh_install_composer + +ynh_exec_warn_less ynh_composer_exec --commands=\"install --prefer-source --no-dev\" + +#================================================= +# INSTALL MULTIMEDIA DIRECTORIES +#================================================= -# Create multimedia directories if necessary ynh_multimedia_build_main_dir #================================================= -# RELOAD SSOWAT +# PRE CONFIGURE AMPACHE #================================================= +ynh_print_info "Configuring 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 + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_print_info "Configuring SSOwat..." + +# Keep app public if necessary +if [ $is_public -eq 0 ] +then + ynh_app_setting_delete $app unprotected_uris +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_print_info "Reloading nginx web server..." + +systemctl reload nginx + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index b4578a9..d33343e 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,43 +1,79 @@ #!/bin/bash +#================================================= +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= +source _common.sh source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading installation settings..." 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_print_info "Removing 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 #================================================= +ynh_print_info "Removing dependencies" -# Remove dependencies +# Remove metapackage and its dependencies ynh_remove_app_dependencies + +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_print_info "Removing app main directory" + +# Remove the app directory securely +ynh_secure_remove "$final_path" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_print_info "Removing nginx web server configuration" + +# Remove the dedicated nginx config +ynh_remove_nginx_config + +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= +ynh_print_info "Removing php-fpm configuration" + +# Remove the dedicated php-fpm config +ynh_remove_fpm_config + +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= +ynh_print_info "Removing the dedicated system user" + +# Delete a system user +ynh_system_user_delete $app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 0162a1c..9977960 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,7 +1,7 @@ #!/bin/bash -set -eu - +#================================================= +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -17,62 +17,91 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading settings..." 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 #================================================= +ynh_print_info "Validating restoration parameters..." -# 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 -#================================================= - -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 - -#================================================= -# RESTORE THE APP MAIN DIR -#================================================= - -ynh_restore_file "$final_path" - +# STANDARD RESTORATION STEPS #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" -systemctl reload nginx + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_print_info "Restoring the app main directory..." + +ynh_restore_file "$final_path" + +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_print_info "Recreating the dedicated system user..." + +# 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_print_info "Reinstalling dependencies..." + +ynh_install_app_dependencies libav-tools #================================================= # RESTORE THE MYSQL DATABASE #================================================= +ynh_print_info "Restoring 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 +#================================================= +ynh_print_info "Reloading nginx web server and php-fpm..." + +systemctl reload php7.0-fpm +systemctl reload nginx + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index 66d8101..05ceaa1 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -6,75 +6,208 @@ source _common.sh source /usr/share/yunohost/helpers - -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_abort_if_errors +# Overload the helper ynh_handle_getopts_args to have fixes from unstable. +# Needed for composer helpers +source _getopts_fix.sh #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading installation 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) +is_public=$(ynh_app_setting_get $app is_public) +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 +#================================================= +ynh_print_info "Ensuring downward compatibility..." + +# If is_public doesn't exist, create it +if [ -z $is_public ]; then + is_public=1 + ynh_app_setting_set $app is_public $is_public +fi + +# Fix is_public as a boolean value +if [ "$is_public" = "Yes" ]; then + ynh_app_setting_set $app is_public 1 + is_public=1 +elif [ "$is_public" = "No" ]; then + ynh_app_setting_set $app is_public 0 + is_public=0 +fi + +# 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 + +ynh_app_setting_delete $app skipped_uris + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_print_info "Backing up the app before upgrading (may take a while)..." + +# 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 #================================================= +ynh_print_info "Upgrading source files..." -# 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 #================================================= +ynh_print_info "Upgrading nginx web server 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 #================================================= +ynh_print_info "Upgrading dependencies..." -# Install dependency -ynh_install_app_dependencies libav-tools +ynh_install_app_dependencies libav-tools php-cli #================================================= -# SPECIFIC SETUP +# CREATE DEDICATED USER #================================================= +ynh_print_info "Making sure dedicated system user exists..." -# Ampache installation -ampache_ynh_install +# Create a dedicated user (if not existing) +ynh_system_user_create $app #================================================= -# RELOAD SSOWAT +# PHP-FPM CONFIGURATION #================================================= +ynh_print_info "Upgrading 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 +#================================================= +ynh_print_info "Upgrading ampache configuration..." + +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 +#================================================= +ynh_print_info "Upgrading ampache with composer..." + +# Install composer +ynh_install_composer + +ynh_composer_exec --commands="config discard-changes true" +ynh_composer_exec --commands="update --prefer-source --no-interaction --no-dev" + +#================================================= +# UPDATE MULTIMEDIA DIRECTORIES #================================================= -# Pre config ampache -ampache_ynh_doconfig +ynh_multimedia_build_main_dir + +#================================================= +# UPGRADE AMPACHE WITH CURL +#================================================= +ynh_print_info "Upgrading 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 + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_print_info "Upgrading SSOwat configuration..." + +# Keep app public if necessary +if [ $is_public -eq 0 ] +then + ynh_app_setting_delete $app unprotected_uris +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_print_info "Reloading nginx web server..." + +systemctl reload nginx + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Upgrade of $app completed"