mirror of
https://github.com/mail-in-a-box/mailinabox.git
synced 2026-03-12 17:07:23 +01:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7646095b94 | ||
|
|
faf23f150c | ||
|
|
8e4e9add78 | ||
|
|
fa8c7ddef5 | ||
|
|
6d6ce25e03 | ||
|
|
371f5bc1b2 | ||
|
|
0314554207 | ||
|
|
46d55f7866 | ||
|
|
2bbc317873 | ||
|
|
28f929dc13 | ||
|
|
e419b62034 | ||
|
|
a966913963 | ||
|
|
08defb12be | ||
|
|
7be687e601 | ||
|
|
62efe985f1 | ||
|
|
df44056bae | ||
|
|
3148c621d2 | ||
|
|
81866de229 | ||
|
|
674ce92e92 | ||
|
|
c034b0f789 |
29
CHANGELOG.md
29
CHANGELOG.md
@@ -1,6 +1,35 @@
|
|||||||
CHANGELOG
|
CHANGELOG
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
Version 67 (December 22, 2023)
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
* Guard against a newly published vulnerability called SMTP Smuggling. See https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/.
|
||||||
|
|
||||||
|
Version 66 (December 17, 2023)
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
* Some users reported an error installing Mail-in-a-Box related to the virtualenv command. This is hopefully fixed.
|
||||||
|
* Roundcube is updated to 1.6.5 fixing a security vulnerability.
|
||||||
|
* For Mail-in-a-Box developers, a new setup variable is added to pull the source code from a different repository.
|
||||||
|
|
||||||
|
Version 65 (October 27, 2023)
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
* Roundcube updated to 1.6.4 fixing a security vulnerability.
|
||||||
|
* zpush.sh updated to version 2.7.1.
|
||||||
|
* Fixed a typo in the control panel.
|
||||||
|
|
||||||
|
Version 64 (September 2, 2023)
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
* Fixed broken installation when upgrading from Mail-in-a-Box version 56 (Nextcloud 22) and earlier because of an upstream packaging issue.
|
||||||
|
* Fixed backups to work with the latest duplicity package which was not backwards compatible.
|
||||||
|
* Fixed setting B2 as a backup target with a slash in the application key.
|
||||||
|
* Turned off OpenDMARC diagnostic reports sent in response to incoming mail.
|
||||||
|
* Fixed some crashes when using an unrelased version of Mail-in-a-Box.
|
||||||
|
* Added z-push administration scripts.
|
||||||
|
|
||||||
Version 63 (July 27, 2023)
|
Version 63 (July 27, 2023)
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ Clone this repository and checkout the tag corresponding to the most recent rele
|
|||||||
|
|
||||||
$ git clone https://github.com/mail-in-a-box/mailinabox
|
$ git clone https://github.com/mail-in-a-box/mailinabox
|
||||||
$ cd mailinabox
|
$ cd mailinabox
|
||||||
$ git checkout v63
|
$ git checkout v67
|
||||||
|
|
||||||
Begin the installation.
|
Begin the installation.
|
||||||
|
|
||||||
|
|||||||
@@ -57,10 +57,11 @@ def backup_status(env):
|
|||||||
"/usr/bin/duplicity",
|
"/usr/bin/duplicity",
|
||||||
"collection-status",
|
"collection-status",
|
||||||
"--archive-dir", backup_cache_dir,
|
"--archive-dir", backup_cache_dir,
|
||||||
"--gpg-options", "--cipher-algo=AES256",
|
"--gpg-options", "'--cipher-algo=AES256'",
|
||||||
"--log-fd", "1",
|
"--log-fd", "1",
|
||||||
get_duplicity_target_url(config),
|
] + get_duplicity_additional_args(env) + [
|
||||||
] + get_duplicity_additional_args(env),
|
get_duplicity_target_url(config)
|
||||||
|
],
|
||||||
get_duplicity_env_vars(env),
|
get_duplicity_env_vars(env),
|
||||||
trap=True)
|
trap=True)
|
||||||
if code != 0:
|
if code != 0:
|
||||||
@@ -227,8 +228,8 @@ def get_duplicity_additional_args(env):
|
|||||||
port = 22
|
port = 22
|
||||||
|
|
||||||
return [
|
return [
|
||||||
f"--ssh-options= -i /root/.ssh/id_rsa_miab -p {port}",
|
f"--ssh-options='-i /root/.ssh/id_rsa_miab -p {port}'",
|
||||||
f"--rsync-options= -e \"/usr/bin/ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p {port} -i /root/.ssh/id_rsa_miab\"",
|
f"--rsync-options='-e \"/usr/bin/ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p {port} -i /root/.ssh/id_rsa_miab\"'",
|
||||||
]
|
]
|
||||||
elif get_target_type(config) == 's3':
|
elif get_target_type(config) == 's3':
|
||||||
# See note about hostname in get_duplicity_target_url.
|
# See note about hostname in get_duplicity_target_url.
|
||||||
@@ -321,11 +322,12 @@ def perform_backup(full_backup):
|
|||||||
"--archive-dir", backup_cache_dir,
|
"--archive-dir", backup_cache_dir,
|
||||||
"--exclude", backup_root,
|
"--exclude", backup_root,
|
||||||
"--volsize", "250",
|
"--volsize", "250",
|
||||||
"--gpg-options", "--cipher-algo=AES256",
|
"--gpg-options", "'--cipher-algo=AES256'",
|
||||||
|
"--allow-source-mismatch"
|
||||||
|
] + get_duplicity_additional_args(env) + [
|
||||||
env["STORAGE_ROOT"],
|
env["STORAGE_ROOT"],
|
||||||
get_duplicity_target_url(config),
|
get_duplicity_target_url(config),
|
||||||
"--allow-source-mismatch"
|
],
|
||||||
] + get_duplicity_additional_args(env),
|
|
||||||
get_duplicity_env_vars(env))
|
get_duplicity_env_vars(env))
|
||||||
finally:
|
finally:
|
||||||
# Start services again.
|
# Start services again.
|
||||||
@@ -343,8 +345,9 @@ def perform_backup(full_backup):
|
|||||||
"--verbosity", "error",
|
"--verbosity", "error",
|
||||||
"--archive-dir", backup_cache_dir,
|
"--archive-dir", backup_cache_dir,
|
||||||
"--force",
|
"--force",
|
||||||
|
] + get_duplicity_additional_args(env) + [
|
||||||
get_duplicity_target_url(config)
|
get_duplicity_target_url(config)
|
||||||
] + get_duplicity_additional_args(env),
|
],
|
||||||
get_duplicity_env_vars(env))
|
get_duplicity_env_vars(env))
|
||||||
|
|
||||||
# From duplicity's manual:
|
# From duplicity's manual:
|
||||||
@@ -358,8 +361,9 @@ def perform_backup(full_backup):
|
|||||||
"--verbosity", "error",
|
"--verbosity", "error",
|
||||||
"--archive-dir", backup_cache_dir,
|
"--archive-dir", backup_cache_dir,
|
||||||
"--force",
|
"--force",
|
||||||
|
] + get_duplicity_additional_args(env) + [
|
||||||
get_duplicity_target_url(config)
|
get_duplicity_target_url(config)
|
||||||
] + get_duplicity_additional_args(env),
|
],
|
||||||
get_duplicity_env_vars(env))
|
get_duplicity_env_vars(env))
|
||||||
|
|
||||||
# Change ownership of backups to the user-data user, so that the after-bcakup
|
# Change ownership of backups to the user-data user, so that the after-bcakup
|
||||||
@@ -396,9 +400,10 @@ def run_duplicity_verification():
|
|||||||
"--compare-data",
|
"--compare-data",
|
||||||
"--archive-dir", backup_cache_dir,
|
"--archive-dir", backup_cache_dir,
|
||||||
"--exclude", backup_root,
|
"--exclude", backup_root,
|
||||||
|
] + get_duplicity_additional_args(env) + [
|
||||||
get_duplicity_target_url(config),
|
get_duplicity_target_url(config),
|
||||||
env["STORAGE_ROOT"],
|
env["STORAGE_ROOT"],
|
||||||
] + get_duplicity_additional_args(env), get_duplicity_env_vars(env))
|
], get_duplicity_env_vars(env))
|
||||||
|
|
||||||
def run_duplicity_restore(args):
|
def run_duplicity_restore(args):
|
||||||
env = load_environment()
|
env = load_environment()
|
||||||
@@ -408,10 +413,24 @@ def run_duplicity_restore(args):
|
|||||||
"/usr/bin/duplicity",
|
"/usr/bin/duplicity",
|
||||||
"restore",
|
"restore",
|
||||||
"--archive-dir", backup_cache_dir,
|
"--archive-dir", backup_cache_dir,
|
||||||
get_duplicity_target_url(config),
|
] + get_duplicity_additional_args(env) + [
|
||||||
] + get_duplicity_additional_args(env) + args,
|
get_duplicity_target_url(config)
|
||||||
|
] + args,
|
||||||
get_duplicity_env_vars(env))
|
get_duplicity_env_vars(env))
|
||||||
|
|
||||||
|
def print_duplicity_command():
|
||||||
|
import shlex
|
||||||
|
env = load_environment()
|
||||||
|
config = get_backup_config(env)
|
||||||
|
backup_cache_dir = os.path.join(env["STORAGE_ROOT"], 'backup', 'cache')
|
||||||
|
for k, v in get_duplicity_env_vars(env).items():
|
||||||
|
print(f"export {k}={shlex.quote(v)}")
|
||||||
|
print("duplicity", "{command}", shlex.join([
|
||||||
|
"--archive-dir", backup_cache_dir,
|
||||||
|
] + get_duplicity_additional_args(env) + [
|
||||||
|
get_duplicity_target_url(config)
|
||||||
|
]))
|
||||||
|
|
||||||
def list_target_files(config):
|
def list_target_files(config):
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
try:
|
try:
|
||||||
@@ -509,7 +528,7 @@ def list_target_files(config):
|
|||||||
|
|
||||||
# Extract information from target
|
# Extract information from target
|
||||||
b2_application_keyid = target.netloc[:target.netloc.index(':')]
|
b2_application_keyid = target.netloc[:target.netloc.index(':')]
|
||||||
b2_application_key = target.netloc[target.netloc.index(':')+1:target.netloc.index('@')]
|
b2_application_key = urllib.parse.unquote(target.netloc[target.netloc.index(':')+1:target.netloc.index('@')])
|
||||||
b2_bucket = target.netloc[target.netloc.index('@')+1:]
|
b2_bucket = target.netloc[target.netloc.index('@')+1:]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -618,6 +637,9 @@ if __name__ == "__main__":
|
|||||||
# to duplicity. The restore path should be specified.
|
# to duplicity. The restore path should be specified.
|
||||||
run_duplicity_restore(sys.argv[2:])
|
run_duplicity_restore(sys.argv[2:])
|
||||||
|
|
||||||
|
elif sys.argv[-1] == "--duplicity-command":
|
||||||
|
print_duplicity_command()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Perform a backup. Add --full to force a full backup rather than
|
# Perform a backup. Add --full to force a full backup rather than
|
||||||
# possibly performing an incremental backup.
|
# possibly performing an incremental backup.
|
||||||
|
|||||||
@@ -912,11 +912,11 @@ def list_apt_updates(apt_update=True):
|
|||||||
return pkgs
|
return pkgs
|
||||||
|
|
||||||
def what_version_is_this(env):
|
def what_version_is_this(env):
|
||||||
# This function runs `git describe --abbrev=0` on the Mail-in-a-Box installation directory.
|
# This function runs `git describe --always --abbrev=0` on the Mail-in-a-Box installation directory.
|
||||||
# Git may not be installed and Mail-in-a-Box may not have been cloned from github,
|
# Git may not be installed and Mail-in-a-Box may not have been cloned from github,
|
||||||
# so this function may raise all sorts of exceptions.
|
# so this function may raise all sorts of exceptions.
|
||||||
miab_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
miab_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
tag = shell("check_output", ["/usr/bin/git", "describe", "--abbrev=0"], env={"GIT_DIR": os.path.join(miab_dir, '.git')}).strip()
|
tag = shell("check_output", ["/usr/bin/git", "describe", "--always", "--abbrev=0"], env={"GIT_DIR": os.path.join(miab_dir, '.git')}).strip()
|
||||||
return tag
|
return tag
|
||||||
|
|
||||||
def get_latest_miab_version():
|
def get_latest_miab_version():
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<h2>Backup Status</h2>
|
<h2>Backup Status</h2>
|
||||||
|
|
||||||
<p>The box makes an incremental backup each night. You can store the backup on any Amazone Web Services S3-compatible service, or other options.</p>
|
<p>The box makes an incremental backup each night. You can store the backup on any Amazon Web Services S3-compatible service, or other options.</p>
|
||||||
|
|
||||||
<h3>Configuration</h3>
|
<h3>Configuration</h3>
|
||||||
|
|
||||||
@@ -291,7 +291,7 @@ function show_custom_backup() {
|
|||||||
var b2_applicationkey = targetPath.split(':')[1].split('@')[0];
|
var b2_applicationkey = targetPath.split(':')[1].split('@')[0];
|
||||||
var b2_bucket = targetPath.split('@')[1];
|
var b2_bucket = targetPath.split('@')[1];
|
||||||
$("#backup-target-b2-user").val(b2_application_keyid);
|
$("#backup-target-b2-user").val(b2_application_keyid);
|
||||||
$("#backup-target-b2-pass").val(b2_applicationkey);
|
$("#backup-target-b2-pass").val(decodeURIComponent(b2_applicationkey));
|
||||||
$("#backup-target-b2-bucket").val(b2_bucket);
|
$("#backup-target-b2-bucket").val(b2_bucket);
|
||||||
}
|
}
|
||||||
toggle_form()
|
toggle_form()
|
||||||
@@ -316,7 +316,7 @@ function set_custom_backup() {
|
|||||||
+ "/" + $("#backup-target-rsync-path").val();
|
+ "/" + $("#backup-target-rsync-path").val();
|
||||||
target_user = '';
|
target_user = '';
|
||||||
} else if (target_type == "b2") {
|
} else if (target_type == "b2") {
|
||||||
target = 'b2://' + $('#backup-target-b2-user').val() + ':' + $('#backup-target-b2-pass').val()
|
target = 'b2://' + $('#backup-target-b2-user').val() + ':' + encodeURIComponent($('#backup-target-b2-pass').val())
|
||||||
+ '@' + $('#backup-target-b2-bucket').val()
|
+ '@' + $('#backup-target-b2-bucket').val()
|
||||||
target_user = '';
|
target_user = '';
|
||||||
target_pass = '';
|
target_pass = '';
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ if [ -z "$TAG" ]; then
|
|||||||
if [ "$UBUNTU_VERSION" == "Ubuntu 22.04 LTS" ]; then
|
if [ "$UBUNTU_VERSION" == "Ubuntu 22.04 LTS" ]; then
|
||||||
# This machine is running Ubuntu 22.04, which is supported by
|
# This machine is running Ubuntu 22.04, which is supported by
|
||||||
# Mail-in-a-Box versions 60 and later.
|
# Mail-in-a-Box versions 60 and later.
|
||||||
TAG=v63
|
TAG=v67
|
||||||
elif [ "$UBUNTU_VERSION" == "Ubuntu 18.04 LTS" ]; then
|
elif [ "$UBUNTU_VERSION" == "Ubuntu 18.04 LTS" ]; then
|
||||||
# This machine is running Ubuntu 18.04, which is supported by
|
# This machine is running Ubuntu 18.04, which is supported by
|
||||||
# Mail-in-a-Box versions 0.40 through 5x.
|
# Mail-in-a-Box versions 0.40 through 5x.
|
||||||
@@ -59,10 +59,14 @@ if [ ! -d $HOME/mailinabox ]; then
|
|||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$SOURCE" == "" ]; then
|
||||||
|
SOURCE=https://github.com/mail-in-a-box/mailinabox
|
||||||
|
fi
|
||||||
|
|
||||||
echo Downloading Mail-in-a-Box $TAG. . .
|
echo Downloading Mail-in-a-Box $TAG. . .
|
||||||
git clone \
|
git clone \
|
||||||
-b $TAG --depth 1 \
|
-b $TAG --depth 1 \
|
||||||
https://github.com/mail-in-a-box/mailinabox \
|
$SOURCE \
|
||||||
$HOME/mailinabox \
|
$HOME/mailinabox \
|
||||||
< /dev/null 2> /dev/null
|
< /dev/null 2> /dev/null
|
||||||
|
|
||||||
@@ -73,7 +77,7 @@ fi
|
|||||||
cd $HOME/mailinabox
|
cd $HOME/mailinabox
|
||||||
|
|
||||||
# Update it.
|
# Update it.
|
||||||
if [ "$TAG" != $(git describe) ]; then
|
if [ "$TAG" != $(git describe --always) ]; then
|
||||||
echo Updating Mail-in-a-Box to $TAG . . .
|
echo Updating Mail-in-a-Box to $TAG . . .
|
||||||
git fetch --depth 1 --force --prune origin tag $TAG
|
git fetch --depth 1 --force --prune origin tag $TAG
|
||||||
if ! git checkout -q $TAG; then
|
if ! git checkout -q $TAG; then
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ chmod go-rwx $STORAGE_ROOT/mail/dkim
|
|||||||
tools/editconf.py /etc/opendmarc.conf -s \
|
tools/editconf.py /etc/opendmarc.conf -s \
|
||||||
"Syslog=true" \
|
"Syslog=true" \
|
||||||
"Socket=inet:8893@[127.0.0.1]" \
|
"Socket=inet:8893@[127.0.0.1]" \
|
||||||
"FailureReports=true"
|
"FailureReports=false"
|
||||||
|
|
||||||
# SPFIgnoreResults causes the filter to ignore any SPF results in the header
|
# SPFIgnoreResults causes the filter to ignore any SPF results in the header
|
||||||
# of the message. This is useful if you want the filter to perfrom SPF checks
|
# of the message. This is useful if you want the filter to perfrom SPF checks
|
||||||
@@ -82,11 +82,11 @@ tools/editconf.py /etc/opendmarc.conf -s \
|
|||||||
tools/editconf.py /etc/opendmarc.conf -s \
|
tools/editconf.py /etc/opendmarc.conf -s \
|
||||||
"SPFSelfValidate=true"
|
"SPFSelfValidate=true"
|
||||||
|
|
||||||
# Enables generation of failure reports for sending domains that publish a
|
# Disables generation of failure reports for sending domains that publish a
|
||||||
# "none" policy.
|
# "none" policy.
|
||||||
|
|
||||||
tools/editconf.py /etc/opendmarc.conf -s \
|
tools/editconf.py /etc/opendmarc.conf -s \
|
||||||
"FailureReportsOnNone=true"
|
"FailureReportsOnNone=false"
|
||||||
|
|
||||||
# AlwaysAddARHeader Adds an "Authentication-Results:" header field even to
|
# AlwaysAddARHeader Adds an "Authentication-Results:" header field even to
|
||||||
# unsigned messages from domains with no "signs all" policy. The reported DKIM
|
# unsigned messages from domains with no "signs all" policy. The reported DKIM
|
||||||
|
|||||||
@@ -69,6 +69,11 @@ tools/editconf.py /etc/postfix/main.cf \
|
|||||||
maximal_queue_lifetime=2d \
|
maximal_queue_lifetime=2d \
|
||||||
bounce_queue_lifetime=1d
|
bounce_queue_lifetime=1d
|
||||||
|
|
||||||
|
# Guard against SMTP smuggling
|
||||||
|
# This short-term workaround is recommended at https://www.postfix.org/smtp-smuggling.html
|
||||||
|
tools/editconf.py /etc/postfix/main.cf \
|
||||||
|
smtpd_data_restrictions=reject_unauth_pipelining
|
||||||
|
|
||||||
# ### Outgoing Mail
|
# ### Outgoing Mail
|
||||||
|
|
||||||
# Enable the 'submission' ports 465 and 587 and tweak their settings.
|
# Enable the 'submission' ports 465 and 587 and tweak their settings.
|
||||||
|
|||||||
@@ -27,6 +27,12 @@ inst_dir=/usr/local/lib/mailinabox
|
|||||||
mkdir -p $inst_dir
|
mkdir -p $inst_dir
|
||||||
venv=$inst_dir/env
|
venv=$inst_dir/env
|
||||||
if [ ! -d $venv ]; then
|
if [ ! -d $venv ]; then
|
||||||
|
# A bug specific to Ubuntu 22.04 and Python 3.10 requires
|
||||||
|
# forcing a virtualenv directory layout option (see #2335
|
||||||
|
# and https://github.com/pypa/virtualenv/pull/2415). In
|
||||||
|
# our issue, reportedly installing python3-distutils didn't
|
||||||
|
# fix the problem.)
|
||||||
|
export DEB_PYTHON_INSTALL_LAYOUT='deb'
|
||||||
hide_output virtualenv -ppython3 $venv
|
hide_output virtualenv -ppython3 $venv
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ if [ ! -d /usr/local/lib/owncloud/ ] || [[ ! ${CURRENT_NEXTCLOUD_VER} =~ ^$nextc
|
|||||||
CURRENT_NEXTCLOUD_VER="22.2.6"
|
CURRENT_NEXTCLOUD_VER="22.2.6"
|
||||||
fi
|
fi
|
||||||
if [[ ${CURRENT_NEXTCLOUD_VER} =~ ^22 ]]; then
|
if [[ ${CURRENT_NEXTCLOUD_VER} =~ ^22 ]]; then
|
||||||
InstallNextcloud 23.0.12 7aa5d61632c1ccf4ca3ff00fb6b295d318c05599 4.1.0 697f6b4a664e928d72414ea2731cb2c9d1dc3077 3.2.2 ce4030ab57f523f33d5396c6a81396d440756f5f 3.0.0 22cabc88b6fc9c26dad3b46be1a652979c9fcf15
|
InstallNextcloud 23.0.12 d138641b8e7aabebe69bb3ec7c79a714d122f729 4.1.0 697f6b4a664e928d72414ea2731cb2c9d1dc3077 3.2.2 ce4030ab57f523f33d5396c6a81396d440756f5f 3.0.0 0df781b261f55bbde73d8c92da3f99397000972f
|
||||||
CURRENT_NEXTCLOUD_VER="23.0.12"
|
CURRENT_NEXTCLOUD_VER="23.0.12"
|
||||||
fi
|
fi
|
||||||
if [[ ${CURRENT_NEXTCLOUD_VER} =~ ^23 ]]; then
|
if [[ ${CURRENT_NEXTCLOUD_VER} =~ ^23 ]]; then
|
||||||
|
|||||||
@@ -207,6 +207,6 @@ if [ "$PRIVATE_IPV6" != "$PUBLIC_IPV6" ]; then
|
|||||||
echo "Private IPv6 Address: $PRIVATE_IPV6"
|
echo "Private IPv6 Address: $PRIVATE_IPV6"
|
||||||
fi
|
fi
|
||||||
if [ -f /usr/bin/git ] && [ -d .git ]; then
|
if [ -f /usr/bin/git ] && [ -d .git ]; then
|
||||||
echo "Mail-in-a-Box Version: " $(git describe)
|
echo "Mail-in-a-Box Version: " $(git describe --always)
|
||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
|
|||||||
@@ -36,9 +36,9 @@ apt_install \
|
|||||||
# https://github.com/mstilkerich/rcmcarddav/releases
|
# https://github.com/mstilkerich/rcmcarddav/releases
|
||||||
# The easiest way to get the package hashes is to run this script and get the hash from
|
# The easiest way to get the package hashes is to run this script and get the hash from
|
||||||
# the error message.
|
# the error message.
|
||||||
VERSION=1.6.1
|
VERSION=1.6.5
|
||||||
HASH=0e1c771ab83ea03bde1fd0be6ab5d09e60b4f293
|
HASH=326fcc206cddc00355e98d1e40fd0bcd9baec69f
|
||||||
PERSISTENT_LOGIN_VERSION=bde7b6840c7d91de627ea14e81cf4133cbb3c07a # version 5.2
|
PERSISTENT_LOGIN_VERSION=bde7b6840c7d91de627ea14e81cf4133cbb3c07a # version 5.3
|
||||||
HTML5_NOTIFIER_VERSION=68d9ca194212e15b3c7225eb6085dbcf02fd13d7 # version 0.6.4+
|
HTML5_NOTIFIER_VERSION=68d9ca194212e15b3c7225eb6085dbcf02fd13d7 # version 0.6.4+
|
||||||
CARDDAV_VERSION=4.4.3
|
CARDDAV_VERSION=4.4.3
|
||||||
CARDDAV_HASH=74f8ba7aee33e78beb9de07f7f44b81f6071b644
|
CARDDAV_HASH=74f8ba7aee33e78beb9de07f7f44b81f6071b644
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ apt_install \
|
|||||||
phpenmod -v $PHP_VER imap
|
phpenmod -v $PHP_VER imap
|
||||||
|
|
||||||
# Copy Z-Push into place.
|
# Copy Z-Push into place.
|
||||||
VERSION=2.7.0
|
VERSION=2.7.1
|
||||||
TARGETHASH=a520bbdc1d637c5aac379611053457edd54f2bf0
|
TARGETHASH=f15c566b1ad50de24f3f08f505f0c3d8155c2d0d
|
||||||
needs_update=0 #NODOC
|
needs_update=0 #NODOC
|
||||||
if [ ! -f /usr/local/lib/z-push/version ]; then
|
if [ ! -f /usr/local/lib/z-push/version ]; then
|
||||||
needs_update=1 #NODOC
|
needs_update=1 #NODOC
|
||||||
@@ -41,7 +41,15 @@ if [ $needs_update == 1 ]; then
|
|||||||
mv /tmp/z-push/*/src /usr/local/lib/z-push
|
mv /tmp/z-push/*/src /usr/local/lib/z-push
|
||||||
rm -rf /tmp/z-push.zip /tmp/z-push
|
rm -rf /tmp/z-push.zip /tmp/z-push
|
||||||
|
|
||||||
|
# Create admin and top scripts with PHP_VER
|
||||||
rm -f /usr/sbin/z-push-{admin,top}
|
rm -f /usr/sbin/z-push-{admin,top}
|
||||||
|
echo '#!/bin/bash' > /usr/sbin/z-push-admin
|
||||||
|
echo php$PHP_VER /usr/local/lib/z-push/z-push-admin.php '"$@"' >> /usr/sbin/z-push-admin
|
||||||
|
chmod 755 /usr/sbin/z-push-admin
|
||||||
|
echo '#!/bin/bash' > /usr/sbin/z-push-top
|
||||||
|
echo php$PHP_VER /usr/local/lib/z-push/z-push-top.php '"$@"' >> /usr/sbin/z-push-top
|
||||||
|
chmod 755 /usr/sbin/z-push-top
|
||||||
|
|
||||||
echo $VERSION > /usr/local/lib/z-push/version
|
echo $VERSION > /usr/local/lib/z-push/version
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user