diff --git a/README.md b/README.md index 4f9ca85..774efb8 100644 --- a/README.md +++ b/README.md @@ -17,23 +17,33 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in A gemini server written in rust. +### Features -**Shipped version:** 0.6.5~ynh2 +- Vhosts +- CGI +- User directories +- Reverse proxy +- Redirect +- SCGI +- Reload config on SIGHUP + + +**Shipped version:** 0.6.6~ynh1 ## Disclaimers / important information -* Other infos that people should be aware of, such as: - * Redirect TCP/1965 port to the server - * To add a gemini capsule, create a /etc/gemserv/config.d/example.toml +Please note that Gemserv uses the TCP port 1965, so you can't use it for anything else. -``` +To add a gemini capsule, create a `/etc/gemserv/config.d/example.toml` file as following: + +``` toml [[server]] -hostname = "youdomain.org" -dir = "/path/to/serv/" -key = "/etc/yunohost/certs/youdomain.org/key.pem" -cert = "/etc/yunohost/certs/youdomain.org/crt.pem" +hostname = "yourdomain.org" +dir = "/path/to/serv" +key = "/etc/yunohost/certs/yourdomain.org/key.pem" +cert = "/etc/yunohost/certs/yourdomain.org/crt.pem" # index is optional but defaults to index.gemini. The server will serve files # ending in gemini or gmi. index = "index.gmi" @@ -48,17 +58,18 @@ cgipath = "/path/to/cgi-bin/" scgi = { "/scgi" = "localhost:4000" } # cgienv is optional cgienv = { "GIT_PROJECT_ROOT" = "/srv/git" } -# usrdir is optional. it'll look in /home/usr/public_gemini +# usrdir is optional. it'll look in each user's ~/public_gemini usrdir = true # proxy is optional # path is what comes after the hostname e.g. example.com/path proxy = { path = "localhost:1966" } # proxy_all is optional # It will send all requests to the specified server. It also supports streamming. -proxy_all = localhost:1967 +proxy_all = "localhost:1967" # redirect is optional redirect = { "/redirect" = "/", "/newdomain" = "gemini://example.net" } ``` + ## Documentation and resources * Upstream app code repository: https://git.sr.ht/~int80h/gemserv diff --git a/README_fr.md b/README_fr.md index 76fc941..a00bd01 100644 --- a/README_fr.md +++ b/README_fr.md @@ -13,23 +13,33 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour A gemini server written in rust. +### Features -**Version incluse :** 0.6.5~ynh2 +- Vhosts +- CGI +- User directories +- Reverse proxy +- Redirect +- SCGI +- Reload config on SIGHUP + + +**Version incluse :** 0.6.6~ynh1 ## Avertissements / informations importantes -* Other infos that people should be aware of, such as: - * Redirect TCP/1965 port to the server - * To add a gemini capsule, create a /etc/gemserv/config.d/example.toml +Please note that Gemserv uses the TCP port 1965, so you can't use it for anything else. -``` +To add a gemini capsule, create a `/etc/gemserv/config.d/example.toml` file as following: + +``` toml [[server]] -hostname = "youdomain.org" -dir = "/path/to/serv/" -key = "/etc/yunohost/certs/youdomain.org/key.pem" -cert = "/etc/yunohost/certs/youdomain.org/crt.pem" +hostname = "yourdomain.org" +dir = "/path/to/serv" +key = "/etc/yunohost/certs/yourdomain.org/key.pem" +cert = "/etc/yunohost/certs/yourdomain.org/crt.pem" # index is optional but defaults to index.gemini. The server will serve files # ending in gemini or gmi. index = "index.gmi" @@ -44,17 +54,18 @@ cgipath = "/path/to/cgi-bin/" scgi = { "/scgi" = "localhost:4000" } # cgienv is optional cgienv = { "GIT_PROJECT_ROOT" = "/srv/git" } -# usrdir is optional. it'll look in /home/usr/public_gemini +# usrdir is optional. it'll look in each user's ~/public_gemini usrdir = true # proxy is optional # path is what comes after the hostname e.g. example.com/path proxy = { path = "localhost:1966" } # proxy_all is optional # It will send all requests to the specified server. It also supports streamming. -proxy_all = localhost:1967 +proxy_all = "localhost:1967" # redirect is optional redirect = { "/redirect" = "/", "/newdomain" = "gemini://example.net" } ``` + ## Documentations et ressources * Dépôt de code officiel de l'app : https://git.sr.ht/~int80h/gemserv diff --git a/conf/app.src b/conf/app.src index 7b093cf..d21f30d 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://git.sr.ht/~int80h/gemserv/archive/v0.6.5.tar.gz -SOURCE_SUM=5a2b63028352c3a0726c5174148fd0e028934db250902427372a84680317f48e +SOURCE_URL=https://git.sr.ht/~int80h/gemserv/archive/v0.6.6.tar.gz +SOURCE_SUM=a4423b91bff3e05708c296fe6135d00b7d09acc33b15c7d078a5c8753a84aa5a SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/conf/server.toml b/conf/server.toml index 8c895a0..17a9b9a 100644 --- a/conf/server.toml +++ b/conf/server.toml @@ -1,6 +1,12 @@ -port = 1965 -# use "::" for ipv6 and ipv4 or "0.0.0.0" for ipv4 only -host = "::" +# interface accepts multiple interface/port combinations. However, due to the +# dual stack nature of linux if you specify "[::]:1965" linux will also listen +# on "0.0.0.0:1965" so if you manually specify both it will fail. +# interface = [ "0.0.0.0:1965, "[::]:1965" ] +interface = [ "[::]:1965" ] +# port and host have been deprecated in favor of interface but will still work +# for now. +# port = 1965 +# host = "::" # log is optional and server wide. It defaults to info if not set. Other levels # are error, warn, and info. If error is set it will only show error. If warn # is set it will show error and warn. Info shows all three. diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 241011b..9ab8c38 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1 +1,11 @@ A gemini server written in rust. + +### Features + +- Vhosts +- CGI +- User directories +- Reverse proxy +- Redirect +- SCGI +- Reload config on SIGHUP diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md index b7bbd18..af98e68 100644 --- a/doc/DISCLAIMER.md +++ b/doc/DISCLAIMER.md @@ -1,13 +1,13 @@ -* Other infos that people should be aware of, such as: - * Redirect TCP/1965 port to the server - * To add a gemini capsule, create a /etc/gemserv/config.d/example.toml +Please note that Gemserv uses the TCP port 1965, so you can't use it for anything else. -``` +To add a gemini capsule, create a `/etc/gemserv/config.d/example.toml` file as following: + +``` toml [[server]] -hostname = "youdomain.org" -dir = "/path/to/serv/" -key = "/etc/yunohost/certs/youdomain.org/key.pem" -cert = "/etc/yunohost/certs/youdomain.org/crt.pem" +hostname = "yourdomain.org" +dir = "/path/to/serv" +key = "/etc/yunohost/certs/yourdomain.org/key.pem" +cert = "/etc/yunohost/certs/yourdomain.org/crt.pem" # index is optional but defaults to index.gemini. The server will serve files # ending in gemini or gmi. index = "index.gmi" @@ -22,14 +22,14 @@ cgipath = "/path/to/cgi-bin/" scgi = { "/scgi" = "localhost:4000" } # cgienv is optional cgienv = { "GIT_PROJECT_ROOT" = "/srv/git" } -# usrdir is optional. it'll look in /home/usr/public_gemini +# usrdir is optional. it'll look in each user's ~/public_gemini usrdir = true # proxy is optional # path is what comes after the hostname e.g. example.com/path proxy = { path = "localhost:1966" } # proxy_all is optional # It will send all requests to the specified server. It also supports streamming. -proxy_all = localhost:1967 +proxy_all = "localhost:1967" # redirect is optional redirect = { "/redirect" = "/", "/newdomain" = "gemini://example.net" } -``` \ No newline at end of file +``` diff --git a/manifest.json b/manifest.json index e7bddc5..772beea 100644 --- a/manifest.json +++ b/manifest.json @@ -5,7 +5,7 @@ "description": { "en": "A gemini server written in rust." }, - "version": "0.6.5~ynh2", + "version": "0.6.6~ynh1", "url": "https://git.sr.ht/~int80h/gemserv/", "upstream": { "license": "MIT", @@ -23,7 +23,6 @@ "" ], "arguments": { - "install" : [ - ] + "install": [] } -} +} \ No newline at end of file diff --git a/scripts/backup b/scripts/backup index 913e2c9..8a338fa 100755 --- a/scripts/backup +++ b/scripts/backup @@ -27,7 +27,7 @@ ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) #================================================= # DECLARE DATA AND CONF FILES TO BACKUP diff --git a/scripts/install b/scripts/install index 250b2ae..754991d 100755 --- a/scripts/install +++ b/scripts/install @@ -30,7 +30,7 @@ app=$YNH_APP_INSTANCE_NAME #================================================= ynh_script_progression --message="Validating installation parameters..." -final_path=/opt/yunohost/$app +final_path="/opt/yunohost/$app" test ! -e "$final_path" || ynh_die --message="This path already contains a folder" #================================================= @@ -42,18 +42,18 @@ ynh_script_progression --message="Finding an available port..." # Find an available port port=1965 -ynh_app_setting_set --app=$app --key=port --value=$port +ynh_app_setting_set --app="$app" --key=port --value="$port" # Open the port ynh_script_progression --message="Configuring firewall..." -ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port +ynh_exec_warn_less yunohost firewall allow --no-upnp TCP "$port" #================================================= # INSTALL DEPENDENCIES #================================================= ynh_script_progression --message="Installing dependencies..." -ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies "$pkg_dependencies" #================================================= # CREATE DEDICATED USER @@ -61,16 +61,16 @@ ynh_install_app_dependencies $pkg_dependencies ynh_script_progression --message="Configuring system user..." # Create a system user -ynh_system_user_create --username=$app --home_dir=$final_path +ynh_system_user_create --username="$app" --home_dir="$final_path" -usermod -a -G ssl-cert $app +usermod -a -G ssl-cert "$app" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_script_progression --message="Setting up source files..." -ynh_app_setting_set --app=$app --key=final_path --value=$final_path +ynh_app_setting_set --app="$app" --key=final_path --value="$final_path" # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path/build" @@ -78,7 +78,7 @@ mkdir -p "$final_path/live" chmod 750 "$final_path" chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" +chown -R "$app":"$app" "$final_path" #================================================= # SPECIFIC SETUP @@ -116,12 +116,12 @@ mkdir -p "/etc/$app/config.d/" chmod 750 "/etc/$app" chmod -R o-rwx "/etc/$app" -chown -R $app:$app "/etc/$app" +chown -R "$app":"$app" "/etc/$app" ynh_add_config --template="../conf/server.toml" --destination="/etc/$app/config.d/server.toml" chmod 400 "/etc/$app/config.d/server.toml" -chown $app:$app "/etc/$app/config.d/server.toml" +chown "$app":"$app" "/etc/$app/config.d/server.toml" #================================================= # SETUP SYSTEMD @@ -146,7 +146,7 @@ ynh_use_logrotate #================================================= ynh_script_progression --message="Integrating service in YunoHost..." -yunohost service add $app --description="$app daemon" --log="/var/log/$app/$app.log" --needs_exposed_ports="1965" +yunohost service add "$app" --description="$app daemon" --log="/var/log/$app/$app.log" --needs_exposed_ports="1965" #================================================= # START SYSTEMD SERVICE @@ -154,7 +154,7 @@ yunohost service add $app --description="$app daemon" --log="/var/log/$app/$app. ynh_script_progression --message="Starting a systemd service..." # Start a systemd service -ynh_systemd_action --service_name=$app --action="start" --line_match="Started" --log_path="systemd" +ynh_systemd_action --service_name="$app" --action="start" --line_match="Started" --log_path="systemd" #================================================= # END OF SCRIPT diff --git a/scripts/remove b/scripts/remove index fb7ba04..291fa04 100755 --- a/scripts/remove +++ b/scripts/remove @@ -16,8 +16,8 @@ ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -port=$(ynh_app_setting_get --app=$app --key=port) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +port=$(ynh_app_setting_get --app="$app" --key=port) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) #================================================= # STANDARD REMOVE @@ -26,10 +26,10 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # Remove the service from the list of services known by YunoHost (added from `yunohost service add`) -if ynh_exec_warn_less yunohost service status $app >/dev/null +if ynh_exec_warn_less yunohost service status "$app" >/dev/null then ynh_script_progression --message="Removing $app service integration..." - yunohost service remove $app + yunohost service remove "$app" fi #================================================= @@ -71,7 +71,7 @@ ynh_remove_app_dependencies if yunohost firewall list | grep -q "\- $port$" then ynh_script_progression --message="Closing port $port..." - ynh_exec_warn_less yunohost firewall disallow TCP $port + ynh_exec_warn_less yunohost firewall disallow TCP "$port" fi #================================================= @@ -95,7 +95,7 @@ ynh_secure_remove --file="/var/log/$app" ynh_script_progression --message="Removing the dedicated system user..." # Delete a system user -ynh_system_user_delete --username=$app +ynh_system_user_delete --username="$app" #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index bea2570..c0d607d 100755 --- a/scripts/restore +++ b/scripts/restore @@ -27,14 +27,14 @@ ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= ynh_script_progression --message="Validating restoration parameters..." -test ! -d $final_path \ +test ! -d "$final_path" \ || ynh_die --message="There is already a directory: $final_path " #================================================= @@ -45,7 +45,7 @@ test ! -d $final_path \ ynh_script_progression --message="Recreating the dedicated system user..." # Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir=$final_path +ynh_system_user_create --username="$app" --home_dir="$final_path" #================================================= # RESTORE THE APP MAIN DIR @@ -56,7 +56,7 @@ ynh_restore_file --origin_path="$final_path" chmod 750 "$final_path" chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" +chown -R "$app":"$app" "$final_path" #================================================= # SPECIFIC RESTORATION @@ -66,7 +66,7 @@ chown -R $app:$app "$final_path" ynh_script_progression --message="Reinstalling dependencies..." # Define and install dependencies -ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies "$pkg_dependencies" #================================================= # RESTORE VARIOUS FILES @@ -81,7 +81,7 @@ ynh_restore_file --origin_path="/etc/$app/" ynh_script_progression --message="Restoring the systemd configuration..." ynh_restore_file --origin_path="/etc/systemd/system/$app.service" -systemctl enable $app.service --quiet +systemctl enable "$app".service --quiet #================================================= # RESTORE THE LOGROTATE CONFIGURATION @@ -95,14 +95,14 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= ynh_script_progression --message="Integrating service in YunoHost..." -yunohost service add $app --description="$app daemon" --log="/var/log/$app/$app.log" --needs_exposed_ports="1965" +yunohost service add "$app" --description="$app daemon" --log="/var/log/$app/$app.log" --needs_exposed_ports="1965" #================================================= # START SYSTEMD SERVICE #================================================= ynh_script_progression --message="Starting a systemd service..." -ynh_systemd_action --service_name=$app --action="start" --line_match="Started" --log_path="systemd" +ynh_systemd_action --service_name="$app" --action="start" --line_match="Started" --log_path="systemd" #================================================= # GENERIC FINALIZATION diff --git a/scripts/upgrade b/scripts/upgrade index 8b13bbc..503e60f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -16,7 +16,7 @@ ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) #================================================= # CHECK VERSION @@ -46,7 +46,7 @@ ynh_abort_if_errors #================================================= ynh_script_progression --message="Stopping a systemd service..." -ynh_systemd_action --service_name=$app --action="stop" --line_match="Stopped" --log_path="systemd" +ynh_systemd_action --service_name="$app" --action="stop" --line_match="Stopped" --log_path="systemd" #================================================= # ENSURE DOWNWARD COMPATIBILITY @@ -59,9 +59,9 @@ ynh_script_progression --message="Ensuring downward compatibility..." ynh_script_progression --message="Making sure dedicated system user exists..." # Create a dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir=$final_path +ynh_system_user_create --username="$app" --home_dir="$final_path" -usermod -a -G ssl-cert $app +usermod -a -G ssl-cert "$app" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -79,14 +79,14 @@ fi chmod 750 "$final_path" chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" +chown -R "$app":"$app" "$final_path" #================================================= # UPGRADE DEPENDENCIES #================================================= ynh_script_progression --message="Upgrading dependencies..." -ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies "$pkg_dependencies" #================================================= # SPECIFIC UPGRADE @@ -127,12 +127,12 @@ mkdir -p "/etc/$app/config.d/" chmod 750 "/etc/$app" chmod -R o-rwx "/etc/$app" -chown -R $app:$app "/etc/$app" +chown -R "$app":"$app" "/etc/$app" ynh_add_config --template="../conf/server.toml" --destination="/etc/$app/config.d/server.toml" chmod 400 "/etc/$app/config.d/server.toml" -chown $app:$app "/etc/$app/config.d/server.toml" +chown "$app":"$app" "/etc/$app/config.d/server.toml" #================================================= # SETUP SYSTEMD @@ -157,14 +157,14 @@ ynh_use_logrotate --non-append #================================================= ynh_script_progression --message="Integrating service in YunoHost..." -yunohost service add $app --description="$app daemon" --log="/var/log/$app/$app.log" --needs_exposed_ports="1965" +yunohost service add "$app" --description="$app daemon" --log="/var/log/$app/$app.log" --needs_exposed_ports="1965" #================================================= # START SYSTEMD SERVICE #================================================= ynh_script_progression --message="Starting a systemd service..." -ynh_systemd_action --service_name=$app --action="start" --line_match="Started" --log_path="systemd" +ynh_systemd_action --service_name="$app" --action="start" --line_match="Started" --log_path="systemd" #================================================= # END OF SCRIPT