mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Merge remote-tracking branch 'origin/dev' into bookworm
This commit is contained in:
commit
f37bfca80b
22 changed files with 342 additions and 201 deletions
|
@ -212,3 +212,11 @@ smtp_sasl_security_options = noanonymous
|
||||||
# where to find sasl_passwd
|
# where to find sasl_passwd
|
||||||
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
|
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if backup_mx_domains != "" %}
|
||||||
|
# Backup MX (secondary MX)
|
||||||
|
relay_domains = $mydestination {{backup_mx_domains}}
|
||||||
|
relay_recipient_maps = hash:/etc/postfix/relay_recipients
|
||||||
|
maximal_queue_lifetime = 20d
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ Subsystem sftp internal-sftp
|
||||||
|
|
||||||
# Apply following instructions to user with sftp perm only
|
# Apply following instructions to user with sftp perm only
|
||||||
Match Group sftp.main,!ssh.main
|
Match Group sftp.main,!ssh.main
|
||||||
ForceCommand internal-sftp
|
ForceCommand internal-sftp -u 0002
|
||||||
# We can't restrict to /home/%u because the chroot base must be owned by root
|
# We can't restrict to /home/%u because the chroot base must be owned by root
|
||||||
# So we chroot only on /home
|
# So we chroot only on /home
|
||||||
# See https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component
|
# See https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component
|
||||||
|
@ -97,7 +97,7 @@ Match Group sftp.main,!ssh.main
|
||||||
PermitUserRC no
|
PermitUserRC no
|
||||||
|
|
||||||
Match Group sftp.app,!ssh.app
|
Match Group sftp.app,!ssh.app
|
||||||
ForceCommand internal-sftp
|
ForceCommand internal-sftp -u 0002
|
||||||
ChrootDirectory %h
|
ChrootDirectory %h
|
||||||
AllowTcpForwarding no
|
AllowTcpForwarding no
|
||||||
AllowStreamLocalForwarding no
|
AllowStreamLocalForwarding no
|
||||||
|
|
28
debian/changelog
vendored
28
debian/changelog
vendored
|
@ -37,6 +37,34 @@ yunohost (12.0.0) unstable; urgency=low
|
||||||
|
|
||||||
-- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 04 May 2023 20:30:19 +0200
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 04 May 2023 20:30:19 +0200
|
||||||
|
|
||||||
|
yunohost (11.2.29) stable; urgency=low
|
||||||
|
|
||||||
|
- apps: generalize replacing __INSTALL_DIR__ and __APP__ in config panel 'bind' statement to any setting (9b0553580)
|
||||||
|
- apps/config panels: move the computation of the actual 'bind' value to the python core (a6785d34b)
|
||||||
|
- perf: add cache for _get_app_settings() (c14ebc8be, 7c7906046)
|
||||||
|
- quality: use _assert_is_installed for consistency instead of if not _is_intalled(app): raise (c409888a4)
|
||||||
|
- i18n: Translations updated for Basque, French, Galician, Greek, Indonesian
|
||||||
|
|
||||||
|
Thanks to all contributors <3 ! (cjdw, craftrac, José M, ppr, xabirequejo)
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Tue, 27 Aug 2024 14:46:26 +0200
|
||||||
|
|
||||||
|
yunohost (11.2.28) stable; urgency=low
|
||||||
|
|
||||||
|
- ci: various changes due to CI infrastructure changes (200f0272d, 764fe6a7b, 9083a5cc3, d0df3caed, 6733526be, df320a44c, 92f4a605b, f02d4a437, c5953b542)
|
||||||
|
- apps: exclude .well-known subpaths from conflict checks ([#1647](http://github.com/YunoHost/yunohost/pull/1647))
|
||||||
|
- apps: in apt resource, fix empty string in packages_from_raw_bash breaking dpkg-build (a76cd05e8)
|
||||||
|
- sftp: Tweak umask for SFTP ([#1384](http://github.com/YunoHost/yunohost/pull/1384))
|
||||||
|
- mail: Be able to use postfix as a backup ("secondary") MX hosts ([#1253](http://github.com/YunoHost/yunohost/pull/1253))
|
||||||
|
- diagnosis: Add check regarding rfkill blocking Wi-Fi card on RPi ([#1841](http://github.com/YunoHost/yunohost/pull/1841))
|
||||||
|
- users: trigger hooks when adding or removing user into group (51787a2f8)
|
||||||
|
- i18n: Translations updated for Basque, French, Indonesian, Russian
|
||||||
|
|
||||||
|
Thanks to all contributors <3 ! (cjdw, Emmanuel Averty, Ivan Davydov, ljf, ppr, Tagada, tituspijean, xabirequejo)
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Sun, 25 Aug 2024 13:17:43 +0200
|
||||||
|
>>>>>>> origin/dev
|
||||||
|
|
||||||
yunohost (11.2.27) stable; urgency=low
|
yunohost (11.2.27) stable; urgency=low
|
||||||
|
|
||||||
- apt resource: fix handling of empty 'packages' list breaking dpkg-deb call (3deffdbd5)
|
- apt resource: fix handling of empty 'packages' list breaking dpkg-deb call (3deffdbd5)
|
||||||
|
|
|
@ -22,7 +22,7 @@ _ynh_app_config_get_one() {
|
||||||
if [[ "$bind" == "settings" ]]; then
|
if [[ "$bind" == "settings" ]]; then
|
||||||
ynh_die --message="File '${short_setting}' can't be stored in settings"
|
ynh_die --message="File '${short_setting}' can't be stored in settings"
|
||||||
fi
|
fi
|
||||||
old[$short_setting]="$(ls "$(echo $bind | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s@__FINALPATH__@${final_path:-}@ | sed s/__APP__/$app/)" 2>/dev/null || echo YNH_NULL)"
|
old[$short_setting]="$(ls "$bind" 2>/dev/null || echo YNH_NULL)"
|
||||||
file_hash[$short_setting]="true"
|
file_hash[$short_setting]="true"
|
||||||
|
|
||||||
# Get multiline text from settings or from a full file
|
# Get multiline text from settings or from a full file
|
||||||
|
@ -32,7 +32,7 @@ _ynh_app_config_get_one() {
|
||||||
elif [[ "$bind" == *":"* ]]; then
|
elif [[ "$bind" == *":"* ]]; then
|
||||||
ynh_die --message="For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
ynh_die --message="For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
||||||
else
|
else
|
||||||
old[$short_setting]="$(cat $(echo $bind | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s@__FINALPATH__@${final_path:-}@ | sed s/__APP__/$app/) 2>/dev/null || echo YNH_NULL)"
|
old[$short_setting]="$(cat "$bind" 2>/dev/null || echo YNH_NULL)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get value from a kind of key/value file
|
# Get value from a kind of key/value file
|
||||||
|
@ -47,7 +47,7 @@ _ynh_app_config_get_one() {
|
||||||
bind_after="$(echo "${bind_key_}" | cut -d'>' -f1)"
|
bind_after="$(echo "${bind_key_}" | cut -d'>' -f1)"
|
||||||
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
||||||
fi
|
fi
|
||||||
local bind_file="$(echo "$bind" | cut -d: -f2 | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s@__FINALPATH__@${final_path:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$(echo "$bind" | cut -d: -f2)"
|
||||||
old[$short_setting]="$(ynh_read_var_in_file --file="${bind_file}" --key="${bind_key_}" --after="${bind_after}")"
|
old[$short_setting]="$(ynh_read_var_in_file --file="${bind_file}" --key="${bind_key_}" --after="${bind_after}")"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
@ -73,7 +73,7 @@ _ynh_app_config_apply_one() {
|
||||||
if [[ "$bind" == "settings" ]]; then
|
if [[ "$bind" == "settings" ]]; then
|
||||||
ynh_die --message="File '${short_setting}' can't be stored in settings"
|
ynh_die --message="File '${short_setting}' can't be stored in settings"
|
||||||
fi
|
fi
|
||||||
local bind_file="$(echo "$bind" | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s@__FINALPATH__@${final_path:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$bind"
|
||||||
if [[ "${!short_setting}" == "" ]]; then
|
if [[ "${!short_setting}" == "" ]]; then
|
||||||
ynh_backup_if_checksum_is_different --file="$bind_file"
|
ynh_backup_if_checksum_is_different --file="$bind_file"
|
||||||
ynh_secure_remove --file="$bind_file"
|
ynh_secure_remove --file="$bind_file"
|
||||||
|
@ -98,7 +98,7 @@ _ynh_app_config_apply_one() {
|
||||||
if [[ "$bind" == *":"* ]]; then
|
if [[ "$bind" == *":"* ]]; then
|
||||||
ynh_die --message="For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
ynh_die --message="For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
||||||
fi
|
fi
|
||||||
local bind_file="$(echo "$bind" | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s@__FINALPATH__@${final_path:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$bind"
|
||||||
ynh_backup_if_checksum_is_different --file="$bind_file"
|
ynh_backup_if_checksum_is_different --file="$bind_file"
|
||||||
echo "${!short_setting}" >"$bind_file"
|
echo "${!short_setting}" >"$bind_file"
|
||||||
ynh_store_file_checksum --file="$bind_file" --update_only
|
ynh_store_file_checksum --file="$bind_file" --update_only
|
||||||
|
@ -113,7 +113,7 @@ _ynh_app_config_apply_one() {
|
||||||
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
||||||
fi
|
fi
|
||||||
bind_key_=${bind_key_:-$short_setting}
|
bind_key_=${bind_key_:-$short_setting}
|
||||||
local bind_file="$(echo "$bind" | cut -d: -f2 | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s@__FINALPATH__@${final_path:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$(echo "$bind" | cut -d: -f2)"
|
||||||
|
|
||||||
ynh_backup_if_checksum_is_different --file="$bind_file"
|
ynh_backup_if_checksum_is_different --file="$bind_file"
|
||||||
ynh_write_var_in_file --file="${bind_file}" --key="${bind_key_}" --value="${!short_setting}" --after="${bind_after}"
|
ynh_write_var_in_file --file="${bind_file}" --key="${bind_key_}" --value="${!short_setting}" --after="${bind_after}"
|
||||||
|
@ -126,60 +126,9 @@ _ynh_app_config_apply_one() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_ynh_app_config_get() {
|
_ynh_app_config_get() {
|
||||||
# From settings
|
for line in $YNH_APP_CONFIG_PANEL_OPTIONS_TYPES_AND_BINDS; do
|
||||||
local lines
|
|
||||||
lines=$(
|
|
||||||
python3 <<EOL
|
|
||||||
import toml
|
|
||||||
from collections import OrderedDict
|
|
||||||
with open("../config_panel.toml", "r") as f:
|
|
||||||
file_content = f.read()
|
|
||||||
loaded_toml = toml.loads(file_content, _dict=OrderedDict)
|
|
||||||
|
|
||||||
for panel_name, panel in loaded_toml.items():
|
|
||||||
if not isinstance(panel, dict): continue
|
|
||||||
bind_panel = panel.get('bind')
|
|
||||||
for section_name, section in panel.items():
|
|
||||||
if not isinstance(section, dict): continue
|
|
||||||
bind_section = section.get('bind')
|
|
||||||
if not bind_section:
|
|
||||||
bind_section = bind_panel
|
|
||||||
elif bind_section[-1] == ":" and bind_panel and ":" in bind_panel:
|
|
||||||
regex, bind_panel_file = bind_panel.split(":")
|
|
||||||
if ">" in bind_section:
|
|
||||||
bind_section = bind_section + bind_panel_file
|
|
||||||
else:
|
|
||||||
bind_section = regex + bind_section + bind_panel_file
|
|
||||||
|
|
||||||
for name, param in section.items():
|
|
||||||
if not isinstance(param, dict):
|
|
||||||
continue
|
|
||||||
|
|
||||||
bind = param.get('bind')
|
|
||||||
|
|
||||||
if not bind:
|
|
||||||
if bind_section:
|
|
||||||
bind = bind_section
|
|
||||||
else:
|
|
||||||
bind = 'settings'
|
|
||||||
elif bind[-1] == ":" and bind_section and ":" in bind_section:
|
|
||||||
regex, bind_file = bind_section.split(":")
|
|
||||||
if ">" in bind:
|
|
||||||
bind = bind + bind_file
|
|
||||||
else:
|
|
||||||
bind = regex + bind + bind_file
|
|
||||||
if bind == "settings" and param.get('type', 'string') == 'file':
|
|
||||||
bind = 'null'
|
|
||||||
|
|
||||||
print('|'.join([
|
|
||||||
name,
|
|
||||||
param.get('type', 'string'),
|
|
||||||
bind
|
|
||||||
]))
|
|
||||||
EOL
|
|
||||||
)
|
|
||||||
for line in $lines; do
|
|
||||||
# Split line into short_setting, type and bind
|
# Split line into short_setting, type and bind
|
||||||
IFS='|' read short_setting type bind <<<"$line"
|
IFS='|' read short_setting type bind <<<"$line"
|
||||||
binds[${short_setting}]="$bind"
|
binds[${short_setting}]="$bind"
|
||||||
|
@ -188,7 +137,6 @@ EOL
|
||||||
formats[${short_setting}]=""
|
formats[${short_setting}]=""
|
||||||
ynh_app_config_get_one $short_setting $type $bind
|
ynh_app_config_get_one $short_setting $type $bind
|
||||||
done
|
done
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ynh_app_config_apply() {
|
_ynh_app_config_apply() {
|
||||||
|
|
|
@ -22,7 +22,7 @@ _ynh_app_config_get_one() {
|
||||||
if [[ "$bind" == "settings" ]]; then
|
if [[ "$bind" == "settings" ]]; then
|
||||||
ynh_die "File '${short_setting}' can't be stored in settings"
|
ynh_die "File '${short_setting}' can't be stored in settings"
|
||||||
fi
|
fi
|
||||||
old[$short_setting]="$(ls "$(echo $bind | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s/__APP__/$app/)" 2>/dev/null || echo YNH_NULL)"
|
old[$short_setting]="$(ls "$bind" 2>/dev/null || echo YNH_NULL)"
|
||||||
file_hash[$short_setting]="true"
|
file_hash[$short_setting]="true"
|
||||||
|
|
||||||
# Get multiline text from settings or from a full file
|
# Get multiline text from settings or from a full file
|
||||||
|
@ -32,7 +32,7 @@ _ynh_app_config_get_one() {
|
||||||
elif [[ "$bind" == *":"* ]]; then
|
elif [[ "$bind" == *":"* ]]; then
|
||||||
ynh_die "For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
ynh_die "For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
||||||
else
|
else
|
||||||
old[$short_setting]="$(cat $(echo $bind | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s/__APP__/$app/) 2>/dev/null || echo YNH_NULL)"
|
old[$short_setting]="$(cat "$bind" 2>/dev/null || echo YNH_NULL)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get value from a kind of key/value file
|
# Get value from a kind of key/value file
|
||||||
|
@ -47,7 +47,7 @@ _ynh_app_config_get_one() {
|
||||||
bind_after="$(echo "${bind_key_}" | cut -d'>' -f1)"
|
bind_after="$(echo "${bind_key_}" | cut -d'>' -f1)"
|
||||||
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
||||||
fi
|
fi
|
||||||
local bind_file="$(echo "$bind" | cut -d: -f2 | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$(echo "$bind" | cut -d: -f2)"
|
||||||
old[$short_setting]="$(ynh_read_var_in_file --file="${bind_file}" --key="${bind_key_}" --after="${bind_after}")"
|
old[$short_setting]="$(ynh_read_var_in_file --file="${bind_file}" --key="${bind_key_}" --after="${bind_after}")"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
@ -73,7 +73,7 @@ _ynh_app_config_apply_one() {
|
||||||
if [[ "$bind" == "settings" ]]; then
|
if [[ "$bind" == "settings" ]]; then
|
||||||
ynh_die "File '${short_setting}' can't be stored in settings"
|
ynh_die "File '${short_setting}' can't be stored in settings"
|
||||||
fi
|
fi
|
||||||
local bind_file="$(echo "$bind" | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$bind"
|
||||||
if [[ "${!short_setting}" == "" ]]; then
|
if [[ "${!short_setting}" == "" ]]; then
|
||||||
ynh_backup_if_checksum_is_different "$bind_file"
|
ynh_backup_if_checksum_is_different "$bind_file"
|
||||||
ynh_safe_rm "$bind_file"
|
ynh_safe_rm "$bind_file"
|
||||||
|
@ -101,7 +101,7 @@ _ynh_app_config_apply_one() {
|
||||||
if [[ "$bind" == *":"* ]]; then
|
if [[ "$bind" == *":"* ]]; then
|
||||||
ynh_die "For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
ynh_die "For technical reasons, multiline text '${short_setting}' can't be stored automatically in a variable file, you have to create custom getter/setter"
|
||||||
fi
|
fi
|
||||||
local bind_file="$(echo "$bind" | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$bind"
|
||||||
ynh_backup_if_checksum_is_different "$bind_file"
|
ynh_backup_if_checksum_is_different "$bind_file"
|
||||||
echo "${!short_setting}" >"$bind_file"
|
echo "${!short_setting}" >"$bind_file"
|
||||||
if _ynh_file_checksum_exists "$bind_file"
|
if _ynh_file_checksum_exists "$bind_file"
|
||||||
|
@ -119,7 +119,7 @@ _ynh_app_config_apply_one() {
|
||||||
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
bind_key_="$(echo "${bind_key_}" | cut -d'>' -f2)"
|
||||||
fi
|
fi
|
||||||
bind_key_=${bind_key_:-$short_setting}
|
bind_key_=${bind_key_:-$short_setting}
|
||||||
local bind_file="$(echo "$bind" | cut -d: -f2 | sed s@__INSTALL_DIR__@${install_dir:-}@ | sed s/__APP__/$app/)"
|
local bind_file="$(echo "$bind" | cut -d: -f2)"
|
||||||
|
|
||||||
ynh_backup_if_checksum_is_different "$bind_file"
|
ynh_backup_if_checksum_is_different "$bind_file"
|
||||||
ynh_write_var_in_file --file="${bind_file}" --key="${bind_key_}" --value="${!short_setting}" --after="${bind_after}"
|
ynh_write_var_in_file --file="${bind_file}" --key="${bind_key_}" --value="${!short_setting}" --after="${bind_after}"
|
||||||
|
@ -135,60 +135,9 @@ _ynh_app_config_apply_one() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_ynh_app_config_get() {
|
_ynh_app_config_get() {
|
||||||
# From settings
|
for line in $YNH_APP_CONFIG_PANEL_OPTIONS_TYPES_AND_BINDS; do
|
||||||
local lines
|
|
||||||
lines=$(
|
|
||||||
python3 <<EOL
|
|
||||||
import toml
|
|
||||||
from collections import OrderedDict
|
|
||||||
with open("../config_panel.toml", "r") as f:
|
|
||||||
file_content = f.read()
|
|
||||||
loaded_toml = toml.loads(file_content, _dict=OrderedDict)
|
|
||||||
|
|
||||||
for panel_name, panel in loaded_toml.items():
|
|
||||||
if not isinstance(panel, dict): continue
|
|
||||||
bind_panel = panel.get('bind')
|
|
||||||
for section_name, section in panel.items():
|
|
||||||
if not isinstance(section, dict): continue
|
|
||||||
bind_section = section.get('bind')
|
|
||||||
if not bind_section:
|
|
||||||
bind_section = bind_panel
|
|
||||||
elif bind_section[-1] == ":" and bind_panel and ":" in bind_panel:
|
|
||||||
regex, bind_panel_file = bind_panel.split(":")
|
|
||||||
if ">" in bind_section:
|
|
||||||
bind_section = bind_section + bind_panel_file
|
|
||||||
else:
|
|
||||||
bind_section = regex + bind_section + bind_panel_file
|
|
||||||
|
|
||||||
for name, param in section.items():
|
|
||||||
if not isinstance(param, dict):
|
|
||||||
continue
|
|
||||||
|
|
||||||
bind = param.get('bind')
|
|
||||||
|
|
||||||
if not bind:
|
|
||||||
if bind_section:
|
|
||||||
bind = bind_section
|
|
||||||
else:
|
|
||||||
bind = 'settings'
|
|
||||||
elif bind[-1] == ":" and bind_section and ":" in bind_section:
|
|
||||||
regex, bind_file = bind_section.split(":")
|
|
||||||
if ">" in bind:
|
|
||||||
bind = bind + bind_file
|
|
||||||
else:
|
|
||||||
bind = regex + bind + bind_file
|
|
||||||
if bind == "settings" and param.get('type', 'string') == 'file':
|
|
||||||
bind = 'null'
|
|
||||||
|
|
||||||
print('|'.join([
|
|
||||||
name,
|
|
||||||
param.get('type', 'string'),
|
|
||||||
bind
|
|
||||||
]))
|
|
||||||
EOL
|
|
||||||
)
|
|
||||||
for line in $lines; do
|
|
||||||
# Split line into short_setting, type and bind
|
# Split line into short_setting, type and bind
|
||||||
IFS='|' read short_setting type bind <<<"$line"
|
IFS='|' read short_setting type bind <<<"$line"
|
||||||
binds[${short_setting}]="$bind"
|
binds[${short_setting}]="$bind"
|
||||||
|
@ -197,7 +146,6 @@ EOL
|
||||||
formats[${short_setting}]=""
|
formats[${short_setting}]=""
|
||||||
ynh_app_config_get_one $short_setting $type $bind
|
ynh_app_config_get_one $short_setting $type $bind
|
||||||
done
|
done
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ynh_app_config_apply() {
|
_ynh_app_config_apply() {
|
||||||
|
|
|
@ -45,6 +45,21 @@ do_pre_regen() {
|
||||||
|
|
||||||
cat <<<"[${relay_host}]:${relay_port} ${relay_user}:${relay_password}" >${postfix_dir}/sasl_passwd
|
cat <<<"[${relay_host}]:${relay_port} ${relay_user}:${relay_password}" >${postfix_dir}/sasl_passwd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Use this postfix server as a backup MX
|
||||||
|
export backup_mx_domains="$(yunohost settings get 'email.smtp.smtp_backup_mx_domains' | sed "s/,/ /g")"
|
||||||
|
export backup_mx_emails="$(yunohost settings get 'email.smtp.smtp_backup_mx_emails_whitelisted' | sed "s/,/ /g")"
|
||||||
|
rm -f ${postfix_dir}/relay_recipients
|
||||||
|
touch ${postfix_dir}/relay_recipients
|
||||||
|
if [ -n "${backup_mx_domains}" ] && [ -n "${backup_mx_emails}" ]
|
||||||
|
then
|
||||||
|
for mail in ${backup_mx_emails}
|
||||||
|
do
|
||||||
|
echo "$mail OK" >> ${postfix_dir}/relay_recipients
|
||||||
|
done
|
||||||
|
postmap ${postfix_dir}/relay_recipients
|
||||||
|
fi
|
||||||
|
|
||||||
export main_domain
|
export main_domain
|
||||||
export domain_list="$(yunohost domain list --features mail_in mail_out --output-as json | jq -r ".domains[]" | tr '\n' ' ')"
|
export domain_list="$(yunohost domain list --features mail_in mail_out --output-as json | jq -r ".domains[]" | tr '\n' ' ')"
|
||||||
ynh_render_template "main.cf" "${postfix_dir}/main.cf"
|
ynh_render_template "main.cf" "${postfix_dir}/main.cf"
|
||||||
|
@ -78,6 +93,11 @@ do_post_regen() {
|
||||||
postmap /etc/postfix/sasl_passwd
|
postmap /etc/postfix/sasl_passwd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -e /etc/postfix/relay_recipients ]; then
|
||||||
|
chmod 750 /etc/postfix/relay_recipients*
|
||||||
|
chown postfix:root /etc/postfix/relay_recipients*
|
||||||
|
fi
|
||||||
|
|
||||||
postmap -F hash:/etc/postfix/sni
|
postmap -F hash:/etc/postfix/sni
|
||||||
|
|
||||||
python3 -c 'from yunohost.app import regen_mail_app_user_config_for_dovecot_and_postfix as r; r(only="postfix")'
|
python3 -c 'from yunohost.app import regen_mail_app_user_config_for_dovecot_and_postfix as r; r(only="postfix")'
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
{
|
{
|
||||||
"password_too_simple_1": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 8 χαρακτήρες",
|
"password_too_simple_1": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 8 χαρακτήρες",
|
||||||
"aborting": "Ματαίωση."
|
"aborting": "Ματαίωση.",
|
||||||
}
|
"action_invalid": "Μη έγκυρη ενέργεια '{action}'",
|
||||||
|
"app_action_broke_system": "Αυτή η ενέργεια φαίνεται να έχει προκαλέσει προβλήματα σε αυτές τις σημαντικές υπηρεσίες: {services}",
|
||||||
|
"app_already_installed": "Η φαρμογή {app} είναι ήδη εγκατεστημένη",
|
||||||
|
"admin_password": "Κωδικός διαχείρισης",
|
||||||
|
"all_users": "Όλοι οι χρήστες YunoHost",
|
||||||
|
"admins": "Διαχειριστές",
|
||||||
|
"app_action_failed": "Αποτυχία εκτέλεσης ενέργειας {action} για την εφαρμογή {app}",
|
||||||
|
"already_up_to_date": "Δεν υπάρχει τίποτα να γίνει. Όλα είναι επικαιροποιημένα."
|
||||||
|
}
|
||||||
|
|
|
@ -307,6 +307,8 @@
|
||||||
"diagnosis_regenconf_allgood": "All configuration files are in line with the recommended configuration!",
|
"diagnosis_regenconf_allgood": "All configuration files are in line with the recommended configuration!",
|
||||||
"diagnosis_regenconf_manually_modified": "Configuration file <code>{file}</code> appears to have been manually modified.",
|
"diagnosis_regenconf_manually_modified": "Configuration file <code>{file}</code> appears to have been manually modified.",
|
||||||
"diagnosis_regenconf_manually_modified_details": "This is probably OK if you know what you're doing! YunoHost will stop updating this file automatically… But beware that YunoHost upgrades could contain important recommended changes. If you want to, you can inspect the differences with <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> and force the reset to the recommended configuration with <cmd>yunohost tools regen-conf {category} --force</cmd>",
|
"diagnosis_regenconf_manually_modified_details": "This is probably OK if you know what you're doing! YunoHost will stop updating this file automatically… But beware that YunoHost upgrades could contain important recommended changes. If you want to, you can inspect the differences with <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> and force the reset to the recommended configuration with <cmd>yunohost tools regen-conf {category} --force</cmd>",
|
||||||
|
"diagnosis_rfkill_wifi": "The Wi-Fi card is disabled and a system warning might prevent app installations",
|
||||||
|
"diagnosis_rfkill_wifi_details": "This warning sneaks in many command outputs, breaking some apps. It is usually required to specify your country code with the command <code>sudo raspi-config</code>. Here is the error:<br>{rfkill_wifi_error}",
|
||||||
"diagnosis_rootfstotalspace_critical": "The root filesystem only has a total of {space} which is quite worrisome! You will likely run out of disk space very quickly! It's recommended to have at least 16 GB for the root filesystem.",
|
"diagnosis_rootfstotalspace_critical": "The root filesystem only has a total of {space} which is quite worrisome! You will likely run out of disk space very quickly! It's recommended to have at least 16 GB for the root filesystem.",
|
||||||
"diagnosis_rootfstotalspace_warning": "The root filesystem only has a total of {space}. This may be okay, but be careful because ultimately you may run out of disk space quickly… It's recommended to have at least 16 GB for the root filesystem.",
|
"diagnosis_rootfstotalspace_warning": "The root filesystem only has a total of {space}. This may be okay, but be careful because ultimately you may run out of disk space quickly… It's recommended to have at least 16 GB for the root filesystem.",
|
||||||
"diagnosis_security_vulnerable_to_meltdown": "You appear vulnerable to the Meltdown critical security vulnerability",
|
"diagnosis_security_vulnerable_to_meltdown": "You appear vulnerable to the Meltdown critical security vulnerability",
|
||||||
|
@ -462,6 +464,10 @@
|
||||||
"global_settings_setting_security_experimental_enabled_help": "Enable experimental security features (don't enable this if you don't know what you're doing!)",
|
"global_settings_setting_security_experimental_enabled_help": "Enable experimental security features (don't enable this if you don't know what you're doing!)",
|
||||||
"global_settings_setting_smtp_allow_ipv6": "Allow IPv6",
|
"global_settings_setting_smtp_allow_ipv6": "Allow IPv6",
|
||||||
"global_settings_setting_smtp_allow_ipv6_help": "Allow the use of IPv6 to receive and send mail",
|
"global_settings_setting_smtp_allow_ipv6_help": "Allow the use of IPv6 to receive and send mail",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains": "Domains to act as secondary MX for",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains_help": "Allow this server to act as a backup *secondary* MX domain for the listed domain. This means that if the main MX for the domain is not reachable (for example because of an outage), mails will still be sent to this server, which will keep them during a maximum of 20 days and try to relay them to the real destination once it goes back up. Several domains can be provided, separated by commas.",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted": "SMTP backup MX emails whitelist",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted_help": "When acting as a secondary MX, the exhaustive list of allowed recipient's email addresses must be provided (otherwise mails will be refused and discarded). Several entries can be provided, separated by commas.",
|
||||||
"global_settings_setting_smtp_relay_enabled": "Enable SMTP relay",
|
"global_settings_setting_smtp_relay_enabled": "Enable SMTP relay",
|
||||||
"global_settings_setting_smtp_relay_enabled_help": "Enable the SMTP relay to use in order to send mail instead of this yunohost instance. Useful if you are in one of this situation: your 25 port is blocked by your ISP or VPS provider, you have a residential IP listed on DUHL, you are not able to configure reverse DNS or this server is not directly exposed on the internet and you want use an other one to send mails.",
|
"global_settings_setting_smtp_relay_enabled_help": "Enable the SMTP relay to use in order to send mail instead of this yunohost instance. Useful if you are in one of this situation: your 25 port is blocked by your ISP or VPS provider, you have a residential IP listed on DUHL, you are not able to configure reverse DNS or this server is not directly exposed on the internet and you want use an other one to send mails.",
|
||||||
"global_settings_setting_smtp_relay_host": "SMTP relay host",
|
"global_settings_setting_smtp_relay_host": "SMTP relay host",
|
||||||
|
@ -821,4 +827,4 @@
|
||||||
"yunohost_installing": "Installing YunoHost…",
|
"yunohost_installing": "Installing YunoHost…",
|
||||||
"yunohost_not_installed": "YunoHost is not correctly installed. Please run 'yunohost tools postinstall'",
|
"yunohost_not_installed": "YunoHost is not correctly installed. Please run 'yunohost tools postinstall'",
|
||||||
"yunohost_postinstall_end_tip": "The post-install completed! To finalize your setup, please consider:\n - diagnose potential issues through the 'Diagnosis' section of the webadmin (or 'yunohost diagnosis run' in command-line);\n - reading the 'Finalizing your setup' and 'Getting to know YunoHost' parts in the admin documentation: https://yunohost.org/admindoc."
|
"yunohost_postinstall_end_tip": "The post-install completed! To finalize your setup, please consider:\n - diagnose potential issues through the 'Diagnosis' section of the webadmin (or 'yunohost diagnosis run' in command-line);\n - reading the 'Finalizing your setup' and 'Getting to know YunoHost' parts in the admin documentation: https://yunohost.org/admindoc."
|
||||||
}
|
}
|
|
@ -36,7 +36,7 @@
|
||||||
"diagnosis_http_bad_status_code": "Zerbitzari hau ez den beste gailu batek erantzun omen dio eskaerari (agian routerrak).<br>1. Honen arrazoi ohikoena 80 (eta 443) ataka <a href='https://yunohost.org/isp_box_config'>zerbitzarira ondo birbidaltzen ez dela</a> da.<br>2. Konfigurazio konplexua badarabilzu, egiaztatu suebakiak edo reverse-proxyk oztopatzen ez dutela.",
|
"diagnosis_http_bad_status_code": "Zerbitzari hau ez den beste gailu batek erantzun omen dio eskaerari (agian routerrak).<br>1. Honen arrazoi ohikoena 80 (eta 443) ataka <a href='https://yunohost.org/isp_box_config'>zerbitzarira ondo birbidaltzen ez dela</a> da.<br>2. Konfigurazio konplexua badarabilzu, egiaztatu suebakiak edo reverse-proxyk oztopatzen ez dutela.",
|
||||||
"diagnosis_http_timeout": "Denbora agortu da sare lokaletik kanpo zure zerbitzarira konektatzeko ahaleginean. Eskuragarri ez dagoela dirudi.<br>1. 80 (eta 443) ataka <a href='https://yunohost.org/isp_box_config'>zerbitzarira modu egokian birzuzentzen ez direla da</a> ohiko zergatia.<br>2. Badaezpada egiaztatu nginx martxan dagoela.<br>3. Konfigurazio konplexuetan, egiaztatu suebakiak edo reverse-proxyk konexioa oztopatzen ez dutela.",
|
"diagnosis_http_timeout": "Denbora agortu da sare lokaletik kanpo zure zerbitzarira konektatzeko ahaleginean. Eskuragarri ez dagoela dirudi.<br>1. 80 (eta 443) ataka <a href='https://yunohost.org/isp_box_config'>zerbitzarira modu egokian birzuzentzen ez direla da</a> ohiko zergatia.<br>2. Badaezpada egiaztatu nginx martxan dagoela.<br>3. Konfigurazio konplexuetan, egiaztatu suebakiak edo reverse-proxyk konexioa oztopatzen ez dutela.",
|
||||||
"app_sources_fetch_failed": "Ezinezkoa izan da fitxategiak eskuratzea, zuzena al da URLa?",
|
"app_sources_fetch_failed": "Ezinezkoa izan da fitxategiak eskuratzea, zuzena al da URLa?",
|
||||||
"app_make_default_location_already_used": "Ezinezkoa izan da '{app}' '{domain}' domeinuan lehenestea, '{other_app}'(e)k lehendik ere erabiltzen duelako",
|
"app_make_default_location_already_used": "Ezin da '{app}' '{domain}' domeinuan lehenetsi, '{other_app}'(e)k lehendik ere erabiltzen duelako",
|
||||||
"app_already_installed_cant_change_url": "Aplikazio hau instalatuta dago dagoeneko. URLa ezin da aldatu aukera honekin. Markatu 'app changeurl' markatzeko moduan badago.",
|
"app_already_installed_cant_change_url": "Aplikazio hau instalatuta dago dagoeneko. URLa ezin da aldatu aukera honekin. Markatu 'app changeurl' markatzeko moduan badago.",
|
||||||
"diagnosis_ip_not_connected_at_all": "Badirudi zerbitzaria ez dagoela internetera konektatuta!?",
|
"diagnosis_ip_not_connected_at_all": "Badirudi zerbitzaria ez dagoela internetera konektatuta!?",
|
||||||
"app_already_up_to_date": "{app} egunean da dagoeneko",
|
"app_already_up_to_date": "{app} egunean da dagoeneko",
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
"config_validate_url": "Benetazko URL bat izan behar da",
|
"config_validate_url": "Benetazko URL bat izan behar da",
|
||||||
"app_restore_script_failed": "Errorea gertatu da aplikazioa lehengoratzeko aginduan",
|
"app_restore_script_failed": "Errorea gertatu da aplikazioa lehengoratzeko aginduan",
|
||||||
"app_upgrade_some_app_failed": "Ezinezkoa izan da aplikazio batzuk eguneratzea",
|
"app_upgrade_some_app_failed": "Ezinezkoa izan da aplikazio batzuk eguneratzea",
|
||||||
"app_install_failed": "Ezinezkoa izan da {app} instalatzea: {error}",
|
"app_install_failed": "Ezin da {app} instalatu: {error}",
|
||||||
"diagnosis_basesystem_kernel": "Zerbitzariak Linuxen {kernel_version} kernela darabil",
|
"diagnosis_basesystem_kernel": "Zerbitzariak Linuxen {kernel_version} kernela darabil",
|
||||||
"app_argument_invalid": "Aukeratu balio egoki bat '{name}' argumenturako: {error}",
|
"app_argument_invalid": "Aukeratu balio egoki bat '{name}' argumenturako: {error}",
|
||||||
"app_already_installed": "{app} instalatuta dago dagoeneko",
|
"app_already_installed": "{app} instalatuta dago dagoeneko",
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
"diagnosis_http_could_not_diagnose": "Ezinezkoa izan da domeinuak IPv{ipversion} kanpotik eskuragarri dauden egiaztatzea.",
|
"diagnosis_http_could_not_diagnose": "Ezinezkoa izan da domeinuak IPv{ipversion} kanpotik eskuragarri dauden egiaztatzea.",
|
||||||
"diagnosis_http_ok": "{domain} domeinua HTTP bidez bisitatu daiteke sare lokaletik kanpo.",
|
"diagnosis_http_ok": "{domain} domeinua HTTP bidez bisitatu daiteke sare lokaletik kanpo.",
|
||||||
"diagnosis_http_unreachable": "Badirudi {domain} domeinua ez dagoela eskuragarri HTTP bidez sare lokaletik kanpo.",
|
"diagnosis_http_unreachable": "Badirudi {domain} domeinua ez dagoela eskuragarri HTTP bidez sare lokaletik kanpo.",
|
||||||
"apps_catalog_failed_to_download": "Ezinezkoa izan da {apps_catalog} aplikazioen zerrenda eskuratzea: {error}",
|
"apps_catalog_failed_to_download": "Ezin da {apps_catalog} aplikazioen zerrenda eskuratu: {error}",
|
||||||
"apps_catalog_init_success": "Abiarazi da aplikazioen katalogo sistema!",
|
"apps_catalog_init_success": "Abiarazi da aplikazioen katalogo sistema!",
|
||||||
"apps_catalog_obsolete_cache": "Aplikazioen katalogoaren katxea hutsik edo zaharkituta dago.",
|
"apps_catalog_obsolete_cache": "Aplikazioen katalogoaren katxea hutsik edo zaharkituta dago.",
|
||||||
"diagnosis_description_mail": "Posta elektronikoa",
|
"diagnosis_description_mail": "Posta elektronikoa",
|
||||||
|
@ -148,14 +148,14 @@
|
||||||
"diagnosis_http_hairpinning_issue": "Dirudienez zure sareak ez du hairpinninga gaituta.",
|
"diagnosis_http_hairpinning_issue": "Dirudienez zure sareak ez du hairpinninga gaituta.",
|
||||||
"diagnosis_http_partially_unreachable": "Badirudi {domain} domeinua ezin dela bisitatu HTTP bidez IPv{failed} sare lokaletik kanpo, bai ordea IPv{passed} erabiliz.",
|
"diagnosis_http_partially_unreachable": "Badirudi {domain} domeinua ezin dela bisitatu HTTP bidez IPv{failed} sare lokaletik kanpo, bai ordea IPv{passed} erabiliz.",
|
||||||
"backup_archive_cant_retrieve_info_json": "Ezinezkoa izan da '{archive}' fitxategiko informazioa eskuratzea… info.json fitxategia ezin izan da eskuratu (edo ez da baliozko json-a).",
|
"backup_archive_cant_retrieve_info_json": "Ezinezkoa izan da '{archive}' fitxategiko informazioa eskuratzea… info.json fitxategia ezin izan da eskuratu (edo ez da baliozko json-a).",
|
||||||
"diagnosis_domain_expiration_not_found": "Ezinezkoa izan da domeinu batzuen iraungitze data egiaztatzea",
|
"diagnosis_domain_expiration_not_found": "Ezin da domeinu batzuen iraungitze data egiaztatu",
|
||||||
"diagnosis_domain_expiration_not_found_details": "Badirudi {domain} domeinuari buruzko WHOIS informazioak ez duela zehazten noiz iraungiko den?",
|
"diagnosis_domain_expiration_not_found_details": "Badirudi {domain} domeinuari buruzko WHOIS informazioak ez duela zehazten noiz iraungiko den?",
|
||||||
"certmanager_domain_not_diagnosed_yet": "Oraindik ez dago {domain} domeinurako diagnostikorik. Berrabiarazi diagnostikoak 'DNS balioak' eta 'Web' ataletarako diagnostikoen gunean Let's Encrypt ziurtagirirako prest ote dagoen egiaztatzeko. (Edo zertan ari zaren baldin badakizu, erabili '--no-checks' egiaztatzea desgaitzeko.)",
|
"certmanager_domain_not_diagnosed_yet": "Oraindik ez dago {domain} domeinurako diagnostikorik. Berrabiarazi diagnostikoak 'DNS balioak' eta 'Web' ataletarako diagnostikoen gunean Let's Encrypt ziurtagirirako prest ote dagoen egiaztatzeko. (Edo zertan ari zaren baldin badakizu, erabili '--no-checks' egiaztatzea desgaitzeko.)",
|
||||||
"diagnosis_domain_expiration_warning": "Domeinu batzuk iraungitzear daude!",
|
"diagnosis_domain_expiration_warning": "Domeinu batzuk iraungitzear daude!",
|
||||||
"app_packaging_format_not_supported": "Aplikazio hau ezin da instalatu YunoHostek ez duelako paketea ezagutzen. Sistema eguneratzea hausnartu beharko zenuke ziur asko.",
|
"app_packaging_format_not_supported": "Aplikazio hau ezin da instalatu YunoHostek ez duelako paketea ezagutzen. Sistema eguneratzea hausnartu beharko zenuke ziur asko.",
|
||||||
"diagnosis_dns_try_dyndns_update_force": "Domeinu honen DNS konfigurazioa YunoHostek kudeatu beharko luke automatikoki. Gertatuko ez balitz, eguneratzera behartu zenezake <cmd>yunohost dyndns update --force</cmd> erabiliz.",
|
"diagnosis_dns_try_dyndns_update_force": "Domeinu honen DNS konfigurazioa YunoHostek kudeatu beharko luke automatikoki. Gertatuko ez balitz, eguneratzera behartu zenezake <cmd>yunohost dyndns update --force</cmd> erabiliz.",
|
||||||
"app_manifest_install_ask_path": "Aukeratu aplikazio hau instalatzeko URLaren bidea (domeinuaren atzeko aldean)",
|
"app_manifest_install_ask_path": "Aukeratu aplikazio hau instalatzeko URLaren bidea (domeinuaren atzeko aldean)",
|
||||||
"app_manifest_install_ask_admin": "Aukeratu administrari bat aplikazio honetarako",
|
"app_manifest_install_ask_admin": "Aukeratu administratzaile bat aplikazio honetarako",
|
||||||
"app_manifest_install_ask_password": "Aukeratu administrazio-pasahitz bat aplikazio honetarako",
|
"app_manifest_install_ask_password": "Aukeratu administrazio-pasahitz bat aplikazio honetarako",
|
||||||
"ask_user_domain": "Erabiltzailearen posta elektroniko eta XMPP konturako erabiliko den domeinua",
|
"ask_user_domain": "Erabiltzailearen posta elektroniko eta XMPP konturako erabiliko den domeinua",
|
||||||
"app_action_cannot_be_ran_because_required_services_down": "{services} zerbitzuak martxan egon beharko lirateke eragiketa hau exekutatu ahal izateko. Saia zaitez zerbitzuok berrabiarazten (eta ikertu zergatik ez diren abiarazi).",
|
"app_action_cannot_be_ran_because_required_services_down": "{services} zerbitzuak martxan egon beharko lirateke eragiketa hau exekutatu ahal izateko. Saia zaitez zerbitzuok berrabiarazten (eta ikertu zergatik ez diren abiarazi).",
|
||||||
|
@ -263,14 +263,14 @@
|
||||||
"log_user_import": "Inportatu erabiltzaileak",
|
"log_user_import": "Inportatu erabiltzaileak",
|
||||||
"diagnosis_mail_fcrdns_ok": "Alderantzizko DNSa zuzen konfiguratuta dago!",
|
"diagnosis_mail_fcrdns_ok": "Alderantzizko DNSa zuzen konfiguratuta dago!",
|
||||||
"diagnosis_mail_queue_unavailable_details": "Errorea: {error}",
|
"diagnosis_mail_queue_unavailable_details": "Errorea: {error}",
|
||||||
"dyndns_provider_unreachable": "Ezinezkoa izan da DynDNS {provider} enpresarekin konektatzea: agian zure YunoHost zerbitzaria ez dago internetera konektatuta edo dynette zerbitzaria ez dago martxan.",
|
"dyndns_provider_unreachable": "Ezin da DynDNS {provider} enpresarekin konektatu: agian zure YunoHost zerbitzaria ez dago internetera konektatuta edo dynette zerbitzaria ez dago martxan.",
|
||||||
"extracting": "Ateratzen…",
|
"extracting": "Ateratzen…",
|
||||||
"diagnosis_ports_unreachable": "{port}. ataka ez dago eskuragarri kanpotik.",
|
"diagnosis_ports_unreachable": "{port}. ataka ez dago eskuragarri kanpotik.",
|
||||||
"diagnosis_regenconf_manually_modified_details": "Ez dago arazorik zertan ari zaren baldin badakizu! YunoHostek fitxategi hau automatikoki eguneratzeari utziko dio… Baina kontuan izan YunoHosten eguneraketek aldaketa garrantzitsuak izan ditzaketela. Nahi izatekotan, desberdintasunak aztertu ditzakezu <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> komandoa exekutatuz, eta gomendatutako konfiguraziora bueltatu <cmd>yunohost tools regen-conf {category} --force</cmd> erabiliz",
|
"diagnosis_regenconf_manually_modified_details": "Ez dago arazorik zertan ari zaren baldin badakizu! YunoHostek fitxategi hau automatikoki eguneratzeari utziko dio… Baina kontuan izan YunoHosten eguneraketek aldaketa garrantzitsuak izan ditzaketela. Nahi izatekotan, desberdintasunak aztertu ditzakezu <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> komandoa exekutatuz, eta gomendatutako konfiguraziora bueltatu <cmd>yunohost tools regen-conf {category} --force</cmd> erabiliz",
|
||||||
"dyndns_domain_not_provided": "{provider} DynDNS enpresak ezin du {domain} domeinua eskaini.",
|
"dyndns_domain_not_provided": "{provider} DynDNS enpresak ezin du {domain} domeinua eskaini.",
|
||||||
"firewall_reload_failed": "Ezinezkoa izan da suebakia birkargatzea",
|
"firewall_reload_failed": "Ezinezkoa izan da suebakia birkargatzea",
|
||||||
"hook_name_unknown": "'{name}' 'hook' izen ezezaguna",
|
"hook_name_unknown": "'{name}' 'hook' izen ezezaguna",
|
||||||
"domain_deletion_failed": "Ezinezkoa izan da {domain} ezabatzea: {error}",
|
"domain_deletion_failed": "Ezin da {domain} ezabatu: {error}",
|
||||||
"log_regen_conf": "Berregin '{}' sistemaren konfigurazioa",
|
"log_regen_conf": "Berregin '{}' sistemaren konfigurazioa",
|
||||||
"dpkg_lock_not_available": "Ezin da komando hau une honetan exekutatu beste aplikazio batek dpkg (sistemaren paketeen kudeatzailea) blokeatuta duelako, erabiltzen ari baita",
|
"dpkg_lock_not_available": "Ezin da komando hau une honetan exekutatu beste aplikazio batek dpkg (sistemaren paketeen kudeatzailea) blokeatuta duelako, erabiltzen ari baita",
|
||||||
"group_created": "'{group}' taldea sortu da",
|
"group_created": "'{group}' taldea sortu da",
|
||||||
|
@ -387,7 +387,7 @@
|
||||||
"diagnosis_mail_outgoing_port_25_ok": "SMTP posta zerbitzaria posta elektronikoa bidaltzeko gai da (25. atakaren irteera ez dago blokeatuta).",
|
"diagnosis_mail_outgoing_port_25_ok": "SMTP posta zerbitzaria posta elektronikoa bidaltzeko gai da (25. atakaren irteera ez dago blokeatuta).",
|
||||||
"diagnosis_ports_partially_unreachable": "{port}. ataka ez dago eskuragarri kanpotik IPv{failed} erabiliz.",
|
"diagnosis_ports_partially_unreachable": "{port}. ataka ez dago eskuragarri kanpotik IPv{failed} erabiliz.",
|
||||||
"diagnosis_ports_forwarding_tip": "Arazoa konpontzeko, litekeena da operadorearen routerrean ataken birbideraketa konfiguratu behar izatea, <a href='https://yunohost.org/isp_box_config'>https://yunohost.org/isp_box_config</a>-n agertzen den bezala",
|
"diagnosis_ports_forwarding_tip": "Arazoa konpontzeko, litekeena da operadorearen routerrean ataken birbideraketa konfiguratu behar izatea, <a href='https://yunohost.org/isp_box_config'>https://yunohost.org/isp_box_config</a>-n agertzen den bezala",
|
||||||
"domain_creation_failed": "Ezinezkoa izan da {domain} domeinua sortzea: {error}",
|
"domain_creation_failed": "Ezin da {domain} domeinua sortu: {error}",
|
||||||
"domains_available": "Erabilgarri dauden domeinuak:",
|
"domains_available": "Erabilgarri dauden domeinuak:",
|
||||||
"group_already_exist_on_system": "{group} taldea existitzen da dagoeneko sistemaren taldeetan",
|
"group_already_exist_on_system": "{group} taldea existitzen da dagoeneko sistemaren taldeetan",
|
||||||
"diagnosis_processes_killed_by_oom_reaper": "Memoria agortu eta sistemak prozesu batzuk amaituarazi behar izan ditu. Honek esan nahi du sistemak ez duela memoria nahikoa edo prozesuren batek memoria gehiegi behar duela. Amaituarazi d(ir)en prozesua(k):\n{kills_summary}",
|
"diagnosis_processes_killed_by_oom_reaper": "Memoria agortu eta sistemak prozesu batzuk amaituarazi behar izan ditu. Honek esan nahi du sistemak ez duela memoria nahikoa edo prozesuren batek memoria gehiegi behar duela. Amaituarazi d(ir)en prozesua(k):\n{kills_summary}",
|
||||||
|
@ -400,7 +400,7 @@
|
||||||
"domain_cannot_remove_main": "Ezin duzu '{domain}' ezabatu domeinu nagusia delako. Beste domeinu bat ezarri beharko duzu nagusi bezala 'yunohost domain main-domain -n <another-domain>' erabiliz; honako hauek dituzu aukeran: {other_domains}",
|
"domain_cannot_remove_main": "Ezin duzu '{domain}' ezabatu domeinu nagusia delako. Beste domeinu bat ezarri beharko duzu nagusi bezala 'yunohost domain main-domain -n <another-domain>' erabiliz; honako hauek dituzu aukeran: {other_domains}",
|
||||||
"domain_created": "Sortu da domeinua",
|
"domain_created": "Sortu da domeinua",
|
||||||
"domain_dyndns_already_subscribed": "Dagoeneko izena eman duzu DynDNS domeinu batean",
|
"domain_dyndns_already_subscribed": "Dagoeneko izena eman duzu DynDNS domeinu batean",
|
||||||
"domain_hostname_failed": "Ezinezkoa izan da hostname berria ezartzea. Honek arazoak ekar litzake etorkizunean (litekeena da ondo egotea).",
|
"domain_hostname_failed": "Ezin da hostname berria ezarri. Honek arazoak ekar litzake etorkizunean (litekeena da ondo egotea).",
|
||||||
"domain_uninstall_app_first": "Honako aplikazio hauek domeinuan instalatuta daude:\n{apps}\n\nDesinstalatu 'yunohost app remove the_app_id' exekutatuz edo alda itzazu beste domeinu batera 'yunohost app change-url the_app_id' erabiliz domeinua ezabatu baino lehen",
|
"domain_uninstall_app_first": "Honako aplikazio hauek domeinuan instalatuta daude:\n{apps}\n\nDesinstalatu 'yunohost app remove the_app_id' exekutatuz edo alda itzazu beste domeinu batera 'yunohost app change-url the_app_id' erabiliz domeinua ezabatu baino lehen",
|
||||||
"file_does_not_exist": "{path} fitxategia ez da existitzen.",
|
"file_does_not_exist": "{path} fitxategia ez da existitzen.",
|
||||||
"firewall_rules_cmd_failed": "Suebakiko arau batzuen exekuzioak huts egin du. Informazio gehiago erregistroetan.",
|
"firewall_rules_cmd_failed": "Suebakiko arau batzuen exekuzioak huts egin du. Informazio gehiago erregistroetan.",
|
||||||
|
@ -423,7 +423,7 @@
|
||||||
"domain_cert_gen_failed": "Ezinezkoa izan da ziurtagiria sortzea",
|
"domain_cert_gen_failed": "Ezinezkoa izan da ziurtagiria sortzea",
|
||||||
"field_invalid": "'{}' ez da baliogarria",
|
"field_invalid": "'{}' ez da baliogarria",
|
||||||
"diagnosis_mail_outgoing_port_25_blocked_relay_vpn": "Operadore batzuei bost axola zaie internetaren neutraltasuna (Net Neutrality) eta ez dute 25. ataka desblokeatzen uzten.<br>- Operadore batzuek <a href='https://yunohost.org/email_configure_relay'>relay posta zerbitzari bat</a> eskaini dezakete, baina kasu horretan zure posta elektronikoa zelatatu dezakete.<br>- Pribatutasuna bermatzeko *IP publikoa* duen VPN bat erabiltzea izan daiteke irtenbidea. Ikus <a href='https://yunohost.org/vpn_advantage'>https://yunohost.org/vpn_advantage</a><br>- Edo <a href='https://yunohost.org/isp'>operadore desberdin batera aldatu</a>",
|
"diagnosis_mail_outgoing_port_25_blocked_relay_vpn": "Operadore batzuei bost axola zaie internetaren neutraltasuna (Net Neutrality) eta ez dute 25. ataka desblokeatzen uzten.<br>- Operadore batzuek <a href='https://yunohost.org/email_configure_relay'>relay posta zerbitzari bat</a> eskaini dezakete, baina kasu horretan zure posta elektronikoa zelatatu dezakete.<br>- Pribatutasuna bermatzeko *IP publikoa* duen VPN bat erabiltzea izan daiteke irtenbidea. Ikus <a href='https://yunohost.org/vpn_advantage'>https://yunohost.org/vpn_advantage</a><br>- Edo <a href='https://yunohost.org/isp'>operadore desberdin batera aldatu</a>",
|
||||||
"ldap_server_down": "Ezin izan da LDAP zerbitzarira konektatu",
|
"ldap_server_down": "Ezin da LDAP zerbitzarira konektatu",
|
||||||
"ldap_server_is_down_restart_it": "LDAP zerbitzaria ez dago martxan, saia zaitez berrabiarazten…",
|
"ldap_server_is_down_restart_it": "LDAP zerbitzaria ez dago martxan, saia zaitez berrabiarazten…",
|
||||||
"log_app_upgrade": "'{}' aplikazioa eguneratu",
|
"log_app_upgrade": "'{}' aplikazioa eguneratu",
|
||||||
"log_tools_shutdown": "Itzali zerbitzaria",
|
"log_tools_shutdown": "Itzali zerbitzaria",
|
||||||
|
@ -461,7 +461,7 @@
|
||||||
"user_import_success": "Erabiltzaileak arazorik gabe inportatu dira",
|
"user_import_success": "Erabiltzaileak arazorik gabe inportatu dira",
|
||||||
"yunohost_already_installed": "YunoHost instalatuta dago dagoeneko",
|
"yunohost_already_installed": "YunoHost instalatuta dago dagoeneko",
|
||||||
"migrations_success_forward": "{id} migrazioak amaitu du",
|
"migrations_success_forward": "{id} migrazioak amaitu du",
|
||||||
"migrations_to_be_ran_manually": "{id} migrazioa eskuz abiarazi behar da. Joan Tresnak → Migrazioak atalera administrazio-atarian edo bestela exekutatu 'yunohost tools migrations run'.",
|
"migrations_to_be_ran_manually": "{id} migrazioa eskuz abiarazi behar da. Joan Tresnak → Migrazioak atalera administrazio-gunean edo bestela exekutatu 'yunohost tools migrations run'.",
|
||||||
"permission_currently_allowed_for_all_users": "Baimen hau erabiltzaile guztiei esleitzen zaie eta baita beste talde batzuei ere. Litekeena da 'all users' baimena edo esleituta duten taldeei baimena kendu nahi izatea.",
|
"permission_currently_allowed_for_all_users": "Baimen hau erabiltzaile guztiei esleitzen zaie eta baita beste talde batzuei ere. Litekeena da 'all users' baimena edo esleituta duten taldeei baimena kendu nahi izatea.",
|
||||||
"permission_require_account": "'{permission}' baimena zerbitzarian kontua duten erabiltzaileentzat da eta, beraz, ezin da gaitu bisitarientzat.",
|
"permission_require_account": "'{permission}' baimena zerbitzarian kontua duten erabiltzaileentzat da eta, beraz, ezin da gaitu bisitarientzat.",
|
||||||
"postinstall_low_rootfsspace": "'root' fitxategi-sistemak 10 GB edo espazio gutxiago dauka, kezkatzekoa dena! Litekeena da espaziorik gabe geratzea aurki! Gomendagarria da 'root' fitxategi-sistemak gutxienez 16 GB libre izatea. Jakinarazpen honen ondoren YunoHost instalatzen jarraitu nahi baduzu, berrabiarazi agindua '--force-diskspace' gehituz",
|
"postinstall_low_rootfsspace": "'root' fitxategi-sistemak 10 GB edo espazio gutxiago dauka, kezkatzekoa dena! Litekeena da espaziorik gabe geratzea aurki! Gomendagarria da 'root' fitxategi-sistemak gutxienez 16 GB libre izatea. Jakinarazpen honen ondoren YunoHost instalatzen jarraitu nahi baduzu, berrabiarazi agindua '--force-diskspace' gehituz",
|
||||||
|
@ -515,7 +515,7 @@
|
||||||
"service_disable_failed": "Ezin izan da '{service}' zerbitzua geldiarazi zerbitzaria abiaraztean.\n\nZerbitzuen erregistro berrienak: {logs}",
|
"service_disable_failed": "Ezin izan da '{service}' zerbitzua geldiarazi zerbitzaria abiaraztean.\n\nZerbitzuen erregistro berrienak: {logs}",
|
||||||
"migrations_skip_migration": "{id} migrazioa saihesten…",
|
"migrations_skip_migration": "{id} migrazioa saihesten…",
|
||||||
"upnp_disabled": "UPnP itzalita dago",
|
"upnp_disabled": "UPnP itzalita dago",
|
||||||
"main_domain_change_failed": "Ezinezkoa izan da domeinu nagusia aldatzea",
|
"main_domain_change_failed": "Ezin da domeinu nagusia aldatu",
|
||||||
"regenconf_failed": "Ezinezkoa izan da ondorengo atal(ar)en konfigurazioa berregitea: {categories}",
|
"regenconf_failed": "Ezinezkoa izan da ondorengo atal(ar)en konfigurazioa berregitea: {categories}",
|
||||||
"pattern_email_forward": "Helbide elektroniko baliagarri bat izan behar da, '+' karakterea onartzen da (adibidez: izena+urtea@domeinua.eus)",
|
"pattern_email_forward": "Helbide elektroniko baliagarri bat izan behar da, '+' karakterea onartzen da (adibidez: izena+urtea@domeinua.eus)",
|
||||||
"regenconf_file_manually_removed": "'{conf}' konfigurazio fitxategia eskuz ezabatu da eta ez da berriro sortuko",
|
"regenconf_file_manually_removed": "'{conf}' konfigurazio fitxategia eskuz ezabatu da eta ez da berriro sortuko",
|
||||||
|
@ -579,7 +579,7 @@
|
||||||
"port_already_opened": "{port}. ataka dagoeneko irekita dago {ip_version} konexioetarako",
|
"port_already_opened": "{port}. ataka dagoeneko irekita dago {ip_version} konexioetarako",
|
||||||
"user_home_creation_failed": "Ezin izan da erabiltzailearentzat '{home}' direktorioa sortu",
|
"user_home_creation_failed": "Ezin izan da erabiltzailearentzat '{home}' direktorioa sortu",
|
||||||
"user_unknown": "Erabiltzaile ezezaguna: {user}",
|
"user_unknown": "Erabiltzaile ezezaguna: {user}",
|
||||||
"yunohost_postinstall_end_tip": "Instalazio ondorengo prozesua amaitu da! Sistemaren konfigurazioa bukatzeko:\n- erabili 'Diagnostikoak' gunea ohiko arazoei aurre hartzeko. Administrazio-atarian abiarazi edo 'yunohost diagnosis run' exekutatu;\n- irakurri 'Finalizing your setup' eta 'Getting to know YunoHost' atalak. Dokumentazioan aurki ditzakezu: https://yunohost.org/admindoc.",
|
"yunohost_postinstall_end_tip": "Instalazio ondorengo prozesua amaitu da! Sistemaren konfigurazioa bukatzeko:\n- erabili 'Diagnostikoak' gunea ohiko arazoei aurre hartzeko. Abiarazi administrazio-gunean edo exekutatu 'yunohost diagnosis run';\n- irakurri 'Finalizing your setup' eta 'Getting to know YunoHost' atalak. Dokumentazioan aurki ditzakezu: https://yunohost.org/admindoc.",
|
||||||
"yunohost_not_installed": "YunoHost ez da zuzen instalatu. Exekutatu 'yunohost tools postinstall'",
|
"yunohost_not_installed": "YunoHost ez da zuzen instalatu. Exekutatu 'yunohost tools postinstall'",
|
||||||
"unlimit": "Mugarik ez",
|
"unlimit": "Mugarik ez",
|
||||||
"restore_already_installed_apps": "Ondorengo aplikazioak ezin dira lehengoratu dagoeneko instalatuta daudelako: {apps}",
|
"restore_already_installed_apps": "Ondorengo aplikazioak ezin dira lehengoratu dagoeneko instalatuta daudelako: {apps}",
|
||||||
|
@ -590,9 +590,9 @@
|
||||||
"migration_ldap_rollback_success": "Sistema lehengoratu da.",
|
"migration_ldap_rollback_success": "Sistema lehengoratu da.",
|
||||||
"regenconf_need_to_explicitly_specify_ssh": "SSH ezarpenak eskuz aldatu dira, baina aldaketak erabiltzeko '--force' zehaztu behar duzu 'ssh' atalean.",
|
"regenconf_need_to_explicitly_specify_ssh": "SSH ezarpenak eskuz aldatu dira, baina aldaketak erabiltzeko '--force' zehaztu behar duzu 'ssh' atalean.",
|
||||||
"regex_incompatible_with_tile": "/!\\ Pakete-arduradunak! {permission}' baimenak show_tile aukera 'true' bezala dauka eta horregatik ezin duzue regex URLa URL nagusi bezala ezarri",
|
"regex_incompatible_with_tile": "/!\\ Pakete-arduradunak! {permission}' baimenak show_tile aukera 'true' bezala dauka eta horregatik ezin duzue regex URLa URL nagusi bezala ezarri",
|
||||||
"root_password_desynchronized": "Administrariaren pasahitza aldatu da baina YunoHostek ezin izan du aldaketa root pasahitzera hedatu!",
|
"root_password_desynchronized": "Administratzailearen pasahitza aldatu da baina YunoHostek ezin izan du aldaketa root pasahitzera hedatu!",
|
||||||
"server_shutdown": "Zerbitzaria itzaliko da",
|
"server_shutdown": "Zerbitzaria itzaliko da",
|
||||||
"service_stop_failed": "Ezin izan da '{service}' zerbitzua geldiarazi\n\nZerbitzuen azken erregistroak: {logs}",
|
"service_stop_failed": "Ezin da '{service}' zerbitzua geldiarazi\n\nZerbitzuaren azken erregistroak: {logs}",
|
||||||
"service_unknown": "'{service}' zerbitzu ezezaguna",
|
"service_unknown": "'{service}' zerbitzu ezezaguna",
|
||||||
"show_tile_cant_be_enabled_for_url_not_defined": "Ezin duzu 'show_tile' gaitu une honetan, '{permission}' baimenerako URL bat zehaztu behar duzulako",
|
"show_tile_cant_be_enabled_for_url_not_defined": "Ezin duzu 'show_tile' gaitu une honetan, '{permission}' baimenerako URL bat zehaztu behar duzulako",
|
||||||
"upnp_enabled": "UPnP piztuta dago",
|
"upnp_enabled": "UPnP piztuta dago",
|
||||||
|
@ -620,7 +620,7 @@
|
||||||
"service_description_redis-server": "Datuak bizkor atzitzeko, zereginak lerratzeko eta programen arteko komunikaziorako datubase berezi bat da",
|
"service_description_redis-server": "Datuak bizkor atzitzeko, zereginak lerratzeko eta programen arteko komunikaziorako datubase berezi bat da",
|
||||||
"service_description_rspamd": "Spama bahetu eta posta elektronikoarekin zerikusia duten bestelako futzioen ardura dauka",
|
"service_description_rspamd": "Spama bahetu eta posta elektronikoarekin zerikusia duten bestelako futzioen ardura dauka",
|
||||||
"service_description_slapd": "Erabiltzaileak, domeinuak eta hauei lotutako informazioa gordetzen du",
|
"service_description_slapd": "Erabiltzaileak, domeinuak eta hauei lotutako informazioa gordetzen du",
|
||||||
"service_description_yunohost-api": "YunoHosten web-atariaren eta sistemaren arteko hartuemana kudeatzen du",
|
"service_description_yunohost-api": "YunoHosten web-interfazearen eta sistemaren arteko hartuemana kudeatzen du",
|
||||||
"domain_config_default_app": "Lehenetsitako aplikazioa",
|
"domain_config_default_app": "Lehenetsitako aplikazioa",
|
||||||
"tools_upgrade": "Sistemaren paketeak eguneratzen",
|
"tools_upgrade": "Sistemaren paketeak eguneratzen",
|
||||||
"tools_upgrade_failed": "Ezin izan dira paketeak eguneratu: {packages_list}",
|
"tools_upgrade_failed": "Ezin izan dira paketeak eguneratu: {packages_list}",
|
||||||
|
@ -654,8 +654,8 @@
|
||||||
"global_settings_setting_ssh_password_authentication_help": "Baimendu pasahitz bidezko autentikazioa SSHrako",
|
"global_settings_setting_ssh_password_authentication_help": "Baimendu pasahitz bidezko autentikazioa SSHrako",
|
||||||
"global_settings_setting_ssh_port": "SSH ataka",
|
"global_settings_setting_ssh_port": "SSH ataka",
|
||||||
"global_settings_setting_webadmin_allowlist_help": "Administrazio-atarira sar daitezken IP helbideak. CIDR notazioa ahalbidetzen da.",
|
"global_settings_setting_webadmin_allowlist_help": "Administrazio-atarira sar daitezken IP helbideak. CIDR notazioa ahalbidetzen da.",
|
||||||
"global_settings_setting_webadmin_allowlist_enabled_help": "Baimendu IP zehatz batzuk bakarrik administrazio-atarian.",
|
"global_settings_setting_webadmin_allowlist_enabled_help": "Baimendu IP zehatz batzuk bakarrik administrazio-gunerako.",
|
||||||
"global_settings_setting_smtp_allow_ipv6_help": "Baimendu IPv6 posta elektronikoa jaso eta bidaltzeko",
|
"global_settings_setting_smtp_allow_ipv6_help": "Gaitu IPv6 posta elektronikoa jaso eta bidaltzeko",
|
||||||
"global_settings_setting_smtp_relay_enabled_help": "YunoHosten ordez posta elektronikoa bidaltzeko SMTP relay helbidea. Erabilgarri izan daiteke egoera hauetan: operadore edo VPS enpresak 25. ataka blokeatzen badu, DUHLen zure etxeko IPa ageri bada, ezin baduzu alderantzizko DNSa ezarri edo zerbitzari hau ez badago zuzenean internetera konektatuta baina posta elektronikoa bidali nahi baduzu.",
|
"global_settings_setting_smtp_relay_enabled_help": "YunoHosten ordez posta elektronikoa bidaltzeko SMTP relay helbidea. Erabilgarri izan daiteke egoera hauetan: operadore edo VPS enpresak 25. ataka blokeatzen badu, DUHLen zure etxeko IPa ageri bada, ezin baduzu alderantzizko DNSa ezarri edo zerbitzari hau ez badago zuzenean internetera konektatuta baina posta elektronikoa bidali nahi baduzu.",
|
||||||
"migration_0024_rebuild_python_venv_broken_app": "{app} aplikazioari ez ikusiarena egin zaio ezin delako ingurune birtuala modu errazean birsortu. Horren ordez, aplikazioaren eguneraketa behartzen saia zaitezke `yunohost app upgrade --force {app}` arazoa konpontzeko.",
|
"migration_0024_rebuild_python_venv_broken_app": "{app} aplikazioari ez ikusiarena egin zaio ezin delako ingurune birtuala modu errazean birsortu. Horren ordez, aplikazioaren eguneraketa behartzen saia zaitezke `yunohost app upgrade --force {app}` arazoa konpontzeko.",
|
||||||
"migration_0024_rebuild_python_venv_disclaimer_rebuild": "Ondorengo aplikazioen virtualenv-a birsortzeko saiakera egingo da (eragiketak luze jo dezake!): {rebuild_apps}",
|
"migration_0024_rebuild_python_venv_disclaimer_rebuild": "Ondorengo aplikazioen virtualenv-a birsortzeko saiakera egingo da (eragiketak luze jo dezake!): {rebuild_apps}",
|
||||||
|
@ -669,7 +669,7 @@
|
||||||
"app_action_failed": "{app} aplikaziorako {action} eragiketak huts egin du",
|
"app_action_failed": "{app} aplikaziorako {action} eragiketak huts egin du",
|
||||||
"config_action_disabled": "Ezin izan da '{action}' eragiketa exekutatu ezgaituta dagoelako, egiaztatu bere mugak betetzen dituzula. Laguntza: {help}",
|
"config_action_disabled": "Ezin izan da '{action}' eragiketa exekutatu ezgaituta dagoelako, egiaztatu bere mugak betetzen dituzula. Laguntza: {help}",
|
||||||
"all_users": "YunoHosten erabiltzaile guztiek",
|
"all_users": "YunoHosten erabiltzaile guztiek",
|
||||||
"app_manifest_install_ask_init_admin_permission": "Nork izan beharko luke aplikazio honetako administrazio aukeretara sarbidea? (Aldatzea dago)",
|
"app_manifest_install_ask_init_admin_permission": "Nork izan beharko luke aplikazio honetako administrazio-aukeretara sarbidea? (Aldatzea dago)",
|
||||||
"app_manifest_install_ask_init_main_permission": "Nork izan beharko luke aplikazio honetara sarbidea? (Aldatzea dago)",
|
"app_manifest_install_ask_init_main_permission": "Nork izan beharko luke aplikazio honetara sarbidea? (Aldatzea dago)",
|
||||||
"ask_admin_fullname": "Administratzailearen izen osoa",
|
"ask_admin_fullname": "Administratzailearen izen osoa",
|
||||||
"ask_admin_username": "Administratzailearen erabiltzaile-izena",
|
"ask_admin_username": "Administratzailearen erabiltzaile-izena",
|
||||||
|
@ -681,7 +681,7 @@
|
||||||
"domain_config_cert_summary_expired": "LARRIA: Uneko ziurtagiria ez da baliozkoa! HTTPS ezin da erabili!",
|
"domain_config_cert_summary_expired": "LARRIA: Uneko ziurtagiria ez da baliozkoa! HTTPS ezin da erabili!",
|
||||||
"domain_config_cert_summary_selfsigned": "ADI: Uneko zirutagiria norberak sinatutakoa da. Web-nabigatzaileek bisitariak izutuko dituen mezu bat erakutsiko dute!",
|
"domain_config_cert_summary_selfsigned": "ADI: Uneko zirutagiria norberak sinatutakoa da. Web-nabigatzaileek bisitariak izutuko dituen mezu bat erakutsiko dute!",
|
||||||
"global_settings_setting_postfix_compatibility": "Postfixekin bateragarritasuna",
|
"global_settings_setting_postfix_compatibility": "Postfixekin bateragarritasuna",
|
||||||
"global_settings_setting_root_access_explain": "Linux sistemetan 'root' administratzaile gorena da. YunoHosten testuinguruan, zuzeneko 'root' SSH saioa ezgaituta dago defektuz, zerbitzariaren sare lokaletik ez bada. 'administrariak' taldeko kideek sudo komandoa erabili dezakete root bailitzan jarduteko terminalaren bidez. Hala ere lagungarri izan liteke root pasahitz (sendo) bat izatea sistema arazteko egoeraren batean administratzaile arruntek saiorik hasi ezin balute.",
|
"global_settings_setting_root_access_explain": "Linux sistemetan 'root' administratzaile gorena da. YunoHosten testuinguruan, zuzeneko 'root' SSH saioa ezgaituta dago defektuz, zerbitzariaren sare lokaletik ez bada. 'administratzaileak' taldeko kideek sudo komandoa erabili dezakete root bailitzan jarduteko terminalaren bidez. Hala ere lagungarri izan liteke root pasahitz (sendo) bat izatea sistema arazteko egoeraren batean administratzaile arruntek saiorik hasi ezin balute.",
|
||||||
"log_settings_reset": "Berrezarri ezarpenak",
|
"log_settings_reset": "Berrezarri ezarpenak",
|
||||||
"log_settings_reset_all": "Berrezarri ezarpen guztiak",
|
"log_settings_reset_all": "Berrezarri ezarpen guztiak",
|
||||||
"root_password_changed": "root pasahitza aldatu da",
|
"root_password_changed": "root pasahitza aldatu da",
|
||||||
|
@ -695,7 +695,7 @@
|
||||||
"diagnosis_using_stable_codename": "<cmd>apt</cmd> (sistemaren pakete kudeatzailea) 'stable' (egonkorra) izen kodea duten paketeak instalatzeko ezarrita dago une honetan, eta ez uneko Debianen bertsioaren (bullseye) izen kodea.",
|
"diagnosis_using_stable_codename": "<cmd>apt</cmd> (sistemaren pakete kudeatzailea) 'stable' (egonkorra) izen kodea duten paketeak instalatzeko ezarrita dago une honetan, eta ez uneko Debianen bertsioaren (bullseye) izen kodea.",
|
||||||
"diagnosis_using_yunohost_testing": "<cmd>apt</cmd> (sistemaren pakete kudeatzailea) YunoHosten muinerako 'testing' (proba) izen kodea duten paketeak instalatzeko ezarrita dago une honetan.",
|
"diagnosis_using_yunohost_testing": "<cmd>apt</cmd> (sistemaren pakete kudeatzailea) YunoHosten muinerako 'testing' (proba) izen kodea duten paketeak instalatzeko ezarrita dago une honetan.",
|
||||||
"diagnosis_using_yunohost_testing_details": "Ez dago arazorik zertan ari zaren baldin badakizu, baina arretaz irakurri oharrak YunoHosten eguneraketak instalatu baino lehen! 'testing' (proba) bertsioak ezgaitu nahi badituzu, kendu <cmd>testing</cmd> gakoa <cmd>/etc/apt/sources.list.d/yunohost.list</cmd> fitxategitik.",
|
"diagnosis_using_yunohost_testing_details": "Ez dago arazorik zertan ari zaren baldin badakizu, baina arretaz irakurri oharrak YunoHosten eguneraketak instalatu baino lehen! 'testing' (proba) bertsioak ezgaitu nahi badituzu, kendu <cmd>testing</cmd> gakoa <cmd>/etc/apt/sources.list.d/yunohost.list</cmd> fitxategitik.",
|
||||||
"global_settings_setting_smtp_allow_ipv6": "Baimendu IPv6",
|
"global_settings_setting_smtp_allow_ipv6": "Gaitu IPv6",
|
||||||
"global_settings_setting_smtp_relay_host": "SMTP errele-ostatatzailea",
|
"global_settings_setting_smtp_relay_host": "SMTP errele-ostatatzailea",
|
||||||
"domain_config_acme_eligible": "ACME hautagarritasuna",
|
"domain_config_acme_eligible": "ACME hautagarritasuna",
|
||||||
"domain_config_acme_eligible_explain": "Ez dirudi domeinu hau Let's Encrypt ziurtagirirako prest dagoenik. Egiaztatu DNS ezarpenak eta zerbitzariaren HTTP irisgarritasuna. <a href='#/diagnosis'>Diagnostikoen guneko</a> 'DNS erregistroak' eta 'Web' atalek zer dagoen gaizki ulertzen lagun zaitzakete.",
|
"domain_config_acme_eligible_explain": "Ez dirudi domeinu hau Let's Encrypt ziurtagirirako prest dagoenik. Egiaztatu DNS ezarpenak eta zerbitzariaren HTTP irisgarritasuna. <a href='#/diagnosis'>Diagnostikoen guneko</a> 'DNS erregistroak' eta 'Web' atalek zer dagoen gaizki ulertzen lagun zaitzakete.",
|
||||||
|
@ -720,12 +720,12 @@
|
||||||
"global_settings_setting_ssh_password_authentication": "Pasahitz bidezko autentifikazioa",
|
"global_settings_setting_ssh_password_authentication": "Pasahitz bidezko autentifikazioa",
|
||||||
"global_settings_setting_user_strength_help": "Betekizun hauek lehenbizikoz sortzerakoan edo pasahitza aldatzerakoan bete behar dira soilik",
|
"global_settings_setting_user_strength_help": "Betekizun hauek lehenbizikoz sortzerakoan edo pasahitza aldatzerakoan bete behar dira soilik",
|
||||||
"global_settings_setting_webadmin_allowlist": "Administrazio-atarira sartzeko baimendutako IPak",
|
"global_settings_setting_webadmin_allowlist": "Administrazio-atarira sartzeko baimendutako IPak",
|
||||||
"global_settings_setting_webadmin_allowlist_enabled": "Gaitu administrazio-ataria sartzeko baimendutako IPak",
|
"global_settings_setting_webadmin_allowlist_enabled": "Gaitu administrazio-gunera sartzeko baimendutako IPak",
|
||||||
"invalid_credentials": "Pasahitz edo erabiltzaile-izen baliogabea",
|
"invalid_credentials": "Pasahitz edo erabiltzaile-izen baliogabea",
|
||||||
"log_resource_snippet": "Baliabide bat eguneratzen / eskuratzen / eskuragarritasuna uzten",
|
"log_resource_snippet": "Baliabide bat eguneratzen / eskuratzen / eskuragarritasuna uzten",
|
||||||
"log_settings_set": "Aplikatu ezarpenak",
|
"log_settings_set": "Aplikatu ezarpenak",
|
||||||
"migration_description_0025_global_settings_to_configpanel": "Migratu ezarpen globalen nomenklatura zaharra izendegi berri eta modernora",
|
"migration_description_0025_global_settings_to_configpanel": "Migratu ezarpen globalen nomenklatura zaharra izendegi berri eta modernora",
|
||||||
"migration_description_0026_new_admins_group": "Migratu 'administrari bat baino gehiago' sistema berrira",
|
"migration_description_0026_new_admins_group": "Migratu 'administratzaile bat baino gehiago' sistema berrira",
|
||||||
"password_confirmation_not_the_same": "Pasahitzak ez datoz bat",
|
"password_confirmation_not_the_same": "Pasahitzak ez datoz bat",
|
||||||
"password_too_long": "Aukeratu 127 karaktere baino laburragoa den pasahitz bat",
|
"password_too_long": "Aukeratu 127 karaktere baino laburragoa den pasahitz bat",
|
||||||
"diagnosis_using_stable_codename_details": "Ostatatzaileak zerbait oker ezarri duenean gertatu ohi da hau. Arriskutsua da, Debianen datorren bertsioa 'estable' (egonkorra) bilakatzen denean, <cmd>apt</cmd>-k sistemaren pakete guztiak bertsio-berritzen saiatuko da, beharrezko migrazio-prozedurarik burutu gabe. Debianen gordailuan apt iturria editatzen konpontzea da gomendioa, <cmd>stable</cmd> gakoa <cmd>bullseye</cmd> gakoarekin ordezkatuz. Ezarpen-fitxategia <cmd>/etc/apt/sources.list</cmd> izan beharko litzateke, edo <cmd>/etc/apt/sources.list.d/</cmd> direktorioko fitxategiren bat.",
|
"diagnosis_using_stable_codename_details": "Ostatatzaileak zerbait oker ezarri duenean gertatu ohi da hau. Arriskutsua da, Debianen datorren bertsioa 'estable' (egonkorra) bilakatzen denean, <cmd>apt</cmd>-k sistemaren pakete guztiak bertsio-berritzen saiatuko da, beharrezko migrazio-prozedurarik burutu gabe. Debianen gordailuan apt iturria editatzen konpontzea da gomendioa, <cmd>stable</cmd> gakoa <cmd>bullseye</cmd> gakoarekin ordezkatuz. Ezarpen-fitxategia <cmd>/etc/apt/sources.list</cmd> izan beharko litzateke, edo <cmd>/etc/apt/sources.list.d/</cmd> direktorioko fitxategiren bat.",
|
||||||
|
@ -739,7 +739,7 @@
|
||||||
"app_resource_failed": "{app} aplikaziorako baliabideen eguneraketak / prestaketak / askapenak huts egin du: {error}",
|
"app_resource_failed": "{app} aplikaziorako baliabideen eguneraketak / prestaketak / askapenak huts egin du: {error}",
|
||||||
"app_not_enough_disk": "Aplikazio honek {required} espazio libre behar ditu.",
|
"app_not_enough_disk": "Aplikazio honek {required} espazio libre behar ditu.",
|
||||||
"app_yunohost_version_not_supported": "Aplikazio honek YunoHost >= {required} behar du baina unean instalatutako bertsioa {current} da",
|
"app_yunohost_version_not_supported": "Aplikazio honek YunoHost >= {required} behar du baina unean instalatutako bertsioa {current} da",
|
||||||
"global_settings_setting_passwordless_sudo": "Baimendu administrariek 'sudo' erabiltzea pasahitzak berriro idatzi beharrik gabe",
|
"global_settings_setting_passwordless_sudo": "Baimendu administratzaileek 'sudo' erabiltzea pasahitzak berriro idatzi beharrik gabe",
|
||||||
"global_settings_setting_portal_theme": "Atariko gaia",
|
"global_settings_setting_portal_theme": "Atariko gaia",
|
||||||
"global_settings_setting_portal_theme_help": "Atariko gai propioak sortzeari buruzko informazio gehiago: https://yunohost.org/theming",
|
"global_settings_setting_portal_theme_help": "Atariko gai propioak sortzeari buruzko informazio gehiago: https://yunohost.org/theming",
|
||||||
"invalid_shell": "Shell baliogabea: {shell}",
|
"invalid_shell": "Shell baliogabea: {shell}",
|
||||||
|
@ -765,7 +765,7 @@
|
||||||
"group_user_add": "'{user}' erabiltzailea '{group}' taldera gehituko da",
|
"group_user_add": "'{user}' erabiltzailea '{group}' taldera gehituko da",
|
||||||
"ask_dyndns_recovery_password_explain": "Aukeratu DynDNS domeinurako berreskuratze-pasahitza, etorkizunean berrezarri beharko bazenu.",
|
"ask_dyndns_recovery_password_explain": "Aukeratu DynDNS domeinurako berreskuratze-pasahitza, etorkizunean berrezarri beharko bazenu.",
|
||||||
"ask_dyndns_recovery_password_explain_during_unsubscribe": "Sartu DynDNS domeinuaren berreskuratze-pasahitza.",
|
"ask_dyndns_recovery_password_explain_during_unsubscribe": "Sartu DynDNS domeinuaren berreskuratze-pasahitza.",
|
||||||
"dyndns_no_recovery_password": "Ez da berreskuratze-pasahitzik zehaztu! Domeinuaren gaineko kontrola galduz gero, YunoHost taldeko administrariarekin jarri beharko zara harremanetan!",
|
"dyndns_no_recovery_password": "Ez da berreskuratze-pasahitzik zehaztu! Domeinuaren gaineko kontrola galduz gero, YunoHost taldeko administratzailearekin jarri beharko zara harremanetan!",
|
||||||
"ask_dyndns_recovery_password": "DynDNS berreskuratze-pasahitza",
|
"ask_dyndns_recovery_password": "DynDNS berreskuratze-pasahitza",
|
||||||
"dyndns_subscribed": "DynDNS domeinua harpidetu da",
|
"dyndns_subscribed": "DynDNS domeinua harpidetu da",
|
||||||
"dyndns_subscribe_failed": "Ezin izan da DynDNS domeinua harpidetu: {error}",
|
"dyndns_subscribe_failed": "Ezin izan da DynDNS domeinua harpidetu: {error}",
|
||||||
|
@ -803,5 +803,11 @@
|
||||||
"migration_0027_patch_yunohost_conflicts": "Arazo gatazkatsu bati adabakia jartzen…",
|
"migration_0027_patch_yunohost_conflicts": "Arazo gatazkatsu bati adabakia jartzen…",
|
||||||
"migration_0027_modified_files": "Ondorengo fitxategiak eskuz moldatu direla antzeman da eta litekeena da bertsio-berritzeak gainean idaztea: {manually_modified_files}",
|
"migration_0027_modified_files": "Ondorengo fitxategiak eskuz moldatu direla antzeman da eta litekeena da bertsio-berritzeak gainean idaztea: {manually_modified_files}",
|
||||||
"migration_0027_not_enough_free_space": "/var/-en erabilgarri dagoen espazioa oso txikia da! Gutxienez GB 1 izan beharko zenuke erabilgarri migrazioari ekiteko.",
|
"migration_0027_not_enough_free_space": "/var/-en erabilgarri dagoen espazioa oso txikia da! Gutxienez GB 1 izan beharko zenuke erabilgarri migrazioari ekiteko.",
|
||||||
"migration_0027_patching_sources_list": "sources.lists fitxategia petatxatzen…"
|
"migration_0027_patching_sources_list": "sources.lists fitxategia petatxatzen…",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted": "Baimendutako posta elektronikoen MXren SMTP babeskopia",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains": "Bigarren mailako MX gisa jarduteko domeinuak",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains_help": "Zerbitzari honek zerrendan agertzen den domeinurako *bigarren mailako* MX domeinu gisa jardun dezake. Domeinurako lehenetsitako MX lortu ezin denean (adibidez, itzalaldi baten ondorioz), mezuak bigarren zerbitzari horretara bidaliko dira —gehienez 20 egunez mantenduko dituena— eta berriro eskuragarri dagoenean benetako helburura helarazten saiatuko da. Hainbat domeinu zehaztu daitezke, komaz bereizita.",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted_help": "Bigarren mailako MX gisa jarduten duenean, baimendutako hartzaileen posta elektronikoko helbideen zerrenda zehatza eman beharko da (bestela, mezuak ukatu eta baztertuko dira). Hainbat sarrera eman daitezke, komaz bereizita.",
|
||||||
|
"diagnosis_rfkill_wifi_details": "Ohartarazpena komando askotan ageri da, aplikazio batzuk hautsiz. Herrialdearen kodea zehaztuz konpon daiteke <code>sudo raspi-config</code> komandoaren bidez. Hau da errorea:<br>{rfkill_wifi_error}",
|
||||||
|
"diagnosis_rfkill_wifi": "Wi-Fi txartela ezgaituta dago eta sistemaren ohartarazpen batek aplikazioen instalazioak eragotzi ditzake"
|
||||||
}
|
}
|
||||||
|
|
|
@ -782,6 +782,8 @@
|
||||||
"dyndns_too_many_requests": "Le service dyndns de YunoHost a reçu trop de requêtes/demandes de votre part, attendez environ 1 heure avant de réessayer.",
|
"dyndns_too_many_requests": "Le service dyndns de YunoHost a reçu trop de requêtes/demandes de votre part, attendez environ 1 heure avant de réessayer.",
|
||||||
"ask_dyndns_recovery_password_explain_unavailable": "Ce domaine DynDNS est déjà enregistré. Si vous êtes la personne qui a enregistré ce domaine lors de sa création, vous pouvez entrer le mot de passe de récupération pour récupérer ce domaine.",
|
"ask_dyndns_recovery_password_explain_unavailable": "Ce domaine DynDNS est déjà enregistré. Si vous êtes la personne qui a enregistré ce domaine lors de sa création, vous pouvez entrer le mot de passe de récupération pour récupérer ce domaine.",
|
||||||
"global_settings_setting_ssh_port_help": "Il est préférable d'utiliser un port inférieur à 1024 pour éviter les tentatives d'usurpation par des services non administrateurs sur la machine distante. Vous devez également éviter d'utiliser un port déjà utilisé tel que le 80 ou le 443.",
|
"global_settings_setting_ssh_port_help": "Il est préférable d'utiliser un port inférieur à 1024 pour éviter les tentatives d'usurpation par des services non administrateurs sur la machine distante. Vous devez également éviter d'utiliser un port déjà utilisé tel que le 80 ou le 443.",
|
||||||
|
"diagnosis_rfkill_wifi": "La carte Wi-Fi est désactivée et un avertissement du système pourrait empêcher d'installer des applications",
|
||||||
|
"diagnosis_rfkill_wifi_details": "Cet avertissement se glisse dans beaucoup de retours de commandes, cassant certaines applications. Il s'agit généralement de spécifier votre code pays avec la commande <code>sudo raspi-config</code>. Voici l'erreur:<br>{rfkill_wifi_error}",
|
||||||
"diagnosis_ignore_already_filtered": "(Il y a déjà un filtre de diagnostic {category} qui correspond à ces critères)",
|
"diagnosis_ignore_already_filtered": "(Il y a déjà un filtre de diagnostic {category} qui correspond à ces critères)",
|
||||||
"diagnosis_ignore_no_filter_found": "(Il n'y pas de filtre de diagnostic pour la catégorie {category} qui correspond à ces critères)",
|
"diagnosis_ignore_no_filter_found": "(Il n'y pas de filtre de diagnostic pour la catégorie {category} qui correspond à ces critères)",
|
||||||
"diagnosis_ignore_filter_added": "Filtre de diagnostic pour {category} ajouté",
|
"diagnosis_ignore_filter_added": "Filtre de diagnostic pour {category} ajouté",
|
||||||
|
@ -803,5 +805,9 @@
|
||||||
"migration_0027_start": "Démarrage de la migration vers Bookworm…",
|
"migration_0027_start": "Démarrage de la migration vers Bookworm…",
|
||||||
"migration_0027_still_on_bullseye_after_main_upgrade": "Quelque chose s'est mal passé lors de la mise à jour du système, il semble que celui-ci soit toujours sous Debian Bullseye.",
|
"migration_0027_still_on_bullseye_after_main_upgrade": "Quelque chose s'est mal passé lors de la mise à jour du système, il semble que celui-ci soit toujours sous Debian Bullseye.",
|
||||||
"migration_0027_system_not_fully_up_to_date": "Votre système n'est pas complètement à jour. Veuillez effectuer une mise à jour classique avant de procéder à la migration vers Bookworm.",
|
"migration_0027_system_not_fully_up_to_date": "Votre système n'est pas complètement à jour. Veuillez effectuer une mise à jour classique avant de procéder à la migration vers Bookworm.",
|
||||||
"migration_0027_yunohost_upgrade": "Démarrage de la mise à jour du cœur de YunoHost…"
|
"migration_0027_yunohost_upgrade": "Démarrage de la mise à jour du cœur de YunoHost…",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains": "Domaines à utiliser comme MX secondaire pour",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted": "Sauvegarde SMTP des emails sur liste blanche du MX",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted_help": "Dans le cas d'un MX secondaire, la liste exhaustive des adresses électroniques des destinataires autorisés doit être fournie (sinon les courriers seront refusés et rejetés). Plusieurs entrées peuvent être fournies, séparées par des virgules.",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains_help": "Autoriser ce serveur à agir en tant que domaine MX *secondaire* de secours pour le domaine listé. Cela signifie que si le MX principal pour le domaine n'est pas accessible (par exemple à cause d'une panne), les courriers électroniques seront quand même envoyés à ce serveur, qui les conservera pendant un maximum de 20 jours et essaiera de les relayer vers la destination réelle une fois qu'il sera rétabli. Plusieurs domaines peuvent être fournis, séparés par des virgules."
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,7 @@
|
||||||
"backup_permission": "Permiso de copia para {app}",
|
"backup_permission": "Permiso de copia para {app}",
|
||||||
"backup_output_symlink_dir_broken": "O directorio de arquivo '{path}' é unha ligazón simbólica rota. Pode ser que esqueceses re/montar ou conectar o medio de almacenaxe ao que apunta.",
|
"backup_output_symlink_dir_broken": "O directorio de arquivo '{path}' é unha ligazón simbólica rota. Pode ser que esqueceses re/montar ou conectar o medio de almacenaxe ao que apunta.",
|
||||||
"backup_output_directory_required": "Debes proporcionar un directorio de saída para a copia",
|
"backup_output_directory_required": "Debes proporcionar un directorio de saída para a copia",
|
||||||
"backup_output_directory_not_empty": "Debes elexir un directorio de saída baleiro",
|
"backup_output_directory_not_empty": "Debes elixir un directorio de saída baleiro",
|
||||||
"backup_output_directory_forbidden": "Elixe un directorio de saída diferente. As copias non poden crearse en /bin, /boot, /dev, /etc, /lib, /root, /sbin, /sys, /usr, /var ou subcartafoles de /home/yunohost.backup/archives",
|
"backup_output_directory_forbidden": "Elixe un directorio de saída diferente. As copias non poden crearse en /bin, /boot, /dev, /etc, /lib, /root, /sbin, /sys, /usr, /var ou subcartafoles de /home/yunohost.backup/archives",
|
||||||
"backup_nothings_done": "Nada que gardar",
|
"backup_nothings_done": "Nada que gardar",
|
||||||
"backup_no_uncompress_archive_dir": "Non hai tal directorio do arquivo descomprimido",
|
"backup_no_uncompress_archive_dir": "Non hai tal directorio do arquivo descomprimido",
|
||||||
|
@ -781,7 +781,7 @@
|
||||||
"log_dyndns_unsubscribe": "Retirar subscrición para o subdominio YunoHost '{}'",
|
"log_dyndns_unsubscribe": "Retirar subscrición para o subdominio YunoHost '{}'",
|
||||||
"ask_dyndns_recovery_password_explain_unavailable": "Este dominio DynDNS xa está rexistrado. Se es a persoa que o rexistrou orixinalmente, podes escribir o código de recuperación para reclamar o dominio.",
|
"ask_dyndns_recovery_password_explain_unavailable": "Este dominio DynDNS xa está rexistrado. Se es a persoa que o rexistrou orixinalmente, podes escribir o código de recuperación para reclamar o dominio.",
|
||||||
"dyndns_too_many_requests": "O servicio dyndns de YunoHost recibeu demasiadas peticións do teu sistema, agarda 1 hora e volve intentalo.",
|
"dyndns_too_many_requests": "O servicio dyndns de YunoHost recibeu demasiadas peticións do teu sistema, agarda 1 hora e volve intentalo.",
|
||||||
"global_settings_setting_ssh_port_help": "É recomendable un porto inferior a 1024 para evitar os intentos de apropiación por parte de servizos de non-administración na máquina remota. Tamén deberías evitar elexir un porto que xa está sendo utilizado, como 80 ou 443.",
|
"global_settings_setting_ssh_port_help": "É recomendable un porto inferior a 1024 para evitar os intentos de apropiación por parte de servizos de non-administración na máquina remota. Tamén deberías evitar elixir un porto que xa está sendo utilizado, como 80 ou 443.",
|
||||||
"diagnosis_ignore_criteria_error": "Os criterios deben ter o formato key=value (ex. domain=yolo.test)",
|
"diagnosis_ignore_criteria_error": "Os criterios deben ter o formato key=value (ex. domain=yolo.test)",
|
||||||
"diagnosis_ignore_already_filtered": "(Xa existe un filtro de diagnóstico de {category} con estes criterios)",
|
"diagnosis_ignore_already_filtered": "(Xa existe un filtro de diagnóstico de {category} con estes criterios)",
|
||||||
"diagnosis_ignore_filter_removed": "Eliminouse o filtro do diagnóstico para {category}",
|
"diagnosis_ignore_filter_removed": "Eliminouse o filtro do diagnóstico para {category}",
|
||||||
|
@ -803,5 +803,11 @@
|
||||||
"migration_0027_modified_files": "Detectamos que os seguintes ficheiros semella foron modificados manualmente e poderían ser sobreescritos durante a actualización: {manually_modified_files}",
|
"migration_0027_modified_files": "Detectamos que os seguintes ficheiros semella foron modificados manualmente e poderían ser sobreescritos durante a actualización: {manually_modified_files}",
|
||||||
"migration_0027_not_enough_free_space": "Hai moi pouco espazo en /var/! Deberías ter polo menos 1GB libre para realizar a migración.",
|
"migration_0027_not_enough_free_space": "Hai moi pouco espazo en /var/! Deberías ter polo menos 1GB libre para realizar a migración.",
|
||||||
"migration_0027_patch_yunohost_conflicts": "Aplicando a solución para resolver o problema conflictivo…",
|
"migration_0027_patch_yunohost_conflicts": "Aplicando a solución para resolver o problema conflictivo…",
|
||||||
"migration_0027_system_not_fully_up_to_date": "O teu sistema non está totalmente actualizado. Fai unha actualización corrente antes de iniciar a migración a Bookworm."
|
"migration_0027_system_not_fully_up_to_date": "O teu sistema non está totalmente actualizado. Fai unha actualización corrente antes de iniciar a migración a Bookworm.",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains": "Dominios que actúan como MX secundario para",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted": "Lista de enderezos para apoio MX de SMTP",
|
||||||
|
"diagnosis_rfkill_wifi": "A tarxeta Wi-Fi está desactivada e un aviso do sistema podería previr a instalación de apps",
|
||||||
|
"diagnosis_rfkill_wifi_details": "Este aviso aparece na saída de varias ordes, estragando algunhas apps. Normalmente require indicar o código de país coa orde <code>sudo raspi-config</code>. Aquí tes o erro:<br>{rfkill_wifi_error}",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains_help": "Permitir a este servidor actuar como un dominio MX *secundario* de apoio para o dominio da lista. Así se o MX principal para o dominio non está accesible (por exemplo por quedar ser electricidade), os correos seguirán enviándose ao servidor, que os gardará un máximo de 20 días e intentará entregalos ao destino real unha vez volva ser accesible. Pódense indicar varios dominios, separados por comas.",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted_help": "Para actuar como MX secundario, hai que proporcionar unha lista detallada de enderezos de correspondentes permitidos (doutro xeito os correos serán rexeitados e desbotados). Pódense indicar varias entradas, separadas por comas."
|
||||||
}
|
}
|
||||||
|
|
|
@ -469,7 +469,7 @@
|
||||||
"config_unknown_filter_key": "Kunci filter '{filter_key}' tidak sesuai.",
|
"config_unknown_filter_key": "Kunci filter '{filter_key}' tidak sesuai.",
|
||||||
"backup_permission": "Izin pencadangan untuk {app}",
|
"backup_permission": "Izin pencadangan untuk {app}",
|
||||||
"config_forbidden_keyword": "Kata kunci '{keyword}' sudah ada, Anda tidak dapat membuat atau menggunakan panel konfigurasi disertai pertanyaan dengan id ini.",
|
"config_forbidden_keyword": "Kata kunci '{keyword}' sudah ada, Anda tidak dapat membuat atau menggunakan panel konfigurasi disertai pertanyaan dengan id ini.",
|
||||||
"good_practices_about_user_password": "Sekarang Anda akan menentukan kata sandi pengguna baru. Kata sandi harus terdiri dari minimal 8 karakter—walaupun sebaiknya menggunakan kata sandi yang lebih panjang (misalnya parafrasa) dan/atau menggunakan variasi karakter (huruf besar, huruf kecil, angka, dan karakter khusus).",
|
"good_practices_about_user_password": "Sekarang Anda akan menentukan kata sandi pengguna baru. Kata sandi harus terdiri dari minimal 8 karakter—meskipun sebaiknya menggunakan kata sandi yang lebih panjang (misalnya parafrasa) dan/atau menggunakan beragam karakter (huruf besar, huruf kecil, angka, dan karakter khusus).",
|
||||||
"domain_dns_push_failed_to_authenticate": "Autentikasi gagal pada API registrar untuk domain '{domain}'. Besar kemungkinan karena kredensial tidak sesuai? (Galat: {error})",
|
"domain_dns_push_failed_to_authenticate": "Autentikasi gagal pada API registrar untuk domain '{domain}'. Besar kemungkinan karena kredensial tidak sesuai? (Galat: {error})",
|
||||||
"certmanager_domain_dns_ip_differs_from_public_ip": "Rekaman DNS untuk domain '{domain}' berbeda dengan IP server ini. Silakan periksa kategori 'Catatan DNS' (dasar) dalam diagnosis untuk info lebih lanjut. Jika Anda baru saja memodifikasi rekaman A, silakan menunggu hingga rekaman tersebut disebarkan (beberapa pemeriksa sebaran DNS tersedia online). (Jika Anda tahu apa yang Anda lakukan, gunakan '--no-checks' untuk mematikan pemeriksaan ini.)",
|
"certmanager_domain_dns_ip_differs_from_public_ip": "Rekaman DNS untuk domain '{domain}' berbeda dengan IP server ini. Silakan periksa kategori 'Catatan DNS' (dasar) dalam diagnosis untuk info lebih lanjut. Jika Anda baru saja memodifikasi rekaman A, silakan menunggu hingga rekaman tersebut disebarkan (beberapa pemeriksa sebaran DNS tersedia online). (Jika Anda tahu apa yang Anda lakukan, gunakan '--no-checks' untuk mematikan pemeriksaan ini.)",
|
||||||
"certmanager_hit_rate_limit": "Terlalu banyak sertifikat yang telah diterbitkan untuk kumpulan domain {domain} ini baru-baru ini. Silakan coba lagi nanti. Lihat https://letsencrypt.org/docs/rate-limits/ untuk detail lebih lanjut",
|
"certmanager_hit_rate_limit": "Terlalu banyak sertifikat yang telah diterbitkan untuk kumpulan domain {domain} ini baru-baru ini. Silakan coba lagi nanti. Lihat https://letsencrypt.org/docs/rate-limits/ untuk detail lebih lanjut",
|
||||||
|
@ -483,7 +483,7 @@
|
||||||
"config_cant_set_value_on_section": "Anda tidak dapat menetapkan satu nilai pun di seluruh bagian konfigurasi.",
|
"config_cant_set_value_on_section": "Anda tidak dapat menetapkan satu nilai pun di seluruh bagian konfigurasi.",
|
||||||
"backup_applying_method_custom": "Memanggil metode pencadangan khusus '{method}'…",
|
"backup_applying_method_custom": "Memanggil metode pencadangan khusus '{method}'…",
|
||||||
"backup_ask_for_copying_if_needed": "Apakah Anda ingin melakukan pencadangan menggunakan {size}MB untuk sementara? (Cara ini digunakan karena beberapa berkas tidak dapat disiapkan menggunakan metode yang lebih efisien.)",
|
"backup_ask_for_copying_if_needed": "Apakah Anda ingin melakukan pencadangan menggunakan {size}MB untuk sementara? (Cara ini digunakan karena beberapa berkas tidak dapat disiapkan menggunakan metode yang lebih efisien.)",
|
||||||
"good_practices_about_admin_password": "Sekarang Anda akan menentukan kata sandi administrasi baru. Kata sandi harus terdiri dari minimal 8 karakter—walaupun sebaiknya menggunakan kata sandi yang lebih panjang (misalnya parafrasa) dan/atau menggunakan variasi karakter (huruf besar, huruf kecil, angka, dan karakter khusus).",
|
"good_practices_about_admin_password": "Sekarang Anda akan menentukan kata sandi administrasi baru. Kata sandi harus terdiri dari minimal 8 karakter—meskipun sebaiknya menggunakan kata sandi yang lebih panjang (misalnya parafrasa) dan/atau menggunakan beragam karakter (huruf besar, huruf kecil, angka, dan karakter khusus).",
|
||||||
"certmanager_acme_not_configured_for_domain": "Tantangan ACME tidak dapat dijalankan untuk {domain} saat ini karena konfigurasi pada nginx tidak memiliki potongan kode yang sesuai… Pastikan konfigurasi nginx Anda mutakhir menggunakan `yunohost tools regen-conf nginx --dry-run --with-diff`.",
|
"certmanager_acme_not_configured_for_domain": "Tantangan ACME tidak dapat dijalankan untuk {domain} saat ini karena konfigurasi pada nginx tidak memiliki potongan kode yang sesuai… Pastikan konfigurasi nginx Anda mutakhir menggunakan `yunohost tools regen-conf nginx --dry-run --with-diff`.",
|
||||||
"diagnosis_http_special_use_tld": "Domain {domain} berdasarkan pada domain tingkat atas (TLD) penggunaan khusus seperti .local atau .test dan oleh karena itu tidak diharapkan untuk diekspos di luar jaringan lokal.",
|
"diagnosis_http_special_use_tld": "Domain {domain} berdasarkan pada domain tingkat atas (TLD) penggunaan khusus seperti .local atau .test dan oleh karena itu tidak diharapkan untuk diekspos di luar jaringan lokal.",
|
||||||
"certmanager_self_ca_conf_file_not_found": "Tidak dapat menemukan berkas konfigurasi untuk otoritas teken mandiri (berkas: {file})",
|
"certmanager_self_ca_conf_file_not_found": "Tidak dapat menemukan berkas konfigurasi untuk otoritas teken mandiri (berkas: {file})",
|
||||||
|
@ -803,5 +803,11 @@
|
||||||
"service_description_redis-server": "Basis data khusus yang digunakan untuk akses data cepat, antrian tugas, dan komunikasi antar program",
|
"service_description_redis-server": "Basis data khusus yang digunakan untuk akses data cepat, antrian tugas, dan komunikasi antar program",
|
||||||
"update_apt_cache_warning": "Ada yang tidak sesuai saat memperbarui cache APT (manajer paket Debian). Berikut ini adalah kumpulan baris source.list, yang mungkin membantu mengidentifikasi baris yang bermasalah:\n{sourceslist}",
|
"update_apt_cache_warning": "Ada yang tidak sesuai saat memperbarui cache APT (manajer paket Debian). Berikut ini adalah kumpulan baris source.list, yang mungkin membantu mengidentifikasi baris yang bermasalah:\n{sourceslist}",
|
||||||
"user_import_missing_columns": "Kehilangan kolom berikut: {columns}",
|
"user_import_missing_columns": "Kehilangan kolom berikut: {columns}",
|
||||||
"user_import_nothing_to_do": "Tidak ada pengguna yang perlu diimpor"
|
"user_import_nothing_to_do": "Tidak ada pengguna yang perlu diimpor",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains": "Domain yang digunakan sebagai MX sekunder",
|
||||||
|
"global_settings_setting_smtp_backup_mx_domains_help": "Izinkan server ini digunakan sebagai domain MX *sekunder* cadangan pada domain yang terdaftar. Ini berarti bahwa jika MX utama untuk domain tersebut tidak dapat dijangkau (misalnya karena gangguan), surel akan tetap dikirim ke server ini, yang akan menyimpannya selama maksimal 20 hari dan mencoba meneruskannya ke tujuan yang sebenarnya setelah kembali aktif. Beberapa domain dapat disediakan, dipisahkan dengan koma.",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted": "Daftar surel yang diperbolehkan sebagai MX cadangan SMTP",
|
||||||
|
"diagnosis_rfkill_wifi": "Kartu Wi-Fi dinonaktifkan dan peringatan sistem mungkin akan mencegah pemasangan aplikasi",
|
||||||
|
"diagnosis_rfkill_wifi_details": "Peringatan ini muncul di banyak keluaran perintah, sehingga merusak beberapa aplikasi. Biasanya Anda diminta untuk menentukan kode negara dengan perintah <code>sudo raspi-config</code>. Galat yang muncul:<br>{rfkill_wifi_error}",
|
||||||
|
"global_settings_setting_smtp_backup_mx_emails_whitelisted_help": "Bila digunakan sebagai MX sekunder, daftar lengkap alamat surel penerima yang diizinkan harus disediakan (sebaliknya surel akan ditolak dan dibuang). Beberapa alamat dapat diberikan, dipisahkan dengan koma."
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
"app_not_installed": "{app} не найдено в списке установленных приложений: {all_apps}",
|
"app_not_installed": "{app} не найдено в списке установленных приложений: {all_apps}",
|
||||||
"app_not_properly_removed": "{app} удалены неправильно",
|
"app_not_properly_removed": "{app} удалены неправильно",
|
||||||
"app_removed": "{app} удалено",
|
"app_removed": "{app} удалено",
|
||||||
"app_requirements_checking": "Проверка необходимых пакетов для {app}…",
|
"app_requirements_checking": "Проверка зависимостей для {app}…",
|
||||||
"app_sources_fetch_failed": "Невозможно получить исходные файлы, проверьте правильность URL?",
|
"app_sources_fetch_failed": "Невозможно получить исходные файлы, проверьте правильность URL?",
|
||||||
"app_unknown": "Неизвестное приложение",
|
"app_unknown": "Неизвестное приложение",
|
||||||
"app_upgrade_app_name": "Обновление {app}…",
|
"app_upgrade_app_name": "Обновление {app}…",
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
"ask_new_domain": "Новый домен",
|
"ask_new_domain": "Новый домен",
|
||||||
"ask_new_path": "Новый путь",
|
"ask_new_path": "Новый путь",
|
||||||
"ask_password": "Пароль",
|
"ask_password": "Пароль",
|
||||||
"app_remove_after_failed_install": "Удаление приложения после сбоя установки…",
|
"app_remove_after_failed_install": "Удаление приложения после ошибки установки…",
|
||||||
"app_upgrade_script_failed": "Внутри скрипта обновления приложения произошла ошибка",
|
"app_upgrade_script_failed": "Внутри скрипта обновления приложения произошла ошибка",
|
||||||
"upnp_disabled": "UPnP отключен",
|
"upnp_disabled": "UPnP отключен",
|
||||||
"app_manifest_install_ask_domain": "Выберите домен, в котором должно быть установлено это приложение",
|
"app_manifest_install_ask_domain": "Выберите домен, в котором должно быть установлено это приложение",
|
||||||
|
@ -76,13 +76,13 @@
|
||||||
"apps_catalog_init_success": "Система каталога приложений инициализирована!",
|
"apps_catalog_init_success": "Система каталога приложений инициализирована!",
|
||||||
"backup_abstract_method": "Этот метод резервного копирования еще не реализован",
|
"backup_abstract_method": "Этот метод резервного копирования еще не реализован",
|
||||||
"backup_actually_backuping": "Создание резервного архива из собранных файлов…",
|
"backup_actually_backuping": "Создание резервного архива из собранных файлов…",
|
||||||
"backup_applying_method_custom": "Вызов пользовательского метода резервного копирования {method}'…",
|
"backup_applying_method_custom": "Вызов пользовательского метода резервного копирования «{method}»…",
|
||||||
"backup_archive_app_not_found": "Не удалось найти {app} в резервной копии",
|
"backup_archive_app_not_found": "Не удалось найти {app} в резервной копии",
|
||||||
"backup_applying_method_tar": "Создание резервной копии в TAR-архиве…",
|
"backup_applying_method_tar": "Создание резервной копии в TAR-архиве…",
|
||||||
"backup_archive_broken_link": "Не удалось получить доступ к резервной копии (неправильная ссылка {path})",
|
"backup_archive_broken_link": "Не удалось получить доступ к резервной копии (неправильная ссылка {path})",
|
||||||
"apps_catalog_failed_to_download": "Невозможно загрузить каталог приложений {apps_catalog}: {error}",
|
"apps_catalog_failed_to_download": "Невозможно загрузить каталог приложений {apps_catalog}: {error}",
|
||||||
"apps_catalog_obsolete_cache": "Кэш каталога приложений пуст или устарел.",
|
"apps_catalog_obsolete_cache": "Кэш каталога приложений пуст или устарел.",
|
||||||
"backup_archive_cant_retrieve_info_json": "Не удалось загрузить информацию об архиве '{archive}'… info.json не может быть получен (или не является корректным json).",
|
"backup_archive_cant_retrieve_info_json": "Не удалось загрузить информацию об архиве «{archive}»… Файл info.json не может быть получен (или не является корректным json).",
|
||||||
"app_packaging_format_not_supported": "Это приложение не может быть установлено, поскольку его формат не поддерживается вашей версией YunoHost. Возможно, вам следует обновить систему.",
|
"app_packaging_format_not_supported": "Это приложение не может быть установлено, поскольку его формат не поддерживается вашей версией YunoHost. Возможно, вам следует обновить систему.",
|
||||||
"app_restore_failed": "Не удалось восстановить {app}: {error}",
|
"app_restore_failed": "Не удалось восстановить {app}: {error}",
|
||||||
"app_restore_script_failed": "Произошла ошибка внутри сценария восстановления приложения",
|
"app_restore_script_failed": "Произошла ошибка внутри сценария восстановления приложения",
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
"app_start_backup": "Сбор файлов для резервного копирования {app}…",
|
"app_start_backup": "Сбор файлов для резервного копирования {app}…",
|
||||||
"app_start_install": "Устанавливается {app}…",
|
"app_start_install": "Устанавливается {app}…",
|
||||||
"backup_app_failed": "Не удалось создать резервную копию {app}",
|
"backup_app_failed": "Не удалось создать резервную копию {app}",
|
||||||
"backup_archive_name_exists": "Резервная копия с таким именем уже существует.",
|
"backup_archive_name_exists": "Резервная копия с именем «{name}» уже существует.",
|
||||||
"backup_archive_name_unknown": "Неизвестный локальный архив резервного копирования с именем '{name}'",
|
"backup_archive_name_unknown": "Неизвестный локальный архив резервного копирования с именем '{name}'",
|
||||||
"backup_archive_open_failed": "Не удалось открыть архив резервной копии",
|
"backup_archive_open_failed": "Не удалось открыть архив резервной копии",
|
||||||
"backup_archive_corrupted": "Похоже, что архив резервной копии '{archive}' поврежден : {error}",
|
"backup_archive_corrupted": "Похоже, что архив резервной копии '{archive}' поврежден : {error}",
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
"config_no_panel": "Панель конфигурации не найдена.",
|
"config_no_panel": "Панель конфигурации не найдена.",
|
||||||
"danger": "Опасно:",
|
"danger": "Опасно:",
|
||||||
"certmanager_warning_subdomain_dns_record": "Субдомен '{subdomain}' не соответствует IP-адресу основного домена '{domain}'. Некоторые функции будут недоступны, пока вы не исправите это и не сгенерируете сертификат снова.",
|
"certmanager_warning_subdomain_dns_record": "Субдомен '{subdomain}' не соответствует IP-адресу основного домена '{domain}'. Некоторые функции будут недоступны, пока вы не исправите это и не сгенерируете сертификат снова.",
|
||||||
"app_argument_password_no_default": "Ошибка при парсинге аргумента пароля '{name}': аргумент пароля не может иметь значение по умолчанию по причинам безопасности",
|
"app_argument_password_no_default": "Ошибка при парсинге аргумента пароля «{name}»: аргумент пароля не может иметь значение по умолчанию по причинам безопасности",
|
||||||
"custom_app_url_required": "Вы должны указать URL для обновления вашего пользовательского приложения {app}",
|
"custom_app_url_required": "Вы должны указать URL для обновления вашего пользовательского приложения {app}",
|
||||||
"backup_creation_failed": "Не удалось создать резервную копию",
|
"backup_creation_failed": "Не удалось создать резервную копию",
|
||||||
"backup_csv_addition_failed": "Не удалось добавить файлы для резервного копирования в CSV-файл",
|
"backup_csv_addition_failed": "Не удалось добавить файлы для резервного копирования в CSV-файл",
|
||||||
|
@ -136,8 +136,8 @@
|
||||||
"diagnosis_apps_issue": "Обнаружена проблема для приложения {app}",
|
"diagnosis_apps_issue": "Обнаружена проблема для приложения {app}",
|
||||||
"diagnosis_apps_not_in_app_catalog": "Этого приложения нет в каталоге приложений YunoHost. Если оно было там раньше, а теперь удалено, вам стоит подумать об удалении этого приложения, так как оно больше не получит обновлений и может нарушить целостность и безопасность вашей системы.",
|
"diagnosis_apps_not_in_app_catalog": "Этого приложения нет в каталоге приложений YunoHost. Если оно было там раньше, а теперь удалено, вам стоит подумать об удалении этого приложения, так как оно больше не получит обновлений и может нарушить целостность и безопасность вашей системы.",
|
||||||
"diagnosis_apps_deprecated_practices": "Установленная версия этого приложения все еще использует некоторые устаревшие пакеты. Вам стоит подумать об обновлении.",
|
"diagnosis_apps_deprecated_practices": "Установленная версия этого приложения все еще использует некоторые устаревшие пакеты. Вам стоит подумать об обновлении.",
|
||||||
"additional_urls_already_added": "Этот URL '{url}' уже добавлен в дополнительный URL для разрешения '{permission}'",
|
"additional_urls_already_added": "Этот URL «{url}» уже добавлен в дополнительный URL для разрешения «{permission}»",
|
||||||
"additional_urls_already_removed": "Этот URL '{url}' уже удален из дополнительных URL для разрешения '{permission}'",
|
"additional_urls_already_removed": "Этот URL «{url}» уже удален из дополнительных URL для разрешения «{permission}»",
|
||||||
"app_action_cannot_be_ran_because_required_services_down": "Для выполнения этого действия должны быть запущены следующие службы: {services}. Попробуйте перезапустить их, чтобы продолжить (и, возможно, выяснить, почему они не работают).",
|
"app_action_cannot_be_ran_because_required_services_down": "Для выполнения этого действия должны быть запущены следующие службы: {services}. Попробуйте перезапустить их, чтобы продолжить (и, возможно, выяснить, почему они не работают).",
|
||||||
"app_unsupported_remote_type": "Неподдерживаемый удаленный тип, используемый для приложения",
|
"app_unsupported_remote_type": "Неподдерживаемый удаленный тип, используемый для приложения",
|
||||||
"backup_archive_system_part_not_available": "Системная часть '{part}' недоступна в этой резервной копии",
|
"backup_archive_system_part_not_available": "Системная часть '{part}' недоступна в этой резервной копии",
|
||||||
|
@ -166,7 +166,7 @@
|
||||||
"diagnosis_description_services": "Проверка статусов сервисов",
|
"diagnosis_description_services": "Проверка статусов сервисов",
|
||||||
"config_validate_color": "Должен быть правильный hex цвета RGB",
|
"config_validate_color": "Должен быть правильный hex цвета RGB",
|
||||||
"diagnosis_basesystem_hardware": "Аппаратная архитектура сервера – {virt} {arch}",
|
"diagnosis_basesystem_hardware": "Аппаратная архитектура сервера – {virt} {arch}",
|
||||||
"certmanager_acme_not_configured_for_domain": "Задача ACME не может быть запущена для {domain} прямо сейчас, потому что в его nginx conf отсутствует соответствующий фрагмент кода… Пожалуйста, убедитесь, что конфигурация вашего nginx обновлена, используя 'yunohost tools regen-conf nginx --dry-run --with-diff'.",
|
"certmanager_acme_not_configured_for_domain": "Задача ACME не может быть запущена для {domain} прямо сейчас, потому что в его конфигурации nginx отсутствует соответствующий фрагмент кода… Пожалуйста, убедитесь, что Ваша конфигурация nginx обновлена, используя «yunohost tools regen-conf nginx --dry-run --with-diff».",
|
||||||
"diagnosis_basesystem_ynh_single_version": "{package} версия: {version} ({repo})",
|
"diagnosis_basesystem_ynh_single_version": "{package} версия: {version} ({repo})",
|
||||||
"diagnosis_description_mail": "Электронная почта",
|
"diagnosis_description_mail": "Электронная почта",
|
||||||
"diagnosis_basesystem_kernel": "Версия ядра Linux на сервере {kernel_version}",
|
"diagnosis_basesystem_kernel": "Версия ядра Linux на сервере {kernel_version}",
|
||||||
|
@ -340,5 +340,24 @@
|
||||||
"app_change_url_require_full_domain": "{app} не может быть перемещено на данный URL, потому что оно требует весь домен (т.е., путь - /)",
|
"app_change_url_require_full_domain": "{app} не может быть перемещено на данный URL, потому что оно требует весь домен (т.е., путь - /)",
|
||||||
"app_failed_to_download_asset": "Не удалось скачать материал «{source_id}» ({url}) для {app}: {out}",
|
"app_failed_to_download_asset": "Не удалось скачать материал «{source_id}» ({url}) для {app}: {out}",
|
||||||
"app_failed_to_upgrade_but_continue": "Не удалось обновить приложение {failed_app}, обновления продолжаются, как запрошено. Выполните «yunohost log show {operation_logger_name}», чтобы увидеть журнал ошибки",
|
"app_failed_to_upgrade_but_continue": "Не удалось обновить приложение {failed_app}, обновления продолжаются, как запрошено. Выполните «yunohost log show {operation_logger_name}», чтобы увидеть журнал ошибки",
|
||||||
"app_not_upgraded_broken_system": "Не удалось обновить приложение «{failed_app}», система находится в сломанном состоянии, обновления следующих приложений были отменены: {apps}"
|
"app_not_upgraded_broken_system": "Не удалось обновить приложение «{failed_app}», система находится в сломанном состоянии, обновления следующих приложений были отменены: {apps}",
|
||||||
|
"ask_dyndns_recovery_password_explain_unavailable": "Этот домен DynDNS уже зарегистрирован. Если Вы — личность, которая изначально зарегистрировала этот домен, Вы можете ввести пароль, чтобы заново занять этот домен.",
|
||||||
|
"ask_dyndns_recovery_password": "Пароль восстановления DynDNS",
|
||||||
|
"certmanager_cert_install_failed": "Не удалась установка сертификата Let's Encrypt для {domains}",
|
||||||
|
"certmanager_cert_install_failed_selfsigned": "Установка само-подписанного сертификата для {domains} не удалась",
|
||||||
|
"backup_hook_unknown": "Хук резервного копирования «{hook}» неизвестен",
|
||||||
|
"backup_no_uncompress_archive_dir": "Такой несжатой директории не существует",
|
||||||
|
"backup_unable_to_organize_files": "Невозможно использовать быстрый метод организации файлов в архиве",
|
||||||
|
"app_resource_failed": "Установка, удаление или обновление ресурсов {app} провалилась: {error}",
|
||||||
|
"ask_dyndns_recovery_password_explain": "Пожалуйста, выберите пароль восстановления для Вашего домена DynDNS, для случая, если Вам понадобится сбросить его позже.",
|
||||||
|
"ask_dyndns_recovery_password_explain_during_unsubscribe": "Пожалуйста, выберите пароль восстановления для Вашего домена DynDNS.",
|
||||||
|
"app_not_upgraded_broken_system_continue": "Приложение «{failed_app}» не смогло обновиться и сломало систему (так что --continue-on-failure игнорируется), и, в свою очередь, обновления других приложений были отменены: {apps}",
|
||||||
|
"backup_output_symlink_dir_broken": "Директория «{path}» Вашего архива — сломанная символьная ссылка. Может быть, Вы забыли смонтировать или подключить устройство, на которое она ссылается.",
|
||||||
|
"ask_fullname": "Полное имя",
|
||||||
|
"ask_admin_username": "Имя пользователя администратора",
|
||||||
|
"backup_running_hooks": "Выполняются хуки резервного копирования…",
|
||||||
|
"app_yunohost_version_not_supported": "Это приложение требует YunoHost версии {required} или выше, но сейчас установлена версия {current}",
|
||||||
|
"apps_failed_to_upgrade": "Не удалось обновить данные приложения:{apps}",
|
||||||
|
"apps_failed_to_upgrade_line": "\n * {app_id} (чтобы увидеть соответствующий журнал, выполните «yunohost log show {operation_logger_name}»)",
|
||||||
|
"ask_admin_fullname": "Полное имя администратора"
|
||||||
}
|
}
|
|
@ -280,4 +280,4 @@
|
||||||
"domain_config_xmpp": "Krátke správy (XMPP)",
|
"domain_config_xmpp": "Krátke správy (XMPP)",
|
||||||
"log_app_makedefault": "Nastaviť '{}' ako predvolenú aplikáciu",
|
"log_app_makedefault": "Nastaviť '{}' ako predvolenú aplikáciu",
|
||||||
"domain_config_cert_renew_help": "Certifikát bude automaticky obnovený po 15 dňoch platnosti. Ak chcete, môžete ho obnoviť aj ručne. (Neodporúča sa)."
|
"domain_config_cert_renew_help": "Certifikát bude automaticky obnovený po 15 dňoch platnosti. Ak chcete, môžete ho obnoviť aj ručne. (Neodporúča sa)."
|
||||||
}
|
}
|
|
@ -32,4 +32,4 @@
|
||||||
"app_change_url_identical_domains": "('{domain}{path}') Eski ve yeni alan adının veya URL adresler aynı.Şu anda yapacak bir şey bulunmuyor.",
|
"app_change_url_identical_domains": "('{domain}{path}') Eski ve yeni alan adının veya URL adresler aynı.Şu anda yapacak bir şey bulunmuyor.",
|
||||||
"app_corrupt_source": "YunoHost, {app} için '{source_id}' ({url}) adresinden indirebildi, ancak varlık olması gereken yapılandırmalarla eşleşmiyor. Bu, sunucunuzda geçici bir ağ arızası meydana geldiği veya varlığın bir şekilde yayın yapılan veri sağlacıyısı (veya kötü niyetli bir kişi?) tarafından değiştirildiği ve YunoHost yapımcılarının araştırması ve belki de bu değişikliği dikkate almak için uygulama bildirimini güncellemesi gerektiği anlamına gelebilir.\n Beklenen sha256 sağlama toplamı: {expected_sha256}\n İndirilen sha256 sağlama toplamı: {computed_sha256}\n İndirilen dosya boyutu: {size}",
|
"app_corrupt_source": "YunoHost, {app} için '{source_id}' ({url}) adresinden indirebildi, ancak varlık olması gereken yapılandırmalarla eşleşmiyor. Bu, sunucunuzda geçici bir ağ arızası meydana geldiği veya varlığın bir şekilde yayın yapılan veri sağlacıyısı (veya kötü niyetli bir kişi?) tarafından değiştirildiği ve YunoHost yapımcılarının araştırması ve belki de bu değişikliği dikkate almak için uygulama bildirimini güncellemesi gerektiği anlamına gelebilir.\n Beklenen sha256 sağlama toplamı: {expected_sha256}\n İndirilen sha256 sağlama toplamı: {computed_sha256}\n İndirilen dosya boyutu: {size}",
|
||||||
"app_failed_to_upgrade_but_continue": "{failed_app} uygulaması yükseltilirken başarısız oldu. Sıradaki güncellemeler devam ediyor. Konu ile ilgili hata kayıtlarını görüntülemek için 'yunohost log show {operation_logger_name}' komutunu çalıştırın"
|
"app_failed_to_upgrade_but_continue": "{failed_app} uygulaması yükseltilirken başarısız oldu. Sıradaki güncellemeler devam ediyor. Konu ile ilgili hata kayıtlarını görüntülemek için 'yunohost log show {operation_logger_name}' komutunu çalıştırın"
|
||||||
}
|
}
|
|
@ -106,7 +106,7 @@ i18n = "global_settings_setting"
|
||||||
[email.smtp.smtp_relay_enabled]
|
[email.smtp.smtp_relay_enabled]
|
||||||
type = "boolean"
|
type = "boolean"
|
||||||
default = false
|
default = false
|
||||||
|
|
||||||
[email.smtp.smtp_relay_host]
|
[email.smtp.smtp_relay_host]
|
||||||
type = "string"
|
type = "string"
|
||||||
default = ""
|
default = ""
|
||||||
|
@ -123,7 +123,7 @@ i18n = "global_settings_setting"
|
||||||
default = ""
|
default = ""
|
||||||
optional = true
|
optional = true
|
||||||
visible="smtp_relay_enabled"
|
visible="smtp_relay_enabled"
|
||||||
|
|
||||||
[email.smtp.smtp_relay_password]
|
[email.smtp.smtp_relay_password]
|
||||||
type = "password"
|
type = "password"
|
||||||
default = ""
|
default = ""
|
||||||
|
@ -131,6 +131,17 @@ i18n = "global_settings_setting"
|
||||||
visible="smtp_relay_enabled"
|
visible="smtp_relay_enabled"
|
||||||
help = "" # This is empty string on purpose, otherwise the core automatically set the 'good_practice_admin_password' string here which is not relevant, because the admin is not actually "choosing" the password ...
|
help = "" # This is empty string on purpose, otherwise the core automatically set the 'good_practice_admin_password' string here which is not relevant, because the admin is not actually "choosing" the password ...
|
||||||
|
|
||||||
|
[email.smtp.smtp_backup_mx_domains]
|
||||||
|
type = "string"
|
||||||
|
default = ""
|
||||||
|
optional = true
|
||||||
|
|
||||||
|
[email.smtp.smtp_backup_mx_emails_whitelisted]
|
||||||
|
type = "string"
|
||||||
|
default = ""
|
||||||
|
optional = true
|
||||||
|
visible = "smtp_backup_mx_domains"
|
||||||
|
|
||||||
[misc]
|
[misc]
|
||||||
|
|
||||||
[misc.backup]
|
[misc.backup]
|
||||||
|
|
123
src/app.py
123
src/app.py
|
@ -312,10 +312,7 @@ def app_map(app=None, raw=False, user=None):
|
||||||
result = {}
|
result = {}
|
||||||
|
|
||||||
if app is not None:
|
if app is not None:
|
||||||
if not _is_installed(app):
|
_assert_is_installed(app)
|
||||||
raise YunohostValidationError(
|
|
||||||
"app_not_installed", app=app, all_apps=_get_all_installed_apps_id()
|
|
||||||
)
|
|
||||||
apps = [
|
apps = [
|
||||||
app,
|
app,
|
||||||
]
|
]
|
||||||
|
@ -1403,10 +1400,7 @@ def app_remove(operation_logger, app, purge=False, force_workdir=None):
|
||||||
)
|
)
|
||||||
from yunohost.domain import domain_list, domain_config_set, _get_raw_domain_settings
|
from yunohost.domain import domain_list, domain_config_set, _get_raw_domain_settings
|
||||||
|
|
||||||
if not _is_installed(app):
|
_assert_is_installed(app)
|
||||||
raise YunohostValidationError(
|
|
||||||
"app_not_installed", app=app, all_apps=_get_all_installed_apps_id()
|
|
||||||
)
|
|
||||||
|
|
||||||
operation_logger.start()
|
operation_logger.start()
|
||||||
|
|
||||||
|
@ -1915,6 +1909,7 @@ ynh_app_config_run $1
|
||||||
app_setting_path = os.path.join(APPS_SETTING_PATH, self.entity)
|
app_setting_path = os.path.join(APPS_SETTING_PATH, self.entity)
|
||||||
app_script_env = _make_environment_for_app_script(app, workdir=app_setting_path)
|
app_script_env = _make_environment_for_app_script(app, workdir=app_setting_path)
|
||||||
app_script_env.update(env)
|
app_script_env.update(env)
|
||||||
|
app_script_env["YNH_APP_CONFIG_PANEL_OPTIONS_TYPES_AND_BINDS"] = self._dump_options_types_and_binds()
|
||||||
|
|
||||||
ret, values = hook_exec(config_script, args=[action], env=app_script_env)
|
ret, values = hook_exec(config_script, args=[action], env=app_script_env)
|
||||||
if ret != 0:
|
if ret != 0:
|
||||||
|
@ -1928,8 +1923,68 @@ ynh_app_config_run $1
|
||||||
|
|
||||||
return AppConfigPanel
|
return AppConfigPanel
|
||||||
|
|
||||||
|
def _get_config_panel(self):
|
||||||
|
|
||||||
def _get_app_settings(app):
|
ret = super()._get_config_panel()
|
||||||
|
|
||||||
|
self._compute_binds()
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def _compute_binds(self):
|
||||||
|
"""
|
||||||
|
This compute the 'bind' statement for every option
|
||||||
|
In particular to handle __FOOBAR__ syntax
|
||||||
|
and to handle the fact that bind statements may be defined panel-wide or section-wide
|
||||||
|
"""
|
||||||
|
|
||||||
|
settings = _get_app_settings(self.entity)
|
||||||
|
|
||||||
|
for panel, section, option in self._iterate():
|
||||||
|
|
||||||
|
bind_panel = panel.get("bind")
|
||||||
|
|
||||||
|
bind_section = section.get("bind")
|
||||||
|
if not bind_section:
|
||||||
|
bind_section = bind_panel
|
||||||
|
elif bind_section[-1] == ":" and bind_panel and ":" in bind_panel:
|
||||||
|
selector, bind_panel_file = bind_panel.split(":")
|
||||||
|
if ">" in bind_section:
|
||||||
|
bind_section = bind_section + bind_panel_file
|
||||||
|
else:
|
||||||
|
bind_section = selector + bind_section + bind_panel_file
|
||||||
|
|
||||||
|
bind = option.get("bind")
|
||||||
|
if not bind:
|
||||||
|
if bind_section:
|
||||||
|
bind = bind_section
|
||||||
|
else:
|
||||||
|
bind = "settings"
|
||||||
|
elif bind[-1] == ":" and bind_section and ":" in bind_section:
|
||||||
|
selector, bind_file = bind_section.split(":")
|
||||||
|
if ">" in bind:
|
||||||
|
bind = bind + bind_file
|
||||||
|
else:
|
||||||
|
bind = selector + bind + bind_file
|
||||||
|
if bind == "settings" and option.get("type", "string") == "file":
|
||||||
|
bind = "null"
|
||||||
|
|
||||||
|
option["bind"] = _hydrate_app_template(bind, settings)
|
||||||
|
|
||||||
|
def _dump_options_types_and_binds(self):
|
||||||
|
lines = []
|
||||||
|
for _, _, option in self._iterate():
|
||||||
|
lines.append(
|
||||||
|
"|".join([option["id"], option.get("type", "string"), option["bind"]])
|
||||||
|
)
|
||||||
|
return "\n".join(lines)
|
||||||
|
|
||||||
|
|
||||||
|
app_settings_cache: Dict[str, Dict[str, Any]] = {}
|
||||||
|
app_settings_cache_timestamp: Dict[str, float] = {}
|
||||||
|
|
||||||
|
|
||||||
|
def _get_app_settings(app: str) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Get settings of an installed app
|
Get settings of an installed app
|
||||||
|
|
||||||
|
@ -1937,12 +1992,22 @@ def _get_app_settings(app):
|
||||||
app -- The app id (like nextcloud__2)
|
app -- The app id (like nextcloud__2)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not _is_installed(app):
|
_assert_is_installed(app)
|
||||||
raise YunohostValidationError(
|
|
||||||
"app_not_installed", app=app, all_apps=_get_all_installed_apps_id()
|
global app_settings_cache
|
||||||
)
|
global app_settings_cache_timestamp
|
||||||
|
|
||||||
|
app_setting_path = os.path.join(APPS_SETTING_PATH, app, "settings.yml")
|
||||||
|
app_setting_timestamp = os.path.getmtime(app_setting_path)
|
||||||
|
|
||||||
|
# perf: app settings are cached using the settings.yml's modification date,
|
||||||
|
# such that we don't have to worry too much about calling this function
|
||||||
|
# too many times (because ultimately parsing yml is not free)
|
||||||
|
if app_settings_cache_timestamp.get(app) == app_setting_timestamp:
|
||||||
|
return app_settings_cache[app].copy()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(os.path.join(APPS_SETTING_PATH, app, "settings.yml")) as f:
|
with open(app_setting_path) as f:
|
||||||
settings = yaml.safe_load(f) or {}
|
settings = yaml.safe_load(f) or {}
|
||||||
# If label contains unicode char, this may later trigger issues when building strings...
|
# If label contains unicode char, this may later trigger issues when building strings...
|
||||||
# FIXME: this should be propagated to read_yaml so that this fix applies everywhere I think...
|
# FIXME: this should be propagated to read_yaml so that this fix applies everywhere I think...
|
||||||
|
@ -1960,8 +2025,15 @@ def _get_app_settings(app):
|
||||||
# Make the app id available as $app too
|
# Make the app id available as $app too
|
||||||
settings["app"] = app
|
settings["app"] = app
|
||||||
|
|
||||||
if app == settings["id"]:
|
# FIXME: it's not clear why this code exists... Shouldn't we hard-define 'id' as $app ...?
|
||||||
return settings
|
if app != settings["id"]:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
# Cache the settings
|
||||||
|
app_settings_cache[app] = settings.copy()
|
||||||
|
app_settings_cache_timestamp[app] = app_setting_timestamp
|
||||||
|
|
||||||
|
return settings
|
||||||
except (IOError, TypeError, KeyError):
|
except (IOError, TypeError, KeyError):
|
||||||
logger.error(m18n.n("app_not_correctly_installed", app=app))
|
logger.error(m18n.n("app_not_correctly_installed", app=app))
|
||||||
return {}
|
return {}
|
||||||
|
@ -1979,6 +2051,11 @@ def _set_app_settings(app, settings):
|
||||||
with open(os.path.join(APPS_SETTING_PATH, app, "settings.yml"), "w") as f:
|
with open(os.path.join(APPS_SETTING_PATH, app, "settings.yml"), "w") as f:
|
||||||
yaml.safe_dump(settings, f, default_flow_style=False)
|
yaml.safe_dump(settings, f, default_flow_style=False)
|
||||||
|
|
||||||
|
if app in app_settings_cache_timestamp:
|
||||||
|
del app_settings_cache_timestamp[app]
|
||||||
|
if app in app_settings_cache:
|
||||||
|
del app_settings_cache[app]
|
||||||
|
|
||||||
|
|
||||||
def _parse_app_version(v):
|
def _parse_app_version(v):
|
||||||
|
|
||||||
|
@ -2600,16 +2677,6 @@ def _list_upgradable_apps():
|
||||||
|
|
||||||
|
|
||||||
def _is_installed(app: str) -> bool:
|
def _is_installed(app: str) -> bool:
|
||||||
"""
|
|
||||||
Check if application is installed
|
|
||||||
|
|
||||||
Keyword arguments:
|
|
||||||
app -- id of App to check
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Boolean
|
|
||||||
|
|
||||||
"""
|
|
||||||
return os.path.isdir(APPS_SETTING_PATH + app)
|
return os.path.isdir(APPS_SETTING_PATH + app)
|
||||||
|
|
||||||
|
|
||||||
|
@ -2844,7 +2911,9 @@ def _get_conflicting_apps(domain, path, ignore_app=None):
|
||||||
for p, a in apps_map[domain].items():
|
for p, a in apps_map[domain].items():
|
||||||
if a["id"] == ignore_app:
|
if a["id"] == ignore_app:
|
||||||
continue
|
continue
|
||||||
if path == p or path == "/" or p == "/":
|
if path == p or (
|
||||||
|
not path.startswith("/.well-known/") and (path == "/" or p == "/")
|
||||||
|
):
|
||||||
conflicts.append((p, a["id"], a["label"]))
|
conflicts.append((p, a["id"], a["label"]))
|
||||||
|
|
||||||
return conflicts
|
return conflicts
|
||||||
|
|
|
@ -192,6 +192,16 @@ class MyDiagnoser(Diagnoser):
|
||||||
summary="diagnosis_high_number_auth_failures",
|
summary="diagnosis_high_number_auth_failures",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
rfkill_wifi = self.rfkill_wifi()
|
||||||
|
if len(rfkill_wifi) > 0:
|
||||||
|
yield dict(
|
||||||
|
meta={"test": "rfkill_wifi"},
|
||||||
|
status="ERROR",
|
||||||
|
summary="diagnosis_rfkill_wifi",
|
||||||
|
details=["diagnosis_rfkill_wifi_details"],
|
||||||
|
data={"rfkill_wifi_error": rfkill_wifi},
|
||||||
|
)
|
||||||
|
|
||||||
def bad_sury_packages(self):
|
def bad_sury_packages(self):
|
||||||
packages_to_check = ["openssl", "libssl1.1", "libssl-dev"]
|
packages_to_check = ["openssl", "libssl1.1", "libssl-dev"]
|
||||||
for package in packages_to_check:
|
for package in packages_to_check:
|
||||||
|
@ -301,3 +311,10 @@ class MyDiagnoser(Diagnoser):
|
||||||
)
|
)
|
||||||
write_to_json(cache_file, CVEs)
|
write_to_json(cache_file, CVEs)
|
||||||
return CVEs[0]["VULNERABLE"]
|
return CVEs[0]["VULNERABLE"]
|
||||||
|
|
||||||
|
def rfkill_wifi(self):
|
||||||
|
if os.path.isfile("/etc/profile.d/wifi-check.sh"):
|
||||||
|
cmd = "bash /etc/profile.d/wifi-check.sh"
|
||||||
|
return check_output(cmd)
|
||||||
|
else:
|
||||||
|
return ""
|
||||||
|
|
|
@ -433,7 +433,14 @@ def _get_dns_zone_for_domain(domain):
|
||||||
zone = parent_list[-1]
|
zone = parent_list[-1]
|
||||||
|
|
||||||
# Adding this otherwise the CI is flooding about those ...
|
# Adding this otherwise the CI is flooding about those ...
|
||||||
if domain not in ["example.tld", "sub.example.tld", "domain.tld", "sub.domain.tld", "domain_a.dev", "domain_b.dev"]:
|
if domain not in [
|
||||||
|
"example.tld",
|
||||||
|
"sub.example.tld",
|
||||||
|
"domain.tld",
|
||||||
|
"sub.domain.tld",
|
||||||
|
"domain_a.dev",
|
||||||
|
"domain_b.dev",
|
||||||
|
]:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Could not identify correctly the dns zone for domain {domain}, returning {zone}"
|
f"Could not identify correctly the dns zone for domain {domain}, returning {zone}"
|
||||||
)
|
)
|
||||||
|
|
|
@ -332,6 +332,8 @@ def reconfigure_ssh_and_fail2ban(setting_name, old_value, new_value):
|
||||||
@post_change_hook("smtp_relay_port")
|
@post_change_hook("smtp_relay_port")
|
||||||
@post_change_hook("smtp_relay_user")
|
@post_change_hook("smtp_relay_user")
|
||||||
@post_change_hook("smtp_relay_password")
|
@post_change_hook("smtp_relay_password")
|
||||||
|
@post_change_hook("smtp_backup_mx_domains")
|
||||||
|
@post_change_hook("smtp_backup_mx_emails_whitelisted")
|
||||||
@post_change_hook("postfix_compatibility")
|
@post_change_hook("postfix_compatibility")
|
||||||
def reconfigure_postfix(setting_name, old_value, new_value):
|
def reconfigure_postfix(setting_name, old_value, new_value):
|
||||||
if old_value != new_value:
|
if old_value != new_value:
|
||||||
|
|
26
src/user.py
26
src/user.py
|
@ -1135,6 +1135,7 @@ def user_group_update(
|
||||||
) -> None | dict[str, Any]:
|
) -> None | dict[str, Any]:
|
||||||
from yunohost.permission import permission_sync_to_user
|
from yunohost.permission import permission_sync_to_user
|
||||||
from yunohost.utils.ldap import _get_ldap_interface, _ldap_path_extract
|
from yunohost.utils.ldap import _get_ldap_interface, _ldap_path_extract
|
||||||
|
from yunohost.hook import hook_callback
|
||||||
|
|
||||||
existing_users = list(user_list()["users"].keys())
|
existing_users = list(user_list()["users"].keys())
|
||||||
|
|
||||||
|
@ -1174,6 +1175,11 @@ def user_group_update(
|
||||||
new_group_members = copy.copy(current_group_members)
|
new_group_members = copy.copy(current_group_members)
|
||||||
new_attr_dict: dict[str, list] = {}
|
new_attr_dict: dict[str, list] = {}
|
||||||
|
|
||||||
|
# Group permissions
|
||||||
|
current_group_permissions = [
|
||||||
|
_ldap_path_extract(p, "cn") for p in group.get("permission", [])
|
||||||
|
]
|
||||||
|
|
||||||
if add:
|
if add:
|
||||||
users_to_add = [add] if not isinstance(add, list) else add
|
users_to_add = [add] if not isinstance(add, list) else add
|
||||||
|
|
||||||
|
@ -1292,6 +1298,26 @@ def user_group_update(
|
||||||
if sync_perm:
|
if sync_perm:
|
||||||
permission_sync_to_user()
|
permission_sync_to_user()
|
||||||
|
|
||||||
|
if add and users_to_add:
|
||||||
|
for permission in current_group_permissions:
|
||||||
|
app = permission.split(".")[0]
|
||||||
|
sub_permission = permission.split(".")[1]
|
||||||
|
|
||||||
|
hook_callback(
|
||||||
|
"post_app_addaccess",
|
||||||
|
args=[app, ",".join(users_to_add), sub_permission, ""],
|
||||||
|
)
|
||||||
|
|
||||||
|
if remove and users_to_remove:
|
||||||
|
for permission in current_group_permissions:
|
||||||
|
app = permission.split(".")[0]
|
||||||
|
sub_permission = permission.split(".")[1]
|
||||||
|
|
||||||
|
hook_callback(
|
||||||
|
"post_app_removeaccess",
|
||||||
|
args=[app, ",".join(users_to_remove), sub_permission, ""],
|
||||||
|
)
|
||||||
|
|
||||||
if not from_import:
|
if not from_import:
|
||||||
if groupname != "all_users":
|
if groupname != "all_users":
|
||||||
if not new_attr_dict:
|
if not new_attr_dict:
|
||||||
|
|
|
@ -1197,7 +1197,7 @@ class AptDependenciesAppResource(AppResource):
|
||||||
f"Error while running apt resource packages_from_raw_bash snippet for '{key}' extras:"
|
f"Error while running apt resource packages_from_raw_bash snippet for '{key}' extras:"
|
||||||
)
|
)
|
||||||
logger.error(err)
|
logger.error(err)
|
||||||
values["packages"] = values.get("packages", []) + [value.strip() for value in out.split("\n")] # type: ignore
|
values["packages"] = values.get("packages", []) + [value.strip() for value in out.split("\n") if value.strip()] # type: ignore
|
||||||
|
|
||||||
if (
|
if (
|
||||||
not isinstance(values.get("repo"), str)
|
not isinstance(values.get("repo"), str)
|
||||||
|
|
Loading…
Add table
Reference in a new issue