{"id":569,"date":"2023-12-23T14:51:46","date_gmt":"2023-12-23T22:51:46","guid":{"rendered":"https:\/\/www.ferzkopp.net\/wordpress\/?p=569"},"modified":"2024-01-13T22:12:14","modified_gmt":"2024-01-14T06:12:14","slug":"custom-linux-on-wd-mycloud-ex2-via-wsl2","status":"publish","type":"post","link":"https:\/\/www.ferzkopp.net\/wordpress\/2023\/12\/23\/custom-linux-on-wd-mycloud-ex2-via-wsl2\/","title":{"rendered":"Custom Linux on WD MyCloud EX2 via WSL2"},"content":{"rendered":"<p>The goal of this project was to replace the insecure (see references below) operating system on a WD MyCloud EX2 NAS device with a newer Linux Kernel and a custom boot installation that enables minimally SSH and allows alternative application or file hosting capabilities<\/p>\n<p>It worked but took quite a few steps. \ud83d\ude42<\/p>\n<p><strong>BOM<\/strong><\/p>\n<ul style=\"list-style-type: circle;\">\n<li>WD MyCloud EX2 \/w 2x 2TB disks (Craigslist, $60)<\/li>\n<li>DTech USB to TTL Serial Adapter Cable (Amazon, $14)<\/li>\n<li>SATA\/IDE to USB 3.0 Adapter \/w Power Supply (Amazon, $24)<\/li>\n<\/ul>\n<p>The NAS contained 2x 2TB SATA disks which were reused, wiped and used to install the new kernel and root filesystem. The serial console cable was used to reprogram the bootloader, while the USB-SATA adapter was used to access and customize the drives for this project.<\/p>\n<h5>References<\/h5>\n<ul style=\"list-style-type: disc;\">\n<li><a href=\"https:\/\/krebsonsecurity.com\/2021\/07\/another-0-day-looms-for-many-western-digital-users\/\">https:\/\/krebsonsecurity.com\/2021\/07\/another-0-day-looms-for-many-western-digital-users\/<\/a><\/li>\n<li><a href=\"https:\/\/krebsonsecurity.com\/2021\/07\/another-0-day-looms-for-many-western-digital-users\/\">https:\/\/www.theverge.com\/2021\/7\/2\/22561140\/wd-cloud-os-3-security-flaw-update-patch-disconnect<\/a><\/li>\n<\/ul>\n<h3>Hardware Access to Boot Console<\/h3>\n<p>The first step involves disassembling the device to get access to the serial console of the bootloader and soldering some pins on the motherboard to be able to connect a USB-to-Serial adapter so one can reprogram the default boot setup.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-592\" src=\"https:\/\/www.ferzkopp.net\/wordpress\/wp-content\/uploads\/2023\/12\/EX2-Motherboard.jpg\" alt=\"\" width=\"409\" height=\"450\" srcset=\"https:\/\/www.ferzkopp.net\/wordpress\/wp-content\/uploads\/2023\/12\/EX2-Motherboard.jpg 600w, https:\/\/www.ferzkopp.net\/wordpress\/wp-content\/uploads\/2023\/12\/EX2-Motherboard-116x128.jpg 116w\" sizes=\"auto, (max-width: 409px) 100vw, 409px\" \/><\/p>\n<p>The serial console pin layout and mapping to the DTech cable is as follows:<\/p>\n<pre>Pin 1 - Tx --&gt; USB Green Rx\nPin 2 - Gnd --&gt; USB Black Gnd\nPin 5 - Rx --&gt; USB White Tx<\/pre>\n<h5>Install and Configure Minicom<\/h5>\n<p>The functionality of the serial connection was verified with a terminal on a Linux Laptop running Debian which supports the USB-to-Serial adapter out of the box.<\/p>\n<pre>apt-get install minicom\nminicom -s<\/pre>\n<p>&nbsp;and setup to:<\/p>\n<pre>E - Bps\/Par\/Bits : 115200 8N1\nF - Hardware Flow Control : No\nG - Software Flow Control : Yes<\/pre>\n<h5>Test Serial Connection<\/h5>\n<p>Run lsusb to see if the interface was attached.<\/p>\n<pre>lsusb<\/pre>\n<p>Connect minicom to the serial interface and power-cycle the NAS; the bootloader text should appear, and one can access the boot console by pressing a key.<\/p>\n<h5>Alternatives<\/h5>\n<p>One can also use <a href=\"https:\/\/www.chiark.greenend.org.uk\/~sgtatham\/putty\/latest.html\" data-wplink-edit=\"true\">PuTTY<\/a> directly from Windows as well.<\/p>\n<h5>References<\/h5>\n<ul style=\"list-style-type: disc;\">\n<li><a href=\"https:\/\/github.com\/gisab\/WDMC-Ex2\/tree\/main\/1.SerialCable\">https:\/\/github.com\/gisab\/WDMC-Ex2\/tree\/main\/1.SerialCable<\/a><\/li>\n<\/ul>\n<h3>USB On WSL (Prerequisite)<\/h3>\n<p>Since my primary development desktop is a Windows machine, the next steps are performed to be able to continue all work (cross-compiling custom kernel, building a custom root filesystem) from the more powerful Windows desktop under WSL2.<\/p>\n<p>In order to get the same serial console access as above (without using PuTTY), a custom WSL2 kernel with support for the USB Generic Serial Drivers and the SATA cable hardware needs to be created and installed.<\/p>\n<h5>References<\/h5>\n<ul style=\"list-style-type: disc;\">\n<li><a href=\"https:\/\/devblogs.microsoft.com\/commandline\/connecting-usb-devices-to-wsl\/\">https:\/\/devblogs.microsoft.com\/commandline\/connecting-usb-devices-to-wsl\/<\/a><\/li>\n<li><a href=\"https:\/\/9to5tutorial.com\/using-a-usb-serial-device-from-a-wsl2-environment\">https:\/\/9to5tutorial.com\/using-a-usb-serial-device-from-a-wsl2-environment<\/a><\/li>\n<\/ul>\n<h3>Install WSL<\/h3>\n<p>Follow instructions on <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install\">https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install<\/a> to install WSL2 Debian<\/p>\n<p>Continue work as root user:<\/p>\n<pre>sudo su -<\/pre>\n<h3>Update the WSL Kernel<\/h3>\n<p>The following steps are used to compile a new custom Linux kernel for WSL under WSL.<\/p>\n<h5>In WSL<\/h5>\n<pre>apt install libncurses5-dev git bc\napt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool python3\napt install dwarves<\/pre>\n<p>Get kernel version:<\/p>\n<pre>uname -r<\/pre>\n<p>Get kernel sources:<\/p>\n<pre>git clone https:\/\/github.com\/microsoft\/WSL2-Linux-Kernel.git\ncd WSL2-Linux-Kernel\ngit checkout linux-msft-wsl-5.15.90.1<\/pre>\n<p>Configure kernel sources:<\/p>\n<pre>cp \/proc\/config.gz config.gz\ngunzip config.gz\nmv config .config<\/pre>\n<p>Check that CONFIG_USB=y is set in .config<br \/>\nCheck that CONFIG_EXT4_FS_POSIX_ACL=y is set in .config<\/p>\n<pre>make menuconfig<\/pre>\n<p>Enable Device Drivers -&gt; USB Support -&gt; USB Mass Storage Support [*]<br \/>\nEnable Device Drivers -&gt; USB Support -&gt; USB Serial Converter support &#8211; USB Serial Console device support [*]<br \/>\nEnable Device Drivers -&gt; USB Support -&gt; USB Serial Converter support &#8211; USB Generic Serial Driver [*]<br \/>\n+ drivers (i.e. Prolific PL2303 Driver)<\/p>\n<p>Compile kernel:<\/p>\n<pre>make -j 8 olddefconfig\nmake -j 8\nmake -j 8 install\nmake -j 8 modules\nmake -j 8 modules_install<\/pre>\n<p>Enable new kernel image for WSL:<\/p>\n<pre>cp arch\/x86\/boot\/bzImage \/mnt\/c\/Users\/[USERNAME]\/bzImage\njoe \/mnt\/c\/Users\/[USERNAME\/.wslconfig<\/pre>\n<p>and edit to custom kernel image:<\/p>\n<pre>[wsl2]\nkernel=c:\\\\users\\\\[USERNAME]\\\\bzImage<\/pre>\n<p>Close all WSL terminals, and run admin powershell console:<\/p>\n<pre>wsl --shutdown<\/pre>\n<p>then launch new Debian terminal.<\/p>\n<h5>On Windows<\/h5>\n<p>From elevated command prompt, run usbipd to get the bus ID:<\/p>\n<pre>usbipd list<\/pre>\n<p>&#8230;<br \/>\n<strong>2-3<\/strong> 067b:23a3 Prolific PL2303GC USB Serial COM Port (COM3) Not shared<br \/>\n&#8230;<\/p>\n<pre>usbipd wsl attach --busid 2-3<\/pre>\n<h5>In WSL<\/h5>\n<p>With the NAS attached, run through the same procedure &#8220;Install and Configure Minicom&#8221; and &#8220;Test Serial Connection&#8221; as above.<\/p>\n<h3>USB Mass Storage on WSL2<\/h3>\n<p>Since one needs to repartition and store new files on the existing NAS disks they need to be removed from the NAS and connected to the PC. An external USB-SATA adapter was used, so one needed to also enable USB mass-storage on WSL as per the following steps.<\/p>\n<h5>References<\/h5>\n<ul style=\"list-style-type: disc;\">\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/wsl2-mount-disk\">https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/wsl2-mount-disk<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/jovton\/USB-Storage-on-WSL2\">https:\/\/github.com\/jovton\/USB-Storage-on-WSL2<\/a><\/li>\n<\/ul>\n<h5>On Windows<\/h5>\n<p>Install latest version of usbipd-win from <a href=\"https:\/\/github.com\/dorssel\/usbipd-win\/releases\/tag\/v3.0.0\">https:\/\/github.com\/dorssel\/usbipd-win\/releases\/tag\/v3.0.0<\/a><\/p>\n<p>Attach external drive.<\/p>\n<p>From elevated commandline run:<\/p>\n<pre>usbipd list\nand attach USB device(s) to WSL2 with:\nusbipd wsl attach --busid [BUSID]<\/pre>\n<h5>In WSL<\/h5>\n<pre>apt install build-essential flex bison libssl-dev libelf-dev libncurses5-dev git bc\n\napt-get install usbutils\napt-get install hwdata\napt-get install usbip<\/pre>\n<p>Run lsusb to see if the drive was attached:<\/p>\n<pre>lsusb<\/pre>\n<p>Check kernel logs for device name:<\/p>\n<pre>dmesg<\/pre>\n<p>[ 155.805108] sd 1:0:0:0: [<strong>sde<\/strong>] 30318592 512-byte logical blocks: (15.5 GB\/14.5 GiB)<\/p>\n<p>&nbsp;<\/p>\n<h3>Cross-Compiling Kernel on WSL<\/h3>\n<p>The next step involves creating a custom ARM kernel for the NAS device on WSL2.<\/p>\n<h5>References<\/h5>\n<ul style=\"list-style-type: disc;\">\n<li><a href=\"https:\/\/github.com\/Heisath\/wdmc2-kernel\">https:\/\/github.com\/Heisath\/wdmc2-kernel<\/a><\/li>\n<\/ul>\n<h5>Install cross-compiling tools<\/h5>\n<pre>apt update\napt upgrade\napt install build-essential u-boot-tools libncurses5-dev git bison flex bc libssl-dev\napt install crossbuild-essential-armhf<\/pre>\n<h5>Prepare kernel sources<\/h5>\n<p>Get hardware patch configs:<\/p>\n<pre>git clone https:\/\/github.com\/gisab\/WDMC-Ex2.git<\/pre>\n<p>Pick up latest kernel 5.10 revision from: <a href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/stable\/linux.git\">https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/stable\/linux.git<\/a><\/p>\n<pre>cd WDMC-Ex2\/3.Kernel\ngit clone --depth 1 --branch v5.10.[LATEST_REVISION] git:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/stable\/linux-stable.git linux-stable<\/pre>\n<p>Patch and compile custom kernel:<\/p>\n<pre>cd linux-stable\npatch -p1 &lt; ..\/gpio_trigger.patch cp ..\/kernel.config .config cp ..\/armada-370-wdmc-mirror-gen1-gs.dts arch\/arm\/boot\/dts\/ ----Compile kernel---- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- --jobs=8 olddefconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- --jobs=8 zImage make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- --jobs=8 armada-370-wdmc-mirror-gen1-gs.dtb make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- --jobs=8 modules mkdir -p ..\/output make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=..\/output modules_install cp arch\/arm\/boot\/zImage zImage_and_dtb cat arch\/arm\/boot\/dts\/armada-370-wdmc-mirror-gen1-gs.dtb &gt;&gt; zImage_and_dtb\nmkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Kernel-v5.10.[LATEST_REVISION] -d zImage_and_dtb uImage\ncp uImage ~<\/pre>\n<h3>Creating a RootFS on WSL<\/h3>\n<p>The next step is to create a minimal root filesystem.<\/p>\n<h5>References<\/h5>\n<ul style=\"list-style-type: disc;\">\n<li><a href=\"https:\/\/github.com\/jubinson\/debian-rootfs\">https:\/\/github.com\/jubinson\/debian-rootfs<\/a><\/li>\n<\/ul>\n<h5>Install tools<\/h5>\n<pre>apt-get install binfmt-support qemu qemu-user-static binfmt-qemu-static debootstrap<\/pre>\n<h5>Get default rootFS<\/h5>\n<pre>cd ~\ndebootstrap --foreign --arch=armhf bullseye debianrootfs\ncp \/usr\/bin\/qemu-arm-static debianrootfs\/usr\/bin\ncp \/usr\/bin\/qemu-arm-static debianrootfs\/bin\ncp -r ~\/WDMC-Ex2\/3.Kernel\/output\/lib\/modules debianrootfs\/lib<\/pre>\n<h5>Customize rootFS<\/h5>\n<pre>\/etc\/init.d\/binfmt-support restart\nfor f in dev dev\/pts sys proc run ; do mount --bind \/$f debianrootfs\/$f ; done\nchroot debianrootfs qemu-arm-static \/bin\/bash\n\n\/debootstrap\/debootstrap --second-stage\npasswd\nadduser adminadmin\napt-get update\napt-get upgrade\napt -y install ssh openssh-server net-tools joe\napt-get install sudo ethtool resolvconf wget\napt-get install locales dialog\ndpkg-reconfigure locales\napt-get install ntpdate\njoe \/etc\/network\/interfaces<\/pre>\n<p>Add:<\/p>\n<pre>auto lo\niface lo inet loopback\nauto eth0\nallow-hotplug eth0\niface eth0 inet dhcp<\/pre>\n<pre>joe \/etc\/hostname<\/pre>\n<p>Change to:<\/p>\n<pre>myNAS<\/pre>\n<pre>joe \/etc\/hosts<\/pre>\n<p>Add:<\/p>\n<pre>127.0.0.1 myNAS<\/pre>\n<pre>joe \/etc\/fstab<\/pre>\n<p>Add:<\/p>\n<pre>\/dev\/sda2 \/ ext4 defaults,noatime 0<\/pre>\n<pre>joe \/etc\/resolv.conf<\/pre>\n<p>Add (IP based on local LAN):<\/p>\n<pre>nameserver 192.168.0.1<\/pre>\n<pre>echo T0:2345:respawn:\/sbin\/getty -L ttyS0 115200 vt100 &gt;&gt; \/etc\/inittab\nexit<\/pre>\n<pre>cd debianrootfs\ntar cvzf ..\/debianrootfs.tar.gz .\ncd ..<\/pre>\n<h3>USB Boot Media On WSL (Install)<\/h3>\n<p>Now that both the custom kernel and a rootFS file are available, we need to copy it to a partition on the drive that will host these files in the NAS. Connect the drive to WSL, format and mount it, then copy the files.<\/p>\n<pre>mkdir \/mnt\/x\nfdisk \/dev\/sdd<\/pre>\n<p>Delete all partitions, create 2 partitions, one for the kernel and the other for the root filesystem.<\/p>\n<pre>sdd1 - +100M - Linux (type: linux)\nsdd2 - +16G - Linux (type: linux)<\/pre>\n<pre>Device Start End Sectors Size Type\n\/dev\/sdd1 2048 206847 204800 100M Linux filesystem\n\/dev\/sdd2 206848 33761279 33554432 16G Linux filesystem<\/pre>\n<p>Create file systems on partitions, mount them and copy the kernel and filesystem onto them:<\/p>\n<pre>mkfs -t ext2 \/dev\/sdd1\nmkfs -t ext4 \/dev\/sdd2\n\nmount \/dev\/sdd1 \/mnt\/x\ncp ~\/uImage \/mnt\/x\numount \/mnt\/x\n\nmount \/dev\/sdd2 \/mnt\/x\ncd \/mnt\/x\ntar xvzf ~\/debianrootfs.tar.gz\ncd\numount \/mnt\/x<\/pre>\n<h3>Custom Bootloader Configuration<\/h3>\n<p>The final step is to get the NAS device to boot the custom kernel and mount the custom root filesystem. With the updated NAS drive inserted, boot the NAS and break into the bootloader via the serial console. Then configure the bootloader as follows:<\/p>\n<pre>Marvell&gt;&gt; ide reset\nMarvell&gt;&gt; ext2ls ide 0:1\nMarvell&gt;&gt; setenv bootcmd ide reset \\; ext2load ide 0:1 0x500000 \/uImage \\; bootm 0x500000\nMarvell&gt;&gt; printenv bootcmd\nMarvell&gt;&gt; setenv bootargs root=\/dev\/sda2 console=ttyS0,115200 max_loop=32 usbcore.autosuspend=-1\nMarvell&gt;&gt; printenv bootargs<\/pre>\n<h3>Initial Login<\/h3>\n<p>Now reboot the NAS again. The serial console should now show the new Linux kernel booting and end on a login prompt.<\/p>\n<p>Several manual post-install configurations are needed to arrive at a usable system.<\/p>\n<p>Login as &#8220;admin&#8221; user:<\/p>\n<pre>su -<\/pre>\n<p>then run:<\/p>\n<pre>mount \/ -o remount,rw<\/pre>\n<p>joe \/etc\/fstab<\/p>\n<p>Change<\/p>\n<pre># UNCONFIGURED FSTAB FOR BASE SYSTEM<\/pre>\n<p>to<\/p>\n<pre>\/dev\/sda2 \/ ext4 defaults,errors=remount-ro 0 1<\/pre>\n<p>Reconfigure journaling:<\/p>\n<pre>joe \/etc\/systemd\/journald.conf<\/pre>\n<p>and change<\/p>\n<pre>[Journal]\n#Storage=auto<\/pre>\n<p>to<\/p>\n<pre>[Journal]\nStorage=persistent<\/pre>\n<p>and reboot.<\/p>\n<p>Login as &#8220;admin&#8221; user again:<\/p>\n<pre>su -<\/pre>\n<p>Set time and configure sources for a Debian update:<\/p>\n<pre>ntpdate 0.pool.ntp.org<\/pre>\n<pre>joe \/etc\/apt-\/sources.list<\/pre>\n<p>Edit to<\/p>\n<pre>deb http:\/\/deb.debian.org\/debian bullseye main\ndeb-src http:\/\/deb.debian.org\/debian bullseye main\ndeb http:\/\/deb.debian.org\/debian-security\/ bullseye-security main\ndeb-src http:\/\/deb.debian.org\/debian-security\/ bullseye-security main\ndeb http:\/\/deb.debian.org\/debian bullseye-updates main\ndeb-src http:\/\/deb.debian.org\/debian bullseye-updates main\ndeb http:\/\/deb.debian.org\/debian bullseye main contrib non-free\ndeb-src http:\/\/deb.debian.org\/debian bullseye main contrib non-free\ndeb http:\/\/deb.debian.org\/debian-security\/ bullseye-security main contrib non-fr\ndeb-src http:\/\/deb.debian.org\/debian-security\/ bullseye-security main contrib no\ndeb http:\/\/deb.debian.org\/debian bullseye-updates main contrib non-free\ndeb-src http:\/\/deb.debian.org\/debian bullseye-updates main contrib non-free\ndeb http:\/\/deb.debian.org\/debian bullseye-backports main contrib non-free\ndeb-src http:\/\/deb.debian.org\/debian bullseye-backports main contrib non-free<\/pre>\n<p>Update system and install a few utilities:<\/p>\n<pre>apt-get update\napt-get upgrade\napt-get install ntp\napt-get install parted<\/pre>\n<p>Fix partition:<\/p>\n<pre>parted<\/pre>\n<pre>select \/dev\/sda\nprint\n...enter \"Fix\" if requested...\nquit\n... repeat for \/dev\/sdb<\/pre>\n<p>Now, reboot NAS again. It should come up normally and can be used pretty much as a normal Linus system with &#8211; depending on the drive &#8211; plenty of space left for file storage.<\/p>\n<h3>Bootloader Reset<\/h3>\n<p>If one wants to revert to the original bootloader options, reset uBoot like this:<\/p>\n<pre>setenv bootcmd nand read.e 0xa00000 0x500000 0x500000 \\; nand read.e 0xf00000 0xa00000 0x500000 \\; bootm 0xa00000 0xf00000\nsetenv bootargs root=\/dev\/ram console=ttyS0,115200 max_loop=32\nprintenv bootcmd bootargs\nsaveenv<\/pre>\n<p>On the next startup, press and hold the reset button to revert the system to the default login (admin, no password).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The goal of this project was to replace the insecure (see references below) operating system on a WD MyCloud EX2 NAS device with a newer Linux Kernel and a custom boot installation that enables minimally SSH and allows alternative application&hellip; <a class=\"continue\" href=\"https:\/\/www.ferzkopp.net\/wordpress\/2023\/12\/23\/custom-linux-on-wd-mycloud-ex2-via-wsl2\/\">Continue Reading<span> Custom Linux on WD MyCloud EX2 via WSL2<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":575,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[71],"tags":[90,91],"class_list":["post-569","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","tag-hardware","tag-wsl2"],"_links":{"self":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/comments?post=569"}],"version-history":[{"count":23,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/569\/revisions"}],"predecessor-version":[{"id":607,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/569\/revisions\/607"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/media\/575"}],"wp:attachment":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/media?parent=569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/categories?post=569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/tags?post=569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}