{"id":1199,"date":"2023-03-27T12:00:00","date_gmt":"2023-03-27T19:00:00","guid":{"rendered":"https:\/\/letsbuildroboticswithshadow8472.com\/?p=1199"},"modified":"2023-03-27T04:27:07","modified_gmt":"2023-03-27T11:27:07","slug":"nextcloud-dangling-in-the-works","status":"publish","type":"post","link":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/2023\/03\/27\/nextcloud-dangling-in-the-works\/","title":{"rendered":"Nextcloud Dangling in the Works"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Good Morning from my Robotics Lab! This is Shadow_8472, with a stubborn-project update. Let\u2019s get started!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nextcloud as a project comes with a lot of strings and hooks. Every time I sit down to work on it, the feature creep closes in: multiple volumes for speed and capacity, MariaDB container so SQLite doesn\u2019t choke serving clients, a pod for MariaDB to live in alongside Nextcloud, Redis for RAM caching (Out of my scope, but worth a mention), Ansible Vault for password management (automation tool I\u2019d need a month to learn), podman secrets, Philomena image board software \u2013 not to mention the volumes I learned about the other week! As noted in previously, the container I\u2019m using from docker.io can take care of itself, but it will work a lot better with even a few of these things.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p class=\"wp-block-paragraph\">In my ideal configuration, all my containers\u2019 persistent data lives on GoldenOakLibry so my old, red laptop can take over on critical Podman containers when ButtonMash is booted to Debian for photo scanning duty. The big, hanging question then is if GoldenOakLibry\u2019s internal HDD\u2019s absolutely need to spin up to serve shares hosted on NAS volumes mounted from an external SSD.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<p class=\"wp-block-paragraph\">HDD: Hard Disk Drive<br>NAS: Network Attached Storage<br>SSD: Solid State Drive<\/p>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">My initial tests involved verifying that a drive could be mounted externally, then rebooting the NAS. I was expecting either a 1 or a 50 second wait, but instead I kept hitting \u201cStale file handle\u201d errors when I tried mounting the external share. My second round of trials a week or two later exhausted search pages worth of results to learn how NFS shares change a few invisible details when restarted. Either something wasn\u2019t ready when needed during boot, or my client just needs a while to refresh those details. It works in the long run, and external shares are not dependent on internal disk spinup. Time to move on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Having solved the last known problem, I started layering the bits I had solved while frustrated with the USB share. I prepared three Podman volumes: two for Nextcloud prioritizing high-capacity and speed, respectively, and one for an SQL database. A pod housing MariaDB (the SQL database) and Nextcloud containers mounts these volumes (!). Podman secrets safely injects the database password so MariaDB and Nextcloud can work together \u2013 not strictly necessary for my application, but a good habit to get in in case I go in the direction of creating images from existing containers. Once the cloud is running, I want to try adding an image board to view the pictures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(!) NFS \u2013as it turns out\u2013 does not appreciate a number of the acrobatics rootless Podman performs with Namespaces. I don\u2019t have the specifics memorized, but when Podman makes a container, the host\u2019s user ID is mapped to root within that container. Podman then assigns variations of the host\u2019s user ID to non-root users within the container as defined by a namespace. The NFS protocol wasn\u2019t designed with namespaces in mind. To NFS, it looks like you\u2019re trying to access another user\u2019s files \u2013 possibly without permission. While this reportedly doesn\u2019t stop rootless Podman from working well over NFS over normal circumstances, there are a bunch of search results talking about the snag when working with container images over NFS. Based off my experiences for this post, the same appears to hold true for volumes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Takeaway<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As much as I wanted this to be the last installment, this issue is a post in and of itself, and I\u2019m getting burned out again over trying to come back to it. I\u2019ll try coming back to this in around a month or so.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final Question<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Have you successfully used Podman volumes over NFS? Please, do tell me all about it in the comments below or on my <a href=\"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/discord-invite\/\" target=\"_blank\" rel=\"noreferrer noopener\">Socials<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Good Morning from my Robotics Lab! This is Shadow_8472, with a stubborn-project update. Let\u2019s get started! Nextcloud as a project comes with a lot of strings and hooks. Every time I sit down to work on it, the feature creep closes in: multiple volumes for speed and capacity, MariaDB container so SQLite doesn\u2019t choke serving &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/2023\/03\/27\/nextcloud-dangling-in-the-works\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Nextcloud Dangling in the Works&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[2,90],"tags":[54,138,216,215],"class_list":["post-1199","post","type-post","status-publish","format-standard","hentry","category-linux","category-red-hat-server","tag-nfs","tag-podman","tag-podman-volumes","tag-volume"],"_links":{"self":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts\/1199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/comments?post=1199"}],"version-history":[{"count":1,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts\/1199\/revisions"}],"predecessor-version":[{"id":1200,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts\/1199\/revisions\/1200"}],"wp:attachment":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/media?parent=1199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/categories?post=1199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/tags?post=1199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}