Synology Basic Authentication in subfolders with nginx on Synology

I am using nginx as default webserver on my Synology. Here is how to configure a login/password prompt on a subfolder of the WebStation.

Click to Read More

First, open a SSH console on your Synology and enter the root (See here)

Notice that you cannot change the config file of nginx (/etc/nginx/nginx.conf). Even if you do so, your changes will be removed automatically. But in the config file of nginx, for the server listening on the port of your WebStation (port 80 by default), you can see it is loading extra config named www.*.conf under the folder /usr/syno/share/nginx/conf.d/

include /usr/syno/share/nginx/conf.d/www.*.conf;

So, go to that folder : cd /usr/syno/share/nginx/conf.d

There, create a password file with your login and password

Type : htpasswd -c -b .htpasswd YourLogin YourPassword

the parameter -c is to create the file. Only use it if the file does not yet exist otherwise you will clean its current content!!

Look at the content if the file: cat .htpasswd

It should be similar to this: 

YourLogin:$apr3$hUZ87.Mo$WUHtZHjtPWbBCD4jezDh72

Now, create and edit a file name like : www.protected.conf (Ex.: using vi)

Assuming that you want to protect a subfolder You/Sub/Folder existing in the root of your WebStation, you should theoretically this into www.protected.conf :

location /Your/Sub/Folder {
auth_basic “Any Prompt Message You Want”;
auth_basic_user_file /usr/syno/share/nginx/conf.d/.htpasswd;
}

Next, you have to restart nginx with the command : nginx -s reload

Or even better to be 100% sure: synoservicecfg –restart nginx

 

But for some reason, this is not working on Synology (at least on mine ?!). It seems that the block location does not work without a modifier like = or ~

It searched for hours why it was not working, without answer. 

For example, I tested first that the following webpage was working fine on my NAS: http://MyNas/SubFolder/index.php

Next, I edited the www.protected.conf with the following block before restarting nginx, deleting the cache ofh my browser and restarting my browser (THIS IS MANDATORY each time one changes the location):

location /SubFolder/index.php {
return 301 https://www.google.be/search;
}

But opening http://MyNas/SubFolder/index.php didn’t return me to Google.

Next, I tried with :

location = /SubFolder/index.php {
return 301 https://www.google.be/search;
}

And this was working! So, I thought that the path used as location was possibly was incorrect. To see the path capture as location I tried next with 

location ~ (/SubFolder/index.php) {
return 301 http://Fake$1;
}

Opening now http://MyNas/SubFolder/index.php, I got the (unvailable) page  http://Fake/SubFolder/index.php

So, the path /SubFolder/index.php was definitively correct. 

I think that my directive is included before another one which overwrite it. Possibly this one, found in /etc/nginx.nginx.conf:

location / {
rewrite ^ / redirect;
}

So, I have no choice but use the modifier = (exact match) or ~ (matching a regular expression). Unfortunately, doing so, another problem arise… the php pages are not reachable anymore :(

If you look at the log file of nginx: cat /var/log/nginx/error.log

You see:

2019/11/30 21:22:12 [error] 25657#25657: *50 open() “/etc/nginx/html/SubFolder/index.php” failed (2: No such file or directory), client: 192.168.0.1, server: _, request: “GET /SubFolder/index.php HTTP/1.1”, host: “MyNas”

This is because nginx is using its default root folder /etc/nginx/html/ instead of inheriting the one define for the WebStation.

The solution is to simply specify the root in the location block : root /var/services/web;

But now, instead of being executed, the php script is downloaded.. Harg !

The following location works, by redefining the execution of the php page:

location = /SubFolder/index.php {
  root /var/services/web;

  try_files $uri /index.php =404;
  fastcgi_pass unix:/var/run/php-fpm/php73-fpm.sock;
  fastcgi_index index.php;
  include fastcgi.conf;
}

Pay attention, corrupting the config of nginx will make you DSM unable to run anymore ! Always check that your config is correct with the command : nginx -t

 

Ok, now, to handle both folders and php pages, one can use this variant of the location above:

location ~ /SubFolder/ {
  root /var/services/web;

  location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_pass unix:/var/run/php-fpm/php73-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }
}

In the sub-location above, use php73-fpm.sock, php70-fpm.sock, php50-fpm.sock, etc… according to the version of php used by default with your nginx in your WebStation !

This is more or less working fine… I still have issues as some server variables are not passed to the php pages… But it’s working enough for my purpose. We are now only missing the basic authentication !!! Here is the final location block:

location ~ /You/Sub/Folder/ {
  root /var/services/web;

  location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_pass unix:/var/run/php-fpm/php73-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

  auth_basic “Any Prompt Message You Want”;
  auth_basic_user_file /usr/syno/share/nginx/conf.d/.htpasswd;

}

Once in place, nginx restarted, your browser cleaned and restarted too, you finally got the prompt for your login and password.

If you type a wrong login or password, you could see the error in the nginx log file: cat /var/log/nginx/error.log

2019/11/30 17:51:47 [error] 12258#12258: *145 user “mystery” was not found in “/usr/syno/share/nginx/conf.d/.htpasswd”, client: 192.168.0.1, server: _, request: “GET /err/You/Sub/Folder/ HTTP/1.1”, host: “MyNas”

2019/11/30 17:59:52 [error] 20130#20130: *3 user “mystery”: password mismatch, client: 192.168.0.1, server: _, request: “GET /You/Sub/Folder/ HTTP/1.1”, host: “MyNas”

Et voilà… Not perfect, not clear why it’s not wokring out of the box as documented here… But 

Synology Install OpenHAB 2 on Synology

I was looking for one local and single platform to control all my connected devices : Philips Hue, Somfy blinds, Fibaro Wall Plugs, IFTTT scenario, … OpenHab 2 can do that once installed on a Synology!

Click to Read More

To install OpenHab 2 on Synology, I did use the official doc and this great tutorial from Thomas Schwarz.

Prerequisites

First, install Java on your Synology. It is available as a package in the Package Center :

Once installed, upgrade it to the latest version, to be downloaded directly from the Oracle web site :

Next, “Enable user home service” via the Menu > Control Panel > User :

Then, create a Shared Folder “SmartHome” via the Menu > Control Panel > Shared Folder (pay attention to the case!) :

And finally, via the Menu > File Station, create a subfolder “openHAB” in the Shared Folder SmartHome (pay attention to the case!):

Installation

Download now the package “OpenHab 2” from its GitHub Repository :

And install it manually via the Package Center :Use the subfolder “openHAB” created on the Shared folder “SmartHome :

I did install the Z-Wave module as I have a Z-Wave key installed on my Synology :

Once installed, check that you see the following content in the folder “openHAB” of the Shared Folder “SmartHome” :You should also have the following content in the folder “openHab” of the Shared Folder “homes” :Finally, check that openHab is running fine and finalize the setup by opening the Package “openHAB” via the Package Center > Installed > OpenHAB. There, click on the “Url” at the bottom of the screen :

A new tab should open with a page where you can select a pre-defined configuration. I am using the “Standard” one :

Et voilà :

Synology Customize Mac & Serial of Xpenology images to run Synology in VMWare

Here are:

  • all my Xpenology packages used to emulate a Synology with VMWare and
  • how to customize their Mac Address as well as their Serial Number

Click to Read More

The DSM images available in the packages above come from these Synology’s archives.

You can find here or here how to create a Virtual Synology with theses packages (Notice I have fine-tuned those, among others to put the disks in the right boot order for the DS3617xs).

 

Before importing a package in VMWare, you can update its Mac Address and its Serial to make them unique in your network (E.g.: if you duplicates the images). For that purpose, you need OSFMount, a tool able to update (read and write) the content of .img files.

Run OSFMount and open the disk image file “synoboot.img” (Do not mount it as Ram Drive):

“Select All” the partitions as virtual  disks and uncheck the flag “Read-only drive”:

Once opened, double-click on the first drive in the list to open it. It contains the settings to be customized in the file drive:\grub\grub.cfg. Edit that file to change the Serial (set sn) and the MAC address (set mac1):

A new MAC address can be generated using VMWare; via a Network Adapter > Advanced > Generate. Click on the button Generate a few times and copy the value in the file above (removing the various semicolons).

A new Serial can be generated on this site.

Once done with the edition, “Dismount All” the drives in OSFMount. You can now import the virtual machines in VMWare.

Et voilà.

Synology Use a Bridged Network for a Virtual Synology using VMWare

Within the Virtual “Synologies” created as described here and here, I was using NAT for the Network Connection. To use a Bridged Network Connection is not easy, but can work.

Click to Read More

I wanted to reconfigure all my Virtual Synology to use NAT instead of a Bridged Network Connection.

But once this is done, the Virtual Synology does not appear anymore as configured in the Synology Assistant (which opens the Network Wizard). And trying to reach it via a browser, on its admin port,  results in connection timeout.

If I wait for several minutes (sometimes more than 10′) and try again and again to reach my various Virtual Synology on its admin port, I finally get them.

I don’t know yet why this is not immediate ?!… I seems to be an issue with the Bridged Connection of VMWare under Windows 10.

 

I tried to clean the arp table (Run as Command Prompt as Administrator on Windows and type: arp -d *). But without success. And the problem comes back not only each time the VM is restarted, but also sometimes while running since a while…

I did check that the Mac Address of each Synology (displayed by the Synology Assistant) was correctly defined in VMWare:

See here how to customize the MAC Address of a Synology image.

 

I also checked that the Bridged Connections were correctly configured in VMWare as suggested here:

  1. Be sure your vm is stopped.
  2. Run the VMWare Virtual Network Editor (click Start and search for Virtual Network Editor)
  3. Run it as administrator (or click the button at the bottom of the screen that says, “change settings.” VMNet0 will dislpay when running as administrator. Otherwise, it will not be visible)
  4. Highlight VMNet0 and click on “Automatic Settings”
  5. You will see a list of adapters. De-select all but the physical network card. (When I set up up with player, I had selected only the 1. After install of workstation, all of the items were checked.)
  6. Click “OK”
  7. Click “Ok”
  8. Start the VM and test.

 

I tried next various tips from here and here, such as stopping and restarting the vmnetbridge. The best results are achieved by deleting all the virtual adapters in the VMWare Virtual Network Editor, creating a new one bridged to a specific Ethernet Adapter and finally using that one as a “Custom: Specific virtual network” as Network Adapter for each VM.

 

But I still have randomly some VM with a “Connection Failed” status in the Synology Assistant. If I found how to definitively fix this issue, I will post it here.

Synology Synology’s Scheduled Tasks

I would like to find how to create Scheduled Tasks to execute a User-Defined Scripts on Synology using commands in a shell script. But I don’t find how-to. Here are the only info I was able to get.

Click to Read More

The tasks created via Control Panel > Task Scheduler > Create > Scheduled Task > User-defined Script, are stored in the file /etc/crontab. Ex.:

The tasks id are stored in /usr/syno/etc/scheduled_tasks. Ex.:

[1]
id=1
last work hour=23
can edit owner=1
can delete from ui=1
edit dialog=SYNO.SDS.TaskScheduler.EditDialog
type=daily
action=#common:run#: /usr/local/bin/php73 /var/packages/MODS_ServerMonitor/target/ui/cron/status.cron.php
can edit from ui=1
week=1111111
app name=#common:command_line#
name=Update Server Mon
can run app same time=1
owner=0
repeat min store config=[1,5,10,15,20,30]repeat hour store config=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]simple edit form=1
repeat hour=0
listable=1
app args={“notify_enable”:false,”notify_if_error”:false,”notify_mail”:””,”script”:”/usr/local/bin/php73 /var/packages/MODS_ServerMonitor/target/ui/cron/status.cron.php”}
state=enabled
can run task same time=0
start day=0
cmd=L3Vzci9sb2NhbC9iaW4vcGhwNzMgL3Zhci9wYWNrYWdlcy9NT0RTX1NlcnZlck1vbml0b3IvdGFyZ2V0L3VpL2Nyb24vc3RhdHVzLmNyb24ucGhw
run hour=0
edit form=SYNO.SDS.TaskScheduler.Script.FormPanel
app=SYNO.SDS.TaskScheduler.Script
run min=0
start month=0
can edit name=1
start year=0
can run from ui=1
repeat min=15

The task can also be displayed via a command line run as root (See here):  sudo synoschedtask –get id = 1

ID: [1]
Name: [Update Server Mon]
State: [enabled]
Owner: [root]
Type: [daily]
Start date: [0/0/0]
Run time: [0]:[0]
Repeat every [15] min (s) until [23]:[45]
Command: [/usr/local/bin/php73 /var/packages/MODS_ServerMonitor/target/ui/cron/status.cron.php]
Last Run Time: Mon Oct 28 23:00:02 2019
Status: [Success]


Synology Use opkg instead of ipkg on Synology

IPKG is not maintained anymore since 2014. As a replacement, one can use Entware, which offers more than 1800 packages.

Click to Read More

First enter a SSH session on your nas as root (See here).

Check if your CPU model is a armv5, armv7, mips, x86-32 or x86-64. You can do so with one of the following command:

  • cat /proc/cpuinfo | grep -m 1 ‘model name’ | cut -d “:” -f 2 | cut -d “@” -f 1
  • uname -a

Create now a folder to install Entware (NB.: The folder /opt may not yet exist. I.e.: Optware may not be installed yet. We will delete it if it exists. If it cannot be deleted – you could have a message that it’s in use – then reboot your Synology first).

mkdir -p /volume1/@entware-ng/opt
rm -rf /opt
ln -sf /volume1/@entware-ng/opt /opt

Depending on your CPU, execute one of the following commands

  • For armv5: wget -O – http://pkg.entware.net/binaries/armv5/installer/entware_install.sh | /bin/sh
  • For armv7: wget -O – http://pkg.entware.net/binaries/armv7/installer/entware_install.sh | /bin/sh
  • For mips: wget -O – http://pkg.entware.net/binaries/mipsel/installer/installer.sh | /bin/sh
  • For x86-32: wget -O – http://pkg.entware.net/binaries/x86-32/installer/entware_install.sh | /bin/sh
    For x86-64: wget -O – http://pkg.entware.net/binaries/x86-64/installer/entware_install.sh | /bin/sh

Go now to your DSM and open the “Control Panel”. There, select the “Task Scheduler” > “Create” > “Triggered Task” > “User-defined script”

Configure this new task to run at “Boot-up” :

And to run the following commands:

/bin/ln -sf /volume1/@entware-ng/opt /opt
/opt/etc/init.d/rc.unslung start

Finally, to include /opt/bin and /opt/sbin to the PATH variable, add . /opt/etc/profile at the end of /etc/profile with this command:

echo “. /opt/etc/profile” >> /etc/profile

You can now use the command opkg. The first action to do is: opkg update

Check the list of packages available with: opkg -list | more

 

 

NB.: To remove IPKG from your Synology:

  1. umount /opt
  2. rm -R /opt
  3. rm -R /volume1/opt or rm -R /volume1/@optware (depends on where IPKG was installed)
  4. delete every reference to optware in /etc/rc.local
  5. rm /etc/rc.optware
  6. check that there is nothing related to ipkg in /etc/crontab
  7. reboot your NAS

Synology Retrieve files and folders from a Synology C2 backup

My Nas Synology died recently and I wanted to retreive some content from my Synology C2 Backup.

Click to Read More

After 3 years being 24/7, my DS1815+ does not turn on anymore when I press the power button. The problem is not with the power supply. I did change it, but with no luck.

Fortunatelly, I was using Hyper Backup to daily compy everything into “Synology C2 backup”. 

But it’s not possible to retreive a complete foder from the backup via the Synology C2 web page. One can only download file by file :(

To download a complete folder at once, you need the “Synology Hyper Backup Explorer” for desktop available in the Destkop Utilities section of the downloads.

Synology Setup DSM 6.2.2 in a Virtual Synology DS3617xs using VMWare

Here is a step by step “How-To create a Virtual Machine to emulate a DS3617xs running DSM 6.2.2” using VMWare and Xpenology

Click to Read More

Xpenology is a bootloader for Synology’s operating system which is called DSM. It can be used to setup DSM on a PC or in a Virtual Machine like VirtualBox or VMWare.

I am using VMWare 15. But any version from VMWare 11 should work.

 

1: Download and unzip this package, containing:

  • the configuration of the virtual machine (dsm.ovf, dsm.vmx, disk.vmdk and synoboot.vmdk),
  • the xpenology boot file for DS3617xs (synoboot.img) and
  • the image of the DSM 6.2.2 for DS3617xs (DSM_DS3617xs_23739.pat)

Notice that only the image “23739” is compatible with the boot file (Jun’s loader 1.03b).

2: Open VMWare Workstation. If you never configured the default location where you want to create your Virtual Machines, press CTRL-P to open the “Preferences” panel. There, set this default location (I am using D:\VMWare).

3: Go next to “Windows Explorer”, in the folder where you have unzipped the package, and double click dsm.ovf. This is going to import the VM into VMWare. Type a name for the new virtual machine (I am using DSM3617 6.2.2) and click “Import”.

4: Here is the outcome to the importation. You can now click on “Power on this virtual machine”. But first, be ready to type F2 in the console to enter the Bios. You will have only 2 seconds to do so!

5: As soon as you have run the VM, click into it to capture the keyboard, and press “F2”. If you missed it, the VM will try to boot from the network. In such a case restart the VM and try again! Once in the Bios, go to the Boot tab and swap the SATA Hard Disk with  the SCSI Hard disk. The VM has indeed to boot with the SATA disk containing the boot loader. Finally, Save and Exit the Bios. The VM will reboot.

6: Again, quickly click into it to capture the keyboard and press the “down arrow” to select the loader for “VMWARE/ESXI” (attention, you don’t have a lot of time to start the selection). Press next Enter and the boot will load. The VM is ready to install the DSM image.

7: Open the “Synology Assistant”, which is more efficient than the page http://find.synology.com to find your VM, and after 1 minute click on “Search”. If you didn’t wait long enough, you will see an Error message (In such a case, click Search “Again”. I never had to do this more than 3 times).

8: Finally, the Assistant will find your VM. A webpage should automatically open (Otherwise, right click on the VM and select “Install”). Click on “Set up” in that page.

9: Click next on the link “Manual Install”.

10: Click on Browse to select the image of the DSM 6.2.2 for DS3617xs and select the file “DSM_DS3617xs_23739.pat” in the folder when you unzipped the package downloaded here previously.

11: Finally, click on “Install Now” and confirm that the installation can override the disk… it’s the virtual SCSI Hard Disk member of the VM. No worry ;)

12: The installation will take a few minutes and once completed, you will see in the VMWare Workstation that the VM is rebooting.

13: On the installation page, you see a count down. If you want to check the status of the VM, you can go back to the Synology Assistant and Click Search. You should see that it’s restarting, etc… and is finally ready. At that moment, you can select the VM and click Connect.

14: You will now be able to login into the VM and configure it. DO NOT select “Install the latest DSM version automatically” or “Install the important updates of DSM automatically”!!! The image 37739 is the latest compatible with the loader used by this VM. Upgrading your DSM will break the VM.

 

15: You have now a DS3617xs with the DSM 6.2.2-23739.

16: DO NOT upgrade or the disk will disappear and the VM won’t work anymore (Someone mentions that mounting the Disk on a SATA controller instead of a SCSI one helped… See here. But it didn’t work for me). Looking into the Synology Assistant, you would see that the Virtual Synology is not configured.

17: It’s now time to use the SCSI Hard Disk to create a first Volume. Open the DSM Main Menu and start the Storage Manager. Go to “Storage Pool” and click “Create”. Use the HDD of 20GB. Next, go to “Volume” and click “Create”. Use the “Storage Pool” created previously.

18: Now, you can upgrade the VM to your version of VMWare. Shutdown the DSM Properly (via the menu on the Buddy Icon in the top-right corner). The VM will soon stop.

 

19: Once the VM stopped, upgrade it by clicking on “Upgrade this virtual machine”.

Et voilà !

Synology Setup DSM 6.2.2 in a Virtual Synology DS918 using VMWare

Here is a step by step “How-To create a Virtual Machine to emulate a DS918 running DSM 6.2.2” using VMWare and Xpenology

Click to Read More

Xpenology is a bootloader for Synology’s operating system which is called DSM. It can be used to setup DSM on a PC or in a Virtual Machine like VirtualBox or VMWare.

I am using VMWare 15. But any version from VMWare 11 should work.

 

1: Download and unzip this package, containing:

  • the configuration of the virtual machine (dsm.ovf, dsm.vmx, disk.vmdk and synoboot.vmdk),
  • the xpenology boot file for DS918+ (synoboot.img) and
  • the image of the DSM 6.2.2 for DS198+ (DSM_DS918+_24922.pat)

2: Open VMWare Workstation. If you never configured the default location where you want to create your Virtual Machines, press CTRL-P to open the “Preferences” panel. There, set this default location (I am using D:\VMWare).

3: Go next to “Windows Explorer”, in the folder where you have unzipped the package, and double click dsm.ovf. This is going to import the VM into VMWare. Type a name for the new virtual machine (I am using DSM918 6.2.2) and click “Import”.

4: Here is the outcome to the importation. You can now click on “Power on this virtual machine”. If you want, you may also first increase the Memory, the Processors or the size of the SCSI Hard Disk (Do not touch the SATA Hard Disk which contains the boot loader).

5: As soon as you have run the VM, click into hit to let it capture the keyboard, and press the “down arrow” to select the loader for “VMWARE/ESXI” (attention, you don’t have a lot of time to start the selection). Press next Enter and it will boot.

6: Open the “Synology Assistant”, which is more efficient than the page http://find.synology.com to find your VM, and after 1 minute click on “Search”. If you didn’t wait long enough, you will see an Error message (In such a case, click Search “Again”. I never had to do this more than 3 times).

7: Finally, the Assistant will find your VM. A webpage should automatically open (Otherwise, right click on the VM and select “Install”). Click on “Set up” in that page.

8: Click next on the link “Manual Install”.

9: Click on Browse to select the image of the DSM 6.2.2 for DS918+ and Select the file “DSM_DS919+_24922.pat” in the folder when you unzipped the package downloaded here previously.

10 Finally, click on “Install Now” and confirm that the installation can override the disk… it’s the virtual SCSI Hard Disk member of the VM. No worry ;)

11: The installation will take a few minutes

12: Once the installation complete, you will see in the VMWare Workstation that the VM is rebooting. On the installation page, you see a count down. If you want to check the status of the VM, you can go back to the Synology Assistant and Click Search. You should see that it’s restarting, installing patches, reconnecting and finally ready. At that moment, you can select the VM and click Connect.

13: You will now be able to login into the VM and configure it.

14: It’s now time to us the SCSI Hard Disk to create a first Volume. Open the DSM Main Menu and start the Storage Manager.

15: Go to Volume and click Create. Select the HDD of 20GB, etc…

16: You have now a brand new DS918+ with the DSM 6.2.2-24922 Update 3.

17: Now, you can upgrade the VM to your version of VMWare. Shutdown the DSM Properly (via the menu on the Buddy Icon in the top-right corner). The VM will soon stop.

18: Once the VM stopped, upgrade it by clicking on “Upgrade this virtual machine”.

Et voilà !

Synology Capture a Synology Package during installation

This is an update of a previous post on this topic.

I noticed that since a recent update of DSM, my previous script was not working fine anymore, when trying to capture a spk during installation. So here is an improved version.

Click to Read More


#!/bin/bash
VOLUME=$1
TARGET=$2

#Copy also the expanded package ?
COPYEXPAND=false

if [ -z "$VOLUME" ]; then
echo "usage: capture <source VOLUME> <target dir>"
exit 0
fi

if [ -z "$TARGET" ]; then
echo "usage: capture <source VOLUME> <target dir>"
exit 0
fi

pattern="volume[0-9]+"
if [[ ! $VOLUME =~ $pattern ]]; then
echo "The name of the source volume must be like 'volume<i>' where <i> is numeric"
exit 0
fi

if [ ! -d "/$VOLUME/@tmp" ]; then
echo "Temporary dir not found: /$VOLUME/@tmp"
exit 0
fi

if [ -d "/$VOLUME/@tmp/SynoCapture" ]; then
rm -R "/$VOLUME/@tmp/SynoCapture"
fi

if [ -d "/$VOLUME/@tmp/@synopkg" ]; then
rm -R "/$VOLUME/@tmp/@synopkg"
fi

echo "Press any key to stop the capture"

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi

count=0
keypress=''
echo "Going to copy the packages into $TARGET/SynoCapture"

if [ ! -d "$TARGET/SynoCapture" ]; then
mkdir "$TARGET/SynoCapture"
fi

while [ "x$keypress" = "x" ]; do
if [ -d "/$VOLUME/@tmp/@synopkg/@download/" ]; then
cp -nlR "/$VOLUME/@tmp/@synopkg/@download/." "/$VOLUME/@tmp/SynoCapture/"
fi

if [ "$COPYEXPAND" = true ]; then
if [ -d "/$VOLUME/@tmp/pkginstall/" ]; then
cp -nlR "/$VOLUME/@tmp/pkginstall/." "/$VOLUME/@tmp/SynoCapture/pkginstall/"
fi
fi
let count+=1
echo -ne $count'\r'
keypress="`cat -v`"
done

if [ -t 0 ]; then stty sane; fi

find "/$VOLUME/@tmp/SynoCapture/" -type f -name '@SYNOPKG_DOWNLOAD_*' -exec sh -c 'x="{}"; mv "$x" "${x}.spk"' \;
if [ "$COPYEXPAND" = true ]; then
if [ -d "$TARGET/SynoCapture/pkginstall" ]; then
rm -R "$TARGET/SynoCapture/pkginstall"
fi
fi
cp -fR "/$VOLUME/@tmp/SynoCapture" "$TARGET/"
rm -R "/$VOLUME/@tmp/SynoCapture"

echo "$count captures done"
exit 0

Now the script will copy only the SPK file into the specified target folder. It’s also possible to copy the expanded version by setting the variable COPYEXPAND=true

Also, now, I don’t find anymore a folder name “pkglist.tmp” containing files synoserver.enu and otherserver.enu. Those files used to contain the URL’s of all SPK available respectively on the official Synology website and on the various SPK servers that you configured in your Package Center > Settings > Package Sources.

To make the capture even easier, I have create a Package named “MODS Package Capture, available on my SPK Server and published on GitHub.