Client 2.4.11 wont start on Oracle-Linux-7.9-aarch64 due to libc: failed to make WriteProtected nonwritable in initialize error

When i tried to install Urbackup Client 2.4.11 on Oracle-Linux-7.9-aarch64 i have run in this issue.

Installer script logs this in the console:

Verifying archive integrity... All good.
Uncompressing UrBackup Client Installer for Linux  100%
Installation of UrBackup Client 2.4.11 to /usr/local ... Proceed ? [Y/n]
y
Uncompressing install data...
Assuming RedHat (derivative) system
Detected systemd
Detected architecture aarch64-linux-android
Error running executable on this system (aarch64). Stopping installation.

And urbackupclientctl and urbackupclientbackend both abort when i run them with this message:

failed to make WriteProtected nonwritable in initialize
libc: failed to make WriteProtected nonwritable in initialize
Aborted (core dumped)

Is Urbackup client supported on this Linux distribution? If so is anyone able to tell me what might be wrong? I have saved core dumps and will send them to bugreports@urbackup.org as requested in faq.

Looks like a mprotect call fails… Could you run it with strace -f urbackupclientctl to see the error?

Of course. Here is strace output:

execve("/usr/local/bin/urbackupclientctl", ["urbackupclientctl"], 0xffffdeca4cf8 /* 25 vars */) = 0
getpid()                                = 29841
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffcca800000
set_tid_address(0x5267e0)               = 29841
faccessat(AT_FDCWD, "/dev/urandom", R_OK) = 0
futex(0x523818, FUTEX_WAKE_PRIVATE, 2147483647) = 0
getrandom("\x4a\x22\x78\xed\x28\xd3\x70\xd6\x16\x75\x89\xf0\x19\x3a\x53\x78\x9e\x5b\xed\xb5\x06\x10\x32\xf4\xcf\x21\x72\x17\xa4\xc8\x0f\xaf"..., 40, GRND_NONBLOCK) = 40
mmap(NULL, 1104, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffcca7f0000
prctl(PR_SET_VMA, 0, 0xfffcca7f0000, 0x450, 0x4e3406) = -1 EINVAL (Invalid argument)
sched_getscheduler(0)                   = 0 (SCHED_OTHER)
mmap(NULL, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffcca7e0000
mprotect(0xfffcca7e0000, 4096, PROT_NONE) = 0
sigaltstack({ss_sp=0xfffcca7e1000, ss_flags=0, ss_size=32768}, NULL) = 0
prctl(PR_SET_VMA, 0, 0xfffcca7e1000, 0x8000, 0x4e461d) = -1 EINVAL (Invalid argument)
mmap(NULL, 16777216, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffcc97e0000
mprotect(0xfffcca7b4000, 8192, PROT_READ|PROT_WRITE) = -1 EINVAL (Invalid argument)
mprotect(0x524000, 4096, PROT_READ)     = -1 EINVAL (Invalid argument)
writev(2, [{iov_base="failed to make WriteProtected no"..., iov_len=55}, {iov_base="\n", iov_len=1}], 2failed to make WriteProtected nonwritable in initialize
) = 56
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/socket/logdw"}, 110) = -1 ENOENT (No such file or directory)
close(3)                                = 0
writev(2, [{iov_base="libc", iov_len=4}, {iov_base=": ", iov_len=2}, {iov_base="failed to make WriteProtected no"..., iov_len=55}, {iov_base="\n", iov_len=1}], 4libc: failed to make WriteProtected nonwritable in initialize
) = 62
mmap(NULL, 80, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffcc97d0000
prctl(PR_SET_VMA, 0, 0xfffcc97d0000, 0x50, 0x4dec43) = -1 EINVAL (Invalid argument)
rt_sigprocmask(SIG_SETMASK, ~[ABRT RT_1 RT_2 RT_3 RT_4 RT_5], NULL, 8) = 0
getpid()                                = 29841
gettid()                                = 29841
getuid()                                = 1000
rt_tgsigqueueinfo(29841, 29841, SIGABRT, {}) = 0
--- SIGABRT {si_signo=SIGABRT, si_code=SI_QUEUE, si_pid=29841, si_uid=1000} ---
+++ killed by SIGABRT (core dumped) +++

Maybe 64k pages are enabled? On Debian I can check like this:

grep CONFIG_ARM64_64K_PAGES /boot/config-5.10.47
grep CONFIG_ARM64_16K_PAGES /boot/config-5.10.47

Indeed they are. Looking in /boot/config-… (both of them)

# CONFIG_ARM64_16K_PAGES is not set
CONFIG_ARM64_64K_PAGES=y

Is there something i can do to make urbackup client work in this case?

Not the binary client… it seems to need 4k pages and there is no easy way to fix (problem is in Android bionic). Compile it?

2 Likes

Thank you kindly for taking time with me. I just got it working. I started trying to compile it yesterday. I feared compiling it cause i don’t know repo names on this distro. Turns out it was not that bad. Only had to compile crypto++ manually to get it compiling…

And while i severely dislike fact that i had to put this line in systemd service it works.
ExecStart=/usr/bin/scl enable oracle-armtoolset-8 "/usr/local/sbin/urbackupclientbackend --no-consoletime"
But that is just my personal opinions about scl.

Thanks again for taking a look :heart:

Just in case anyone else finds this thread and wants to install UrBackup on their Oracle Linux 8 machine, I was able to do it without compiling anything other than the client itself:

dnf install cryptopp-devel zlib-devel wxBase3-devel wxGTK3-devel
dnf groupinstall "Development Tools"

I then followed the rest of the compilation instructions at UrBackup - Install client on Debian or Ubuntu from sources