{"id":2260,"date":"2021-06-28T00:40:25","date_gmt":"2021-06-28T00:40:25","guid":{"rendered":"https:\/\/dft.wiki\/?p=2260"},"modified":"2026-06-08T22:35:50","modified_gmt":"2026-06-09T02:35:50","slug":"iso-installation-in-linode-and-digital-ocean-truenas","status":"publish","type":"post","link":"https:\/\/dft.wiki\/?p=2260","title":{"rendered":"ISO Installation in Linode and Digital Ocean (TrueNAS)"},"content":{"rendered":"<p>This post will download a TrueNAS ISO and boot it to install on Linode and DigitalOcean cloud providers, just as you would on a local virtual or physical machine.<\/p>\n<p>TrueNAS is an open-source Network-Attached Storage operating system based on FreeBSD that uses the OpenZFS file system. TrueNAS CORE (previously known as FreeNAS) is the world&#8217;s most popular software-defined storage.<\/p>\n<hr \/>\n<p><strong>LINODE<\/strong><\/p>\n<ul>\n<li>After creating a Linode (minimum 4GB RAM recommended), <strong>Power Off<\/strong>.<\/li>\n<li>Go to <strong>Settings &gt; Shutdown Watchdog &gt; Disable<\/strong>.<\/li>\n<li>In <strong>Storage<\/strong>, <strong>delete all<\/strong> existing disks and create new ones, allocating enough space on the secondary disk for the ISO installation.<\/li>\n<\/ul>\n<p>Example disk layout for a Linode with 160GB SSD:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2261\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-01-02.png\" alt=\"\" width=\"722\" height=\"169\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-01-02.png 722w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-01-02-300x70.png 300w\" sizes=\"auto, (max-width: 722px) 100vw, 722px\" \/><\/p>\n<ul>\n<li>Go to <strong>Configuration &gt; Edit<\/strong> and update the settings as follows:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2262\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-03-20.png\" alt=\"\" width=\"435\" height=\"126\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-03-20.png 435w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-03-20-300x87.png 300w\" sizes=\"auto, (max-width: 435px) 100vw, 435px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2263\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-03-20-copy-1.png\" alt=\"\" width=\"435\" height=\"108\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-03-20-copy-1.png 435w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-03-20-copy-1-300x74.png 300w\" sizes=\"auto, (max-width: 435px) 100vw, 435px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2264\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-04-05.png\" alt=\"\" width=\"439\" height=\"425\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-04-05.png 439w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-04-05-300x290.png 300w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2265\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-04-20.png\" alt=\"\" width=\"292\" height=\"280\" \/><\/p>\n<ul>\n<li><strong>Power On in Rescue Mode<\/strong> and run the following command in the <strong>WEBLISH Console<\/strong>:<\/li>\n<\/ul>\n<pre>curl https:\/\/download.freenas.org\/12.0\/STABLE\/U4\/x64\/TrueNAS-12.0-U4.iso | dd of=\/dev\/sdb<\/pre>\n<ul>\n<li>Once the download is complete, <strong>Reboot<\/strong> and open the <strong>GLISH Console<\/strong> to begin the installation:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2266\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-23.png\" alt=\"\" width=\"770\" height=\"532\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-23.png 770w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-23-300x207.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-23-768x531.png 768w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/p>\n<ul>\n<li>Follow the installation steps and select <strong>Boot via BIOS<\/strong> when prompted:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2267\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-49.png\" alt=\"\" width=\"770\" height=\"532\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-49.png 770w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-49-300x207.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_10-52-49-768x531.png 768w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/p>\n<ul>\n<li>When installation is complete, <strong>Power Off<\/strong> the VM, then go to <strong>Configuration &gt; Edit<\/strong> and set the root device to the newly installed system disk:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2268\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-04-40.png\" alt=\"\" width=\"434\" height=\"75\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-04-40.png 434w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-04-40-300x52.png 300w\" sizes=\"auto, (max-width: 434px) 100vw, 434px\" \/><\/p>\n<ul>\n<li>Power On the VM and monitor the boot process in the GLISH Console. This may take a few minutes.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2270\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-16-15.png\" alt=\"\" width=\"770\" height=\"532\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-16-15.png 770w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-16-15-300x207.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-16-15-768x531.png 768w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/p>\n<ul>\n<li>Open a browser and navigate to the address shown on screen.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2271\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-19-11.png\" alt=\"\" width=\"1920\" height=\"968\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-19-11.png 1920w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-19-11-300x151.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-19-11-1024x516.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-19-11-768x387.png 768w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-19-11-1536x774.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<ul>\n<li>Installation is complete. A few additional recommendations:\n<ul>\n<li>Always use HTTPS instead of HTTP.<\/li>\n<li>Use a proper SSL\/TLS certificate instead of the default self-signed one.<\/li>\n<li>Use Linode&#8217;s Firewall to restrict access to your NAS, allowing only trusted sources such as your physical or virtual network IPs.<\/li>\n<li>If your clients are also on Linode, allow access over a VLAN or via private IPs to avoid metered traffic on the public interface.<\/li>\n<li>Consider powering down the VM, deleting the temporary installation partition, and converting it to a SWAP partition:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2273\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-29-40.png\" alt=\"\" width=\"720\" height=\"172\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-29-40.png 720w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_11-29-40-300x72.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/p>\n<hr \/>\n<p><strong>DIGITAL OCEAN<\/strong><\/p>\n<p>DigitalOcean does not offer a disk manager configuration like Linode, so booting directly from an ISO image is not possible.<\/p>\n<p>The workaround is to overwrite the boot block device with the TrueNAS ISO to run the installer in place of FreeBSD. TrueNAS is then installed onto an attached volume, and finally copied from that volume to the root of the Droplet disk (after which the volume can be removed).<\/p>\n<p>This same technique can be used to install pfSense and other distributions.<\/p>\n<ul>\n<li>After creating a FreeBSD Droplet (minimum 4GB RAM recommended), attach a Volume to it:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2280\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-56-36.png\" alt=\"\" width=\"804\" height=\"801\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-56-36.png 804w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-56-36-300x300.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-56-36-150x150.png 150w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-56-36-768x765.png 768w\" sizes=\"auto, (max-width: 804px) 100vw, 804px\" \/><\/p>\n<ul>\n<li>SSH into the Droplet and run:<\/li>\n<\/ul>\n<pre>wget https:\/\/download.freenas.org\/12.0\/STABLE\/U4\/x64\/TrueNAS-12.0-U4.iso\r\nswapoff \/dev\/gpt\/swap\r\nsysctl kern.geom.debugflags=0x10\r\ndd if=TrueNAS-12.0-U4.iso of=\/dev\/vtbd0 bs=512k\r\nshutdown -r now<\/pre>\n<ul>\n<li>Open the Droplet Console and proceed with the installation:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2277\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-47-06.png\" alt=\"\" width=\"1044\" height=\"879\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-47-06.png 1044w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-47-06-300x253.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-47-06-1024x862.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_19-47-06-768x647.png 768w\" sizes=\"auto, (max-width: 1044px) 100vw, 1044px\" \/><\/p>\n<ul>\n<li>When prompted, select \/dev\/da0 (the attached volume) as the installation target:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2281\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-03-20.png\" alt=\"\" width=\"575\" height=\"207\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-03-20.png 575w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-03-20-300x108.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/p>\n<ul>\n<li>Once installation is complete, turn off the VM.<\/li>\n<li>Go to <strong>Destroy &gt; Rebuild<\/strong> using the same FreeBSD version as before.<\/li>\n<li>SSH into the Droplet again and run:<\/li>\n<\/ul>\n<pre>swapoff \/dev\/gpt\/swap\r\nsysctl kern.geom.debugflags=0x10\r\ndd if=\/dev\/da0 of=\/dev\/vtbd0 bs=512k\r\nshutdown -r now<\/pre>\n<ul>\n<li>The VM will reboot without network connectivity.<\/li>\n<li>Open the Console and configure the NIC:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2284\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-27-41.png\" alt=\"\" width=\"1044\" height=\"879\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-27-41.png 1044w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-27-41-300x253.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-27-41-1024x862.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-27-41-768x647.png 768w\" sizes=\"auto, (max-width: 1044px) 100vw, 1044px\" \/><\/p>\n<ul>\n<li>Set the default gateway to give the server internet access:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2285\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-31-54.png\" alt=\"\" width=\"1044\" height=\"879\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-31-54.png 1044w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-31-54-300x253.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-31-54-1024x862.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-31-54-768x647.png 768w\" sizes=\"auto, (max-width: 1044px) 100vw, 1044px\" \/><\/p>\n<ul>\n<li>Configure DNS:<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2288\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-44-40.png\" alt=\"\" width=\"1044\" height=\"879\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-44-40.png 1044w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-44-40-300x253.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-44-40-1024x862.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/06\/Screenshot_2021-06-27_20-44-40-768x647.png 768w\" sizes=\"auto, (max-width: 1044px) 100vw, 1044px\" \/><\/p>\n<ul>\n<li>Open a browser, navigate to the address shown on screen, and log in with the root user and the password set during installation.<\/li>\n<li>The attached volume can now be deleted, or kept and added to a pool to expand the NAS storage capacity.<\/li>\n<li>To use the remaining unpartitioned space on the main disk (only 20GB is used by the system and the GPT is corrupted), run:<\/li>\n<\/ul>\n<pre>gpart show vtbd0\r\ngpart recover vtbd0\r\ngpart show vtbd0\r\ngpart add -t freebsd-ufs -b <span style=\"color: #993366;\"><strong>41911336<\/strong><\/span> -s <span style=\"color: #3366ff;\"><strong>125860784<\/strong><\/span> vtbd0\r\ngpart show vtbd0\r\nnewfs -U \/dev\/vtbd0p3\r\nmkdir \/local_storage\r\nmount \/dev\/vtbd0p3 \/local_storage<\/pre>\n<p>Note: the highlighted numbers refer to the <span style=\"color: #993366;\"><strong>BEGIN<\/strong><\/span> offset and <span style=\"color: #3366ff;\"><strong>SIZE<\/strong><\/span> of the free space to be allocated as the new partition.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post will download a TrueNAS ISO and boot it to install on Linode and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2260","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/2260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2260"}],"version-history":[{"count":10,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/2260\/revisions"}],"predecessor-version":[{"id":5720,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/2260\/revisions\/5720"}],"wp:attachment":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}