Debian on Seagate Personal Cloud and Seagate NAS

Debian supports the Seagate Personal Cloud (1-Bay and 2-Bay) and Seagate NAS (2-Bay and 4-Bay). These NAS devices are based on a Marvell Armada 370 processor and can run Debian's armhf port.

These devices are supported as of Debian 9+, and still usable under 11 with kernel 5.10.

Supported devices

The following devices are supported by Debian:

Product name

Personal Cloud

Personal Cloud 2-Bay

Seagate NAS 2-Bay

Seagate NAS 4-Bay

Code name (board/PCB)

Cumulus

Cumulus Max

Dart 2-Bay

Dart 4-Bay

Model name (case sticker)

SRN21C

SRN22C

SRPD20

SRPD40

Material desc (product spec)

STCRxxxxxxx

STCSxxxxxxx

STCTxxxxxxx

STCUxxxxxxx

/!\ Please note that the Seagate Central (STCG) is not supported.

The Personal Cloud devices come with the Seagate NAS firmware pre-installed and there is no easy way to re-install the Seagate NAS firmware after you install Debian. We therefore suggest you create a disk image before you install Debian. This warning does not apply to the Seagate NAS (2-Bay and 4-Bay) on which the original Seagate software can be re-installed with a web interface even after you format the disk.

U-Boot access

The Seagate Personal Cloud and Seagate NAS devices allow you to connect to U-Boot, the boot loader, via the network with the use of U-Boot's network console feature. We will use this to load Debian installer and to configure the boot loader to boot Debian from disk.

There's a tool called clunc which can be used to connect to U-Boot's network console. Since clunc is currently not packaged for Debian (see the Request for Package), you have to obtain it from the Git repository and compile it yourself:

git clone http://git.softwrestling.org/lacie-nas/clunc.git
make

You can now use clunc to connect to U-Boot's network console. When the Seagate device boots, it will wait a few seconds to see if clunc is requesting a network console. If clunc is not running, your Seagate device will continue the boot process.

You have to pass an IP address to clunc in order to open a network console. We'll use 192.168.1.102 as the example IP address:

./clunc -i 192.168.1.102

When a connection is obtained, you should be able to see the U-Boot prompt:

Marvell>>

/!\ The Seagate NAS (4-Bay) has two Ethernet ports. Make sure to connect the cable to port 1.

Loss of U-Boot access

Several users have reported that they can't connect to U-Boot with clunc anymore after installing Debian (meaning they can't restore the original software or re-install Debian). Even though we investigated this issue, we couldn't figure out why this would happen to some users. Therefore, we suggest you only install Debian if you can make a serial console in case something goes wrong.

It has been suggested that the issue is caused by the uboot environment setting "ipaddr=xxx.xxx.xxx.xxx". This is the temporary IP address uboot uses for 3 seconds while waiting for a lump/clunc packet, and if none arrives, the nas continues the boot process, where the IP is then governed by the linux kernel (DHCP or static, depending on user settings). Users are advised to record the uboot IP address "ipaddr=" setting for future uboot access.

This may help: Try to start clunc in verbose mode ( ./clunc -vi 192.168.1.102 ) and wait until "waiting U-Boot..." is displayed. If nothing happens stop clunc and try again. Power up the NAS after the message is displayed.

Installing Debian

We'll use clunc to connect to the network console to load Debian installer. Debian is installed to disk. We'll also configure the Seagate device to boot Debian from disk.

Loading Debian installer

Please download the following 2 files:

You also have to load one of the following DTB (a hardware description of the device). Choose the DTB for your device:

/!\ Make sure to download and load the correct DTB for your device. If you use a wrong DTB, your device may not function correctly.

Please install a TFTP server on your host PC and provide the files you just downloaded via TFTP. (Even though the Seagate devices have USB ports, the boot loader doesn't support loading the files from a USB stick.)

Open clunc, start your Seagate device and wait for clunc to open U-Boot's network console. Now you can load the installer with the following commands:

setenv serverip 192.168.1.2
setenv ipaddr 192.168.1.102
tftpboot 0x2000000 uImage
tftpboot 0x5100000 uInitrd
tftpboot 0x5000000 armada-370-seagate-YOURDEVICE.dtb
setenv fdt_high 0xffffffff
setenv initrd_high 0xffffffff
bootm 0x2000000 0x5100000 0x5000000

/!\ Ensure you use the same IP for clunc and for the ipaddr variable.

Running Debian installer

Since the Seagate devices don't have any IO device, SSH will be used for the installation. The installer will bring up the network, start the OpenSSH server and you can then connect to the device using SSH. You have to wait a few minutes after starting the system before you can connect. When the installer is ready, the power LED will change.

You can follow the power LED for progress.

On the Seagate Personal Cloud, the LED sequence is:

On the Seagate NAS, the LED sequence is:

You can connect to the installer with SSH:

ssh installer@192.168.1.102

Ippaddr not used by the device

It seems that sometimes the device is not using the address supplied with setenv ipaddr 192.168.1.102 when a DHCP server is active in your network.

In case you can't connect to the installer use nast -m to find the ip address used by the device.

The password is "install". If you're unsure about the IP address of your device, consult your router or run a command like nast -m. It is worth mentioning that the IP address as well as the MAC address that your device had in previous steps may not be the same. Be mindful of this when looking for your device to connect to via SSH.

The installation itself should be pretty standard and you can follow the installation guide.

Note that U-Boot is only able to load files from ext2 filesystems, so arrange partitions in order to allow accessing a suitable /boot folder.

Be sure to use the latest version of uImage, uInitrd, and armada-370-seagate-*.dtb (from links above) otherwise the driver module versions that are fetched via the mirror sites can become out of sync with the installation images causing the installation to fail due to driver version incompatibilities.

After you configure passwords for your users, the installer will try to set up the clock. Some users have reported this step hangs at 0%. I haven't found the cause of this issue yet, but if you see this issue you can use a workaround: Open a second SSH connection to the installer and choose "Start shell". Then type:

ps | grep rdate

You'll see output similar to:

~ # ps | grep rdate
 4376 root      1936 S    rdate -o 123 -nvv 0.debian.pool.ntp.org

Now kill this process (kill 4376 in my example). You can now proceed with the installation.

Configuring U-Boot to boot Debian

After the installation is done, start clunc again and restart the device. Now you have to configure U-Boot to boot Debian from disk.

Load the U-Boot config file and copy&paste it line by line into the U-Boot network console. Be aware that some lines are very long. Make sure you copy them as one line.

Here we are reporting for future reference the uboot-config contents:

setenv debian_kernel_addr 0x2000000
setenv debian_initrd_addr 0x5100000
setenv debian_dtb_addr 0x5000000
setenv initrd_high 0xffffffff
setenv fdt_high 0xffffffff
setenv debian_boot_part 1
setenv debian_kernel_img /uImage
setenv debian_initrd_img /uInitrd
setenv debian_dtb_img /dtb
setenv debian_bootargs setenv bootargs ${console}
setenv debian_load_image 'ext2load ${disk_iface} ${disk_num}:${boot_part} ${kern_addr} ${debian_kernel_img} && iminfo ${debian_kernel_addr}; ext2load ${disk_iface} ${disk_num}:${boot_part} ${debian_initrd_addr} ${debian_initrd_img}; ext2load ${disk_iface} ${disk_num}:${boot_part} ${debian_dtb_addr} ${debian_dtb_img}'
setenv debian_boot 'hdd start; ide reset; setenv boot_part ${debian_boot_part}; for disk in ${disk_list}; do run disk_expand; echo Booting Debian from disk ${disk}...; run debian_load_image; run debian_bootargs; bootm ${debian_kernel_addr} ${debian_initrd_addr} ${debian_dtb_addr}; done'
setenv bootcmd run debian_boot
saveenv
run bootcmd

Also, keep attention to use the right partion number to access the /boot folder, the right directory and file names: for instance, the dtb file is named /boot/dtbs/5.10.0-13-armmp/armada-370-seagate-YOUR_DEVICE.dtb under Bullseye, and the U-boot could have problems to use symlinks.

The last command will run the boot command. It will load kernel, ramdisk and DTB before starting the kernel:

Starting kernel ...

You won't see the actual kernel messages or boot process. However, after a few minutes, you should be able to connect to Debian using SSH. Note that you need to change the .dtb environment variable every time the kernel is updated or use an hard link to render the firmware configuration (the three debian_*_img variables) not dependent on the kernel version.

Known issues

hdparm -S 0 /dev/sda
hdparm -B 255 /dev/sda

Serial console information

Sometimes accessing the serial console of these models of devices can be useful, specifically if you 'brick' them as could happen from time to time, and cannot recover via ethernet. The console is generally available as a JTAG TTL device and requires a TTL-to-RS232 converter (a simple MAX3232 based chip at the cost of few bucks) to work at 115K bps from a regular PC serial port. For instance, the Seagate 4Bay NAS has an 8 pins port available on the side of the motherboard for that. The required pins are VCC-RX-TX-GRD and the JTAG works at 3.3V. DO NOT connect RS-232 directly, you absolutely need a TTL-to-RS232 converter chip (you could cook your board if do not use a converter). See for instance here, for an example of a working console connection to a Seagate/Lacie 4Bay NAS, with visible pin in/out. Note that both Cumulus and Dart boards have distinct UART and JTAG interfaces, but the UART-TTL one is the easiest accessible only in a Seagate NAS. This is not the same on 1-bay Personal Cloud where the UART-TTL is on the opposite side, in respect with the HD connector, so you will need to dismount the whole chassis.