Odroid - HC4 how install syncloud on SSD?

Hi all

I want to buy an Odroid-HC4 and install os and syncloud on it.(SSD)

I don’ see a documentation about how install syncloud software on this drive.

I don’t want the operating system and syncloud applications to be on an SD card.

Do you have a solution ?


Right, unfortunately what we do with HC4 by default at the moment is OS on internal SD card and external 2 disk raid setup (can do only 1).
It is a bit difficult to do OS on raid disk itself but everything is possible in theory so if you feel up to it you can try.

Hi Boris,

On the model H that i bought in January 2022, the SD card is not use.

I don’t need RAID

I agree to buy you an H4 with 1TB SSD if you can configure to boot without SD card as on your old H model .


HC4 has a double disk “the toaster” design specificity for redundancy purposes if you do not need the second disk you may want to consider more powerful N device or any other x86 device you can find like Intel NUC.

Hi Boris

I started my new device on the image syncloud-odroid-hc4-23.09.img.xz download from the site .

I see that is a Debian 10.13 :fearful: end LT Support June 2024.
and actually on this version Security updates have been discontinued as of June 30th, 2022.

Do you have plan to upgrade to debian 12 yours images ?


Hi Boris,

Hello boris
Isn’t this the solution to install syncloud directly on the SSD?


I do but to make it clear apps do not use any lib from OS, all isolated and latest to some extent. OS is there only to boot kernel and start apps. What I really want is to minimize the use of OS tools even more and then move to ubuntu core or something similar to be able to upgrade OS “in-place”. If this does not happen within a year I will probably do another debian image upgrade.

This is how we install syncloud platform into a bare debian os and it does not really tell how os is booted and where root file system is mounted.

We have this workaround for root filesystem on SATA but only for old devices HC1 and 2: Odroid HC1 2 · syncloud/platform Wiki · GitHub

Hi Boris

With the HC4 you can install OS by netboot installer with PetiBoot
Look at this video

I install and give you feedback.


Hello Boris

I installed Debian version 12.2 .

I launch the install script

$ snap --version
panic: user: lookup userid 1001: invalid argument [recovered]
	panic: user: lookup userid 1001: invalid argument

TriggeredBy: ● snapd.socket
    Process: 1516 ExecStart=/usr/lib/snapd/snapd (code=exited, status=42)
   Main PID: 1516 (code=exited, status=42)


Hello Boris
After this failure with Debian 12.2.

I did an installation with Debian 11.8 .
It work for snap

+ snap --version
snap    595
snapd   595
series  16
debian  11
kernel  5.15.0-odroid-arm64

I had errors during the platform installation,

+snap install platform
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0xe4 pc=0xffff6c6c08dc]

runtime stack:
runtime.throw({0xd56bd5?, 0x400?})
	/usr/local/go/src/runtime/panic.go:992 +0x50
	/usr/local/go/src/runtime/signal_unix.go:802 +0x1e8
goroutine 1 [syscall]:
runtime.cgocall(0xb0f540, 0x40004febf8)
	/usr/local/go/src/runtime/cgocall.go:157 +0x54 fp=0x40004febc0 sp=0x40004feb80 pc=0x403ab4
os/user._Cfunc_mygetpwnam_r(0x400058e038, 0x400058a0c0, 0xffff60000dd0, 0x400, 0x400059a008)
	_cgo_gotypes.go:158 +0x3c fp=0x40004febf0 sp=0x40004febc0 pc=0x58425c
os/user.lookupUser.func1.1({0x400058e038, 0x4000056800?, 0x40004fec98?}, 0x585544?, 0x10?, 0xc7dfa0?)
	/usr/local/go/src/os/user/cgo_lookup_unix.go:69 +0xb0 fp=0x40004fec50 sp=0x40004febf0 pc=0x584900
	/usr/local/go/src/os/user/cgo_lookup_unix.go:69 +0x38 fp=0x40004fec90 sp=0x40004fec50 pc=0x584828
os/user.retryWithBuffer(0x400059c040, 0x40004fed98)
	/usr/local/go/src/os/user/cgo_lookup_unix.go:244 +0x3c fp=0x40004fece0 sp=0x40004fec90 pc=0x58578c
os/user.lookupUser({0x4000036022, 0x7})
	/usr/local/go/src/os/user/cgo_lookup_unix.go:60 +0xf4 fp=0x40004fede0 sp=0x40004fece0 pc=0x584674
os/user.Lookup({0x4000036022, 0x7})
	/usr/local/go/src/os/user/lookup.go:36 +0x90 fp=0x40004fee20 sp=0x40004fede0 pc=0x583f70
	/drone/src/osutil/user.go:335 +0x80 fp=0x40004fee60 sp=0x40004fee20 pc=0x5ec850
github.com/snapcore/snapd/client.storeAuthDataFilename({0x0, 0x0})
	/drone/src/client/login.go:97 +0x50 fp=0x40004feec0 sp=0x40004fee60 pc=0x8c84a0
	/drone/src/client/login.go:135 +0x38 fp=0x40004fef40 sp=0x40004feec0 pc=0x8c8798
github.com/snapcore/snapd/client.(*Client).setAuthorization(0x400058a090?, 0x40005a2000)
	/drone/src/client/client.go:171 +0x24 fp=0x40004feff0 sp=0x40004fef40 pc=0x8c38b4
github.com/snapcore/snapd/client.(*Client).raw(0x40002761e0, {0xf17090?, 0x40005960c0}, {0xd20007, 0x3}, {0x40004ff668?, 0x4000056800?}, 0xc70002e993?, 0x4000056800?, {0x0, ...})
	/drone/src/client/client.go:271 +0x354 fp=0x40004ff220 sp=0x40004feff0 pc=0x8c41b4
github.com/snapcore/snapd/client.(*Client).rawWithTimeout(0xee6b280?, {0xf17058?, 0x40001be028?}, {0xd20007, 0x3}, {0x40004ff668, 0xd}, 0x416d98?, 0xffff6f0f3a00?, {0x0, ...}, ...)
	/drone/src/client/client.go:306 +0xe4 fp=0x40004ff300 sp=0x40004ff220 pc=0x8c4644
github.com/snapcore/snapd/client.(*Client).do(0x40002761e0?, {0xd20007, 0x3}, {0x40004ff668, 0xd}, 0x14?, 0x1?, {0x0, 0x0}, {0xc178a0?, ...}, ...)
	/drone/src/client/client.go:402 +0x3a0 fp=0x40004ff540 sp=0x40004ff300 pc=0x8c4c30
github.com/snapcore/snapd/client.(*Client).doSyncWithOpts(0x40002761e0, {0xd20007, 0x3}, {0x40004ff668, 0xd}, 0x9370a8?, 0xffff95bf8f18?, {0x0, 0x0}, {0xc177e0?, ...}, ...)
	/drone/src/client/client.go:507 +0x9c fp=0x40004ff600 sp=0x40004ff540 pc=0x8c551c
github.com/snapcore/snapd/client.(*Client).Change(0xf11308?, {0x1414610, 0x1})
	/drone/src/client/change.go:84 +0x90 fp=0x40004ff6a0 sp=0x40004ff600 pc=0x8c2bb0
main.waitMixin.wait({{0x40002761e0?}, 0x4a?, 0x2d?}, {0x1414610, 0x1})
	/drone/src/cmd/snap/wait.go:90 +0x2c4 fp=0x40004ff970 sp=0x40004ff6a0 pc=0xb00a34
main.(*cmdInstall).installOne(0x400038c4e0, {0xffffc76148ae, 0x8}, {0x0?, 0x0}, 0x40004ffad8?)
	/drone/src/cmd/snap/cmd_snap_op.go:533 +0x234 fp=0x40004ffa50 sp=0x40004ff970 pc=0xae2924
main.(*cmdInstall).Execute(0x400038c4e0, {0xcd8680, 0x400038c4e0, 0xd22ff1})
	/drone/src/cmd/snap/cmd_snap_op.go:662 +0x434 fp=0x40004ffaf0 sp=0x40004ffa50 pc=0xae3704
github.com/jessevdk/go-flags.(*Parser).ParseArgs(0x400044eb60, {0x4000194160, 0x2, 0x2})
	/go/pkg/mod/github.com/jessevdk/go-flags@v1.5.1-0.20210607101731-3927b71304df/parser.go:335 +0x744 fp=0x40004ffc80 sp=0x40004ffaf0 pc=0x510bd4
	/drone/src/cmd/snap/main.go:535 +0x84 fp=0x40004ffd90 sp=0x40004ffc80 pc=0xaff124
	/drone/src/cmd/snap/main.go:497 +0x3ec fp=0x40004fff70 sp=0x40004ffd90 pc=0xafee8c
	/usr/local/go/src/runtime/proc.go:250 +0x258 fp=0x40004fffd0 sp=0x40004fff70 pc=0x4364f8
	/usr/local/go/src/runtime/asm_arm64.s:1270 +0x4 fp=0x40004fffd0 sp=0x40004fffd0 pc=0x464ba4

goroutine 22 [IO wait]:
internal/poll.runtime_pollWait(0xffff6c726f28, 0x72)
	/usr/local/go/src/runtime/netpoll.go:302 +0xa4
internal/poll.(*pollDesc).wait(0x4000506700?, 0x400051a000?, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x2c
internal/poll.(*FD).Read(0x4000506700, {0x400051a000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x1ec
net.(*netFD).Read(0x4000506700, {0x400051a000?, 0x4000061c58?, 0x405c50?})
	/usr/local/go/src/net/fd_posix.go:55 +0x2c
net.(*conn).Read(0x40001a8d20, {0x400051a000?, 0x0?, 0x40001a8d18?})
	/usr/local/go/src/net/net.go:183 +0x38
net/http.(*persistConn).Read(0x4000455440, {0x400051a000?, 0x405d00?, 0x400009e060?})
	/usr/local/go/src/net/http/transport.go:1929 +0x54
	/usr/local/go/src/bufio/bufio.go:106 +0x100
bufio.(*Reader).Peek(0x400033d080, 0x1)
	/usr/local/go/src/bufio/bufio.go:144 +0x6c
	/usr/local/go/src/net/http/transport.go:2093 +0x160
created by net/http.(*Transport).dialConn
	/usr/local/go/src/net/http/transport.go:1750 +0x1214

goroutine 23 [select]:
	/usr/local/go/src/net/http/transport.go:2392 +0xa4
created by net/http.(*Transport).dialConn
	/usr/local/go/src/net/http/transport.go:1751 +0x1260

goroutine 34 [syscall]:
	/usr/local/go/src/runtime/sigqueue.go:151 +0x34
	/usr/local/go/src/os/signal/signal_unix.go:23 +0x20
created by os/signal.Notify.func1.1
	/usr/local/go/src/os/signal/signal.go:151 +0x30
goroutine 35 [chan receive]:
	/drone/src/cmd/snap/wait.go:63 +0x4c
created by main.waitMixin.wait
	/drone/src/cmd/snap/wait.go:62 +0x150
+ echo retry
+ sleep 10
+ snap install platform
error: snap "platform" has "install-snap" change in progress
+ echo retry
+ sleep 10
+ snap install platform
snap "platform" is already installed, see 'snap help refresh'

Now snapd is installed as well as the platform application.

I can load the activation page

I didn’t go any further because I don’t have suitable Internet access.


Hello @boris

I tested bitwarden the service is down after the restore.
syncthing (1.26) :wink: i but I stopped because of a firewall configuration problem.
users, pas de backup :frowning:
gogs :frowning: problem with the authentification
PhotoPrism installation failed
NextCloud :+1: now i must transfert the data and restore the DB
Calibre :+1: same thing :wink:


Sorry, we do not really have resources to support syncloud platform install on custom distros, we make it open source so people have an option to make it work having the right experience.