An article on how to install an SMB server for a Ceph cluster on RHEL. The article also covers how to deploy SMB in HA mode with AD join support.
Yes, you can install it using native Ceph tools, but unfortunately, their instructions are not very well written, and HA support is not fully completed.
At the time of writing this article, the current versions are:
RHEL: 9.6
Ceph: 19.2.3
We are going to do this by deploying on a Podman container. For that, we will be using the UBI 9 Init image. We are using the Init version because we would need to install multiple packages inside the UBI.
In my case, we are going to keep all the files inside this folder:
/mnt/containersdata/ubi9init-smb
No need to explain: ideally this folder should be shared across the SMB nodes.
Containerfile
First file would be Containerfile
Currently, we can’t natively install ceph-common 19.2.3 on RHEL 9.6, so to minimize any compatibility issues, we will install ceph-common 19.2.2 and mount CephFS from inside the container.
Another issue you may face is installing ctdb from RHEL repositories. For that, you would need to activate the Resilient Storage repository for RHEL 9 EUS (Extended Update Support).
Since it’s not always possible to install a Tesla Wall Connector, here’s a relatively simple and effective solution for an outdoor, waterproof Tesla Mobile Charger—if that’s a more doable option for you.
You can simply use a Pelican 1400 Case, which fits the charger perfectly. The biggest challenge is figuring out how to pass the charger plug through the case. For that, you can use icotek gland adapters. For this specific project, I used the KVT-ER 50|2 model. It’s surprisingly affordable and high quality.
Spoiler alert: I’m not a professional electrician. This should be considered a DIY project. Also—Hubbell gear can be pricey.
Here’s how my setup looks for a 20 amp, 250V solution:
Hubbell waterproof wall outlet (HBL2320SW) installed in the backyard, paired with the matching plug HBL2321SW. You’ll most likely need a GFCI breaker for safety in this case.
12/3 SOOW cable – I bought a 100 ft reel and used about 90 ft. Yes, there’s a small voltage drop over that distance, but it’s minimal—around 1 volt difference.
To protect the cable from physical damage, I covered it with HydroMaxx 3/4″ Flexible Corrugated Black PVC Split Tubing Wire Loom. 100 ft was enough. Garden staples work great to secure it in place.
Just before the Pelican case, I installed another Hubbell HBL2323SW and HBL2321SW, so I can quickly disconnect the box if needed.
Inside the Pelican 1400 case, I drilled two holes—one for the icotek gland, and a smaller one for the SOOW cable.
To prevent damage from accidental tugs, I used heavy-duty zip ties to bind the SOOW cable and the charger plug cable together, effectively making them behave like one single cable.
For the 6-20R connector, I used a Bryant BRY5469NC. It’s well-made, but note that 12/3 SOOW cable is near the upper limit of acceptable diameter for this connector. A good alternative is the Legrand PS5469XGCM.
I mounted the charger inside the Pelican case using 1×1 inch double-sided tape to keep it from shifting when the case is lifted.
Don’t forget to use a plug protector on the charger connector to keep it clean and dry.
This setup has been working great. It’s survived heavy snow weeks, constant rain, ect. I haven’t noticed any overheating. I even installed an Evo temperature sensor and check it every 2–3 months—no issues so far.
It’s definitely more durable and reliable than the typical outdoor electrical boxes you find on Amazon. Totally worth the effort to plan and install.
With everything connected, the Tesla app shows around 240V and a charging speed of 14 miles per hour.
One of the easiest ways to start investigating why your AWS Lambda function is failing is to check the timeout setting allocated for the function. By default, the timeout is set to 3 seconds, which is often not enough for certain operations.
As shown in my screenshot, based on approximately 3,000 operations my code computed, a few of them took longer than 3 seconds to complete.
However, this doesn’t necessarily mean your code is poorly written or unoptimized. In many cases, the issue depends on what happens after the function executes. For example, if your function makes an API call to another service, the response time can vary significantly, and there’s little you can do to speed it up.
As we all know, Squarespace does not have a table of contents block. However, there is a simple solution that is based on what Squarespace uses on its own website. Assuming you are already familiar with most Squarespace settings, I have simplified this article to make it as easy as possible.
Why It Is Important
There are at least two reasons why a table of contents might be important for your website. First of all, it is much easier to navigate through the page. You just can’t deny this fact. Some articles are 3000-5000 words, and if you don’t want to scroll through the whole article to find a piece of specific information, only Command+F may help. With a table of contents, the chances that your visitor would find the needed information is higher. Not even saying that it will be done much faster.
The second reason might not be that obvious as the first one, but still very important from the SEO point of view. When you google about something specific, Google sometimes may give you a link to the exact part of the page where this information is located. One of the reasons Google is able to do that is because the ID you add to your subtitle is one of the requirements for a table of contents. We will talk about that in the Anchor Links paragraph.
How It Works
Essentially, you need to create anchor links, then add custom HTML code that will be converted to a table with links. Squarespace already has everything required for that, so there is no need to write any code from scratch. We will be using the exact same CSS and HTML that Squarespace uses on its own website. For example, let’s open the Creating anchor links page. There is a table of contents with a simple and clean design that would work for many websites. We will make exactly the same table for our Squarespace website. You, of course, can adjust it to your own needs.
CSS Code
Now, using developer tools, we can find HTML and CSS used on the Squarespace website. CSS code goes to website settings and HTML code goes to a webpage or blog post. CSS is a one-time action and it would work for all the future tables of content you will be creating. To save your time, here is the CSS code I extracted from the Squarespace website:
The table of contents needs to know where it must send you to, and the anchor links would help with that. If you don’t know what an anchor link is, then the simplest answer is that regular links move you between pages, but anchor links move you inside the specific page.
In our case, we would need to “attach” an ID to specific parts of a page. For example, a subtitle would work best for it. So, instead of adding a regular heading title in Squarespace, you would need to add a code or markdown block and insert this line:
<h3 id="important">1. Why It Is Important</h3>
Replace h4 at the beginning and the end to accommodate your needs.
One important thing – this ID must be unique across a page.
HTML Code
The final part is inserting HTML code that would be converted to a table and would be adjusted with the CSS we already inserted.
Basically, you would only need to change the title of your list and add/remove needed lines. The value of the “a href” must match with the Anchor ID we discussed in step 4.
<aside class="table-of-contents">
<span class="toc-title">Sections</span>
<ol class="toc-links">
<li><a href="#important">1. Why It Is Important</a></li>
<li><a href="#how-it-works">2. How It Works</a></li>
<li><a href="#css">3. CSS Code</a></li>
<li><a href="#anchor-links">4. Anchor Links</a></li>
<li><a href="#html">5. HTML Code</a></li>
<li><a href="#automation">6. Automation Solution</a></li>
<li><a href="#updates">7. Updates</a></li>
</ol>
</aside>
Automation Solution
Now the most exciting part! What if you need to create a table of contents every day? There are many solutions. For example, you can use plugins or you can write an HTML code as discussed before. Both variants have pros and cons, so that is why I create a simpler solution and it works through Google Spreadsheets.
Essentially, you just need to type your data and this spreadsheet would generate the needed HTML code which you would need to copy on your page or blog post using the Code block.
Type your link titles (subtitles).
You may click Auto ID if you want this spreadsheet to automatically generate the link HTML ID based on subtitle.
Don’t forget to choose the desired text style (h1-h4) in the G4 cell.
Select or type table title in G3 cell.
Copy/paste code from the green field into the Code block.
Copy/paste Subtitle HTML Code instead of your regular subtitle using the Markdown Block.
You are very welcome to copy this spreadsheet and use it for your needs. In my workflow, I keep the “Data” sheet untouched and just create a duplicate of this sheet for every article.
Updates
1.04
New simplified/improved algorithm. So it would be easier to add new features and options in the future.
Line numbers. Can be applied to the table, subtitles, or both.
Same text style for all subtitles. No need to choose it for every single subtitle.