tag:blogger.com,1999:blog-70363794824871924382024-03-06T01:05:32.099+01:00the birdhouse in my soulplenty of grains to pickBert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.comBlogger92125tag:blogger.com,1999:blog-7036379482487192438.post-32865368685422699992021-03-19T14:46:00.003+01:002021-03-19T14:46:48.104+01:00Extreme makeover: Sparcstation IPC edition<p>The Sparcstation IPC that I owned since around 1995 died. It sat in a cupboard for 15 years, so it may have been dead for a long time already. Upon trying to power it on, it did absolutely nothing.</p><p></p><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjctD_WnhU-5Fe3iwWko4Qa5zNzQWN_thTmkaDEQXRlupCnYLVOJsw45i7O76jacx7EKifcRwsrLKk6XwMB7MMs1IoN4qonGiUuPPI5IqqsZjeqEZIqFPVHIBEKejKnuMBaWIOcX_dFQw/s1600/1615748482894196-0.png" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjctD_WnhU-5Fe3iwWko4Qa5zNzQWN_thTmkaDEQXRlupCnYLVOJsw45i7O76jacx7EKifcRwsrLKk6XwMB7MMs1IoN4qonGiUuPPI5IqqsZjeqEZIqFPVHIBEKejKnuMBaWIOcX_dFQw/s1600/1615748482894196-0.png" width="400" />
</a>
</div><br />
<p>I knew about early mini-ITX mods using the IPC/IPX case, like this one from 2002: <a href="https://www.mini-itx.com/projects/sparc/">https://www.mini-itx.com/projects/sparc/</a> , but nostalgia of being able to boot Linux/Sparc on this IPC kept me from doing my own mod. With the original hardware dead (probably just the PSU actually), this changed everything. A bit of research showed other Sparcstation mini-ITX mods, some with larger sparc4/5/10/20 cases (e.g. <a href="http://www.squit.co.uk/computers/edenstation5.html">http://www.squit.co.uk/computers/edenstation5.html</a> ), and one very interesting mod of an IPC: <a href="http://www.moria.de/~michael/comp/ipc/">http://www.moria.de/~michael/comp/ipc/</a> . Michael used an industrial Commell LV-671 motherboard. Commell went through more than 30 variants of that board in the meantime, and has just released an updated Tiger Lake version: the <a href="http://www.commell.com.tw/Product/SBC/LV-6712.HTM">LV-6712</a> carrying the <a href="https://ark.intel.com/content/www/us/en/ark/products/208076/intel-core-i7-1185g7e-processor-12m-cache-up-to-4-40-ghz.html">Intel i7-1185G7E</a>. It's a full-height mini-ITX board, but the IPC case should have enough z-axis space. Challenge: to update the 25 MHz 32-bit Sparcstation IPC to a 1.2-4.4 GHz 64-bit Intel i7 workstation, go from 48 MB RAM to 32 GB (max 64 GB), and from 10Mbps ethernet to 1Gbps (and even 2.5Gbps!), and from SCSI-I HDD to NVMe SSD!<span></span></p><a name='more'></a><p></p><p>First step: strip the contents of the IPC case. The original 200MB SCSI hard drive was replaced by a 3GB SCSI drive soon after I got the IPC. Now I dismantled the drive to show my kids what a hard drive looks like on the inside. I removed the remains from the lunchbox case.</p><p></p><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUh1uZPKIVjiHJGpHe5w8n7Mq9_m3sjxffILanfxguLiuSM2xHCJyQgtocmlShESIDjR2YMJtuDrUkrBY0hXkKU9Jz_22b9ULpMNsw_jKQs2eGNW5ZN5zsjyXHkC3rWRx5AsOFCbIdRTU/s1600/1615750658563644-0.png" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUh1uZPKIVjiHJGpHe5w8n7Mq9_m3sjxffILanfxguLiuSM2xHCJyQgtocmlShESIDjR2YMJtuDrUkrBY0hXkKU9Jz_22b9ULpMNsw_jKQs2eGNW5ZN5zsjyXHkC3rWRx5AsOFCbIdRTU/s1600/1615750658563644-0.png" width="400" />
</a>
</div><br /><p></p><p>The LV-6712 can be powered with 12V DC power, which means we can forego the need for a full ATX power supply. Michael built a 12V power supply into the original power supply housing, and I decided to follow his suggestion. Cutting away a bit of the outer casing of a TracoPower TXH 060-112 AC/DC, I was able to fit it in, and even keep the original passthrough power connector.</p><p>The original case fan was powered directly from the IPC PSU, but the new motherboard has a PWM case fan header. Fortunately the case fan is a standard 60x60x25mm one. I found a PWM-capable replacement, the Noctua NF-A6x25. I expect it to be less noisy too, with 30 years of engineering progress advantage against the original Mitsubishi fan.</p><p>A lot of material needed to be cut and sanded away to put the mini-ITX motherboard as close to the case side wall as possible. Our case fan and the PSU housing, mounted in the case ceiling, come down very close to the two serial ports on the motherboard.</p><p>Then I positioned the IO shield against the back and tried a couple of configurations. I settled on the final location and cut the hole for the entire width of the IO shield. I didn't cut to the full height, because I needed the remaining plastic for structural integrity (since the metal plate originally supporting the back wall has gone!).</p><p>I cut the original external SCSI connector from the IPC motherboard to fill the hole it originally occupied. Three hex motherboard spacers were placed in holes drilled in the plastic floor, the fourth sits in one of the original rubber spacers that supported the IPC motherboard. I used two more spacers to support the IO shield.</p><p></p><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjss-xfiCQdxt8G-AUgBsNe44vaGh2Hn56kyhY3S481pFuDbMh4WdYZZmzvZfI1GBTZTDm9Ra2SZpn_0u4vv7L0hAYxoED7hCFxSXCZq999K4HC4Cza9B72O6tHW4RkuriMEmQnQDGiOhk/s1600/1615751775149403-0.png" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjss-xfiCQdxt8G-AUgBsNe44vaGh2Hn56kyhY3S481pFuDbMh4WdYZZmzvZfI1GBTZTDm9Ra2SZpn_0u4vv7L0hAYxoED7hCFxSXCZq999K4HC4Cza9B72O6tHW4RkuriMEmQnQDGiOhk/s1600/1615751775149403-0.png" width="400" />
</a>
</div><br /><p></p><p>This supports the motherboard at a height that allows access to all IO ports. </p><p></p><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgntrcco-hpQ1TixM6Dyak3jgFG5oF72GBpO1LiDGFEcvLjZufi8cYcC5Qh09XjLGJF-FZ8OTXreN5auV9ndctcPXdaHuaAeFVXjgBuUlYLoe67o2Y4Iqx5R1TRctIFkzQa45aI5DrAB8/s1600/1615751772241449-1.png" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgntrcco-hpQ1TixM6Dyak3jgFG5oF72GBpO1LiDGFEcvLjZufi8cYcC5Qh09XjLGJF-FZ8OTXreN5auV9ndctcPXdaHuaAeFVXjgBuUlYLoe67o2Y4Iqx5R1TRctIFkzQa45aI5DrAB8/s1600/1615751772241449-1.png" width="400" />
</a>
</div><br /><p></p><p>With the motherboard jumpered to AT mode, it boots when the power comes on. As an alternative, the "always power on after power restore" option in the BIOS also works. While it is technically possible to put 3.5 and/or 2.5 inch SATA drives in the ceiling bracket, I currently have enough space on the NVMe SSD. I installed the provided power breakout cable, but it sits unused in the case.</p><p>I bought a USB pin header to dual USB 2.0 adapter, but can't use it for two reasons: the key of the 9-pin connector is on pin 10, but the adapter expects it on pin 9. Worse, the pin header is at the edge of the motherboard, sitting against the side of the case, and the adapter extends about 1 cm in that direction. Plan B: a 4-pin USB pin header to single USB 2.0 port adapter, on a 20 cm cable. I plugged in a USB Bluetooth 5.0 adapter and left it inside the case. </p><p>Currently Ubuntu 20.10 supports the integrated Xe graphics of this board, so that's what I will be running until an LTS distribution picks up Xe support. The IPC deserves enterprise workstation-grade stability!<span></span></p><!--more--><p></p><p>Further modifications after some usage: </p><p>I configured the "down" cTDP profile in the BIOS, which reduces the base frequency and TDP of the CPU (12W vs 28W on the standard "nominal" profile. The third profile is 15W TDP). That should help with both power draw and heat production as well as noise levels.</p><p>The included CPU fan is rather loud for my ears, but unfortunately the included heatsink only has 50mm fan holes, which is a size not commonly available. Alternative heatsinks for the mobile FCBGA1449 socket are also hard to find. The original fan (50x50x10mm) keeps the package at +- 45 degrees at 5700 rpm with occasional jumps to 50 and 60 degrees while showing a full-screen 1440p Youtube video. </p><p>A Noctua 40x40x20mm fan maintains a comparable temperature at under 4000 rpm. Full load does chase the temperature up, with the Noctua not able to bring it down completely. Unfortunately, a 60x60x25mm fan (same model as the case fan) doesn't fit under the steel drive cage. Even without the drive cage, the case top requires a gentle push to close. That force can't be good for the heatsink nor the motherboard underneath it. On the other hand, it keeps the cpu cool at under 2000 rpm (idle) and it maintains a reasonable CPU temperature below 3000 rpm even with load. As soon as I can find a silent 50x50x20mm or 60x60x20mm PWM fan, I'll get it. In hindsight, mounting the motherboard as low as possible (and sanding away more material at the back for the I/O shield) would have been better. Two or three mm would make a difference. I could cut away a part of the drive cage, and maybe also thin away the underside of the PSU case as an alternative. Fortunately the PSU case is perforated, so the fan can suck in air even when the PSU sits directly on top of it.</p><p>I've even considered installing some heatpipes to transfer the heat of the heatsink to a radiator next to the board (there is a good 5 or 6 cm of lateral space) and put a fan on that radiator. The main reason I'm not going to do that (yet) is the risk of damaging a component that I can't replace...</p><p><br /></p><p><br /></p>Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-33997663659966258992020-11-15T18:19:00.008+01:002020-11-15T19:08:52.738+01:00Programming Micro:bit remotely<div class="separator" style="clear: both; text-align: center;">
</div>The Micro:bit track of our local Coderdojo went virtual during a COVID-19 peak. This created a challenge: not all kids have Micro:bits at home, and the makecode Micro:bit simulator doesn't simulate all extensions and functions. We provided an e-mail gateway to remotely program Micro:bits, with a live webcam view of the running programs. Our solution runs on a Linux machine, which could be a regular PC or even a Raspberry Pi. Please make sure your Linux box can power the Micro:bits and the extensions you connect, or otherwise use a powered USB hub to connect them.<div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6RAnqYwpuAo6E6LxFIkUcKQt30T9IVtFFLFZmA5RtfuQ_Ytf0dx8nElGSdXMuwk2zXFL5lDp2npedLnvqaii9rxswilV8CQVofWOwlY6FAkUMzM84MQnycqV-d_OdIy7Wqg7pO71BEeE/s1600/1605463305778435-0.png" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6RAnqYwpuAo6E6LxFIkUcKQt30T9IVtFFLFZmA5RtfuQ_Ytf0dx8nElGSdXMuwk2zXFL5lDp2npedLnvqaii9rxswilV8CQVofWOwlY6FAkUMzM84MQnycqV-d_OdIy7Wqg7pO71BEeE/s1600/1605463305778435-0.png" width="400" />
</a></div><h2 style="text-align: left;">Create a mailbox </h2><div>We created a dedicated mailbox that is accessible via IMAP or POP3. In our case, we used a local mailserver, but an account at an external e-mail provider could be used as well. </div><h2 style="text-align: left;">Install fetchmail and procmail </h2><div>Fetchmail can poll an IMAP or POP3 mailbox and save the fetched mails locally. Local delivery is done via procmail. Our fetchmail config is
</div><div><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span></p><blockquote><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">#### .fetchmailrc</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br /></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>set daemon 60</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>set logfile fetchmail.log</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br /></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>poll mailserver-FQDN proto POP3</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>user "mail-username" pass "mail-password" is "pi" postconnect "/home/pi/microbit/munpack-microbit.sh"</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>ssl</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>fetchall</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>no keep</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>no rewrite</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>mda "/usr</span><span style="font-variant-ligatures: no-common-ligatures;">/bin/procmail -f %F -d %T";</span></p></blockquote><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><br /></span></p>Our local user is "pi", and we poll our mailbox every 60 seconds. The postconnect script will unpack the attachments and write them to the Micro:bit (see below). We need the mail messages containing the Micro:bit programs as separate files, so we configure procmail to save them in Maildir format. Our .procmailrc</div><div><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span></p><blockquote><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">#.procmailrc.</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">#</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">SHELL=/bin/bash</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">LINEBUF=4096</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">PATH=/bin:/usr/bin:/usr/local/bin:/opt/local/bin</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">VERBOSE=off</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">MAILDIR=/home/pi/maildir</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">DEFAULT=$MAILDIR/inbox/ # See the slash!</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">LOGFILE=$HOME/procmaillog</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">FORMAIL=/usr/bin/formail</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">SENDMAIL=/usr/sbin/sendmail</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><br /></span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">## save everything in Maildir format in ~/maildir</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">#</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">:0</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">$MAILDIR/</span></p></blockquote><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span></p>This means the fetched mails will be saved as individual files in ~pi/maildir/new/</div><h2 style="text-align: left;">Install mpack </h2><div>The mpack package provides the munpack command, which saves attachments from mail files. We integrate unpack into a shell script that copies the attached .hex files to the Micro:bit USB mass storage device: munpack-microbit.sh</div><div><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span></p></div><blockquote><div><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">#!/bin/bash</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br /></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">ls ~pi/maildir/new/???* 2> /dev/null > /dev/null || exit 0</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br /></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">for mailfile in ~pi/maildir/new/*; do<span class="Apple-converted-space"> </span></span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>munpack -C ~pi/microbit/ $mailfile ;<span class="Apple-converted-space"> </span></span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>mv $mailfile ~pi/maildir/cur/ ;</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">done</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br /></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">disklist=""</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">for disk in $(echo "sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl sdm sdn sdo"); do</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>[[ -L /sys/block/$disk ]] && [[ "$(cat /sys/block/$disk/size)" -le "131200" ]] && disklist="$disklist $disk"</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">done</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br /></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">for disk in $(echo $disklist); do</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>if [[ -L /sys/block/$disk ]]; then</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>#[[ "x$(cat /sys/block/$disk/size)" -eq "x16512" ]] || continue #flash size old Micro:bit firmware</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>#[[ "x$(cat /sys/block/$disk/size)" -eq "x131200" ]] || continue #flash size new Micro:bit firmware</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>[[ "$(cat /sys/block/$disk/size)" -le "131200" ]] || continue # only continue on small disks</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>[[ -d /tmp/$disk ]] || mkdir /tmp/$disk</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>[[ -e /tmp/$disk/MICROBIT.HTM ]] || sudo mount -t vfat /dev/$disk /tmp/$disk</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>fi</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">done</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">ls ~pi/microbit/*.hex 2> /dev/null > /dev/null || exit 0</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br /></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">for hexfile in ~pi/microbit/*.hex ; do</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> #</span>echo $hexfile | grep -iq scroll && disklist="sdh sdi sdj" # use fixed disklist for scroll:bit</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> #</span>echo $hexfile | grep -iq halo && disklist="sdg" # use fixed disklist for Kitronik ZIP Halo</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>[[ -d ~pi/microbit/used ]] || mkdir ~pi/microbit/used</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>for disk in $(echo $disklist); do</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>[[ -e /tmp/$disk/MICROBIT.HTM ]] && sudo cp $hexfile /tmp/$disk/</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>sudo sync</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>done</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space"> </span>mv $hexfile ~pi/microbit/used/</span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">done</span></p><p class="p2" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 13px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span></p><p class="p1" style="background-color: rgba(255, 255, 255, 0.75); font-family: Menlo; font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;">exit 0</span></p></div><div><br /></div></blockquote><p>Note that some actions like mount require root privileges, so the user running this (pi, in our case) needs passwordless sudo privileges. </p><h2 style="text-align: left;">Run it</h2><p>Now start fetchmail: fetchmail -f ~pi/.fetchmailrc . You can monitor the fetchmail log file (see fetchmailrc) using tail -f. Fetchmail will run as a daemon until you stop it using fetchmail -q. </p><div><br /></div>Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-4644798382286169092019-04-21T22:13:00.004+02:002023-02-02T15:10:03.464+01:00Which vSphere version is my VM running on?Several years ago, I created a list of ESXi versions with matching VM BIOS identifiers. The list is now complete up to vSphere 7.<br />
Your Linux runs on a VMware VM, but on which ESXi version? Even without access to the host nor vCenter, you can see for yourself: run "dmidecode" and look at lines 10, 11 and 12. The BIOS release date, the address and the runtime size are unique for each ESXi version. Starting from 7.0 U3, no address and size is reported, and the "Phoenix Technologies LTD" name changed to "VMware, Inc.". Look up your result in the following table:<br />
<table>
<tbody><tr><th>ESXi version </th><th>BIOS release date </th><th>Address </th><th>Size</th></tr>
<tr><td>ESX 2.5</td><td>04/21/2004</td><td>0xE8480</td><td>97152 bytes</td></tr>
<tr><td>ESX 3.0</td><td>04/17/2006</td><td>0xE7C70</td><td>99216 bytes</td></tr>
<tr><td>ESX 3.5</td><td>01/30/2008</td><td>0xE7910</td><td>100080 bytes</td></tr>
<tr><td>ESX 4</td><td>08/15/2008</td><td>0xEA6C0</td><td>88384 bytes</td></tr>
<tr><td>ESX 4U1</td><td>09/22/2009</td><td>0xEA550</td><td>88752 bytes</td></tr>
<tr><td>ESX 4.1</td><td>10/13/2009</td><td>0xEA2E0</td><td>89376 bytes</td></tr>
<tr><td>ESXi 5</td><td>01/07/2011</td><td>0xE72C0</td><td>101696 bytes</td></tr>
<tr><td>ESXi 5.1</td><td>06/22/2012</td><td>0xEA0C0</td><td>89920 bytes</td></tr>
<tr><td>ESXi 5.5</td><td>07/30/2013</td><td>0xEA050</td><td>90032 bytes</td></tr>
<tr><td>ESXi 6</td><td>09/30/2014</td><td>0xE9A40</td><td>91584 bytes</td></tr>
<tr><td>ESXi 6.5</td><td>04/05/2016</td><td>0xEA580</td><td>88704 bytes</td></tr>
<tr><td>ESXi 6.7</td><td>07/03/2018</td><td>0xEA520</td><td>88800 bytes</td></tr>
<tr><td>ESXi 6.7 U2</td><td>12/12/2018</td><td>0xEA490</td><td>88944 bytes</td></tr>
<tr><td>ESXi 7.0</td><td>12/09/2019</td><td>0xEA480</td><td>88960 bytes<br /></td></tr>
<tr><td>ESXi 7.0 U3</td><td>25/06/2021</td><td colspan="2">VMW71.00V.18227214.B64.2106252220</td></tr>
</tbody></table>NB These DMI properties are set at boot time. Even if your VM gets live-migrated to a host running a different vSphere version, your VM will keep the values it got from the host it booted on. What you see is the vSphere version of the host your VM booted on. It is the VM power-on that matters, so a guest OS reboot will not regenerate the DMI properties. A guest OS shut down on the other hand will also power off the VM, and the next power-on will regenerate the DMI properties.Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com7tag:blogger.com,1999:blog-7036379482487192438.post-81130473623769427492019-04-13T16:42:00.003+02:002019-04-16T20:40:31.135+02:00Reset lost root password on vSphere ESXi 6.7 VMware's solution to a lost or forgotten root password for ESXi is simple: go to <a href="https://kb.vmware.com/s/article/1317898?lang=en_US">https://kb.vmware.com/s/article/1317898?lang=en_US</a> and you'll find that "Reinstalling the ESXi host is the only supported way to reset a password on ESXi".<br />
<br />
If your host is still connected to vCenter, you may be able to use Host Profiles to reset the root password, or alternatively you can join ESXi in Active Directory via vCenter, and log in with a user in the "ESX Admins" AD group.<br />
<br />
If your host is no longer connected to vCenter, those options are closed. Can you avoid reinstallation? Fortunately, you can. You will need to reset and reboot your ESXi though. If you're ready for an unsupported deep dive into the bowels of ESXi, follow these steps:<br />
<br />
<ol>
<li>Create a bootable Linux USB-drive (or something else you can boot your server with). I used a CentOS 7 installation USB-drive that I could use to boot into rescue mode.</li>
<li>Reset your ESXi and boot from the Linux medium.</li>
<li>Identify your ESXi boot device from the Linux prompt. Use "<span style="font-family: Courier New, Courier, monospace;">fdisk -l /dev/sda</span>", "<span style="font-family: Courier New, Courier, monospace;">fdisk -l /dev/sdb</span>", etc. until you find a device that has 9 (maybe 8 in some cases) partitions. Partitions 5 and 6 are 250 MB and type "Microsoft basic" (for more information on this partition type, see <a href="https://en.wikipedia.org/wiki/Microsoft_basic_data_partition">https://en.wikipedia.org/wiki/Microsoft_basic_data_partition</a> ). These are the ESXi boot banks. My boot device was /dev/sda, so I'll be using /dev/sda5 and/or /dev/sda6 as partition devices.</li>
<li>Create a temporary directory for the primary boot bank: <span style="font-family: Courier New, Courier, monospace;">mkdir /tmp/b</span></li>
<li>Mount the first ESXi bootbank on that directory: <span style="font-family: Courier New, Courier, monospace;">mount /dev/sda5 /tmp/b</span></li>
<li>The current root password hash is stored inside state.tgz . We'll unpack this first. Create a temp directory for the state.tgz contents: <span style="font-family: Courier New, Courier, monospace;">mkdir /tmp/state</span></li>
<li>Unpack state.tgz: <span style="font-family: Courier New, Courier, monospace;">cd /tmp/state ; tar xzf /tmp/b/state.tgz</span></li>
<li>Inside state.tgz is local.tgz. Create a tempfile for the local.tgz contents: <span style="font-family: Courier New, Courier, monospace;">mkdir /tmp/local</span></li>
<li>Unpack local.tgz: <span style="font-family: Courier New, Courier, monospace;">cd /tmp/local ; tar xzf /tmp/state/local.tgz</span></li>
<li>Generate a new password hash: on a Linux system with Perl installed, you can use this: <span style="font-family: Courier New, Courier, monospace;">perl -e 'print crypt("MySecretPassword@","\$6\$AbCdEfGh") . "\n";'</span> . On a Linux system with Python installed (like the CentOS rescue mode), you can use this: <span style="font-family: Courier New, Courier, monospace;">python -c "import crypt; print crypt.crypt('MySecretPassword@')"</span> . Both will print out a new password hash for the given password: $6$MeOt/VCSA4PoKyHl$yk5Q5qbDVussUjt/3QZdy4UROEmn5gaRgYG7ckYIn1NC2BXXCUnCARnvNkscL5PA5ErbTddoVQWPqBUYe.S7Y0 . Alternatively, you can use an online hash generator, or you can leave the password hash field empty.</li>
<li>Edit the shadow file to change the root password: <span style="font-family: Courier New, Courier, monospace;">vi /tmp/local/etc/shadow</span> . Replace the current password hash in the second field of the first line (the line that starts with root:) with the new hash. Esc : w q Enter saves the contents of the shadow file.</li>
<li>Recreate the local.tgz file: <span style="font-family: Courier New, Courier, monospace;">cd /tmp/local ; tar czf /tmp/state/local.tgz etc</span></li>
<li>Recreate the state.tgz file: <span style="font-family: Courier New, Courier, monospace;">cd /tmp/state ; tar czf /tmp/b/state.tgz local.tgz</span></li>
<li>Detach the bootbank partition: <span style="font-family: Courier New, Courier, monospace;">umount /tmp/b</span></li>
<li>Exit from the Linux rescue environment and boot ESXi.</li>
<li>Do the same for the other boot bank (/dev/sda6 in my case) if your system doesn't boot from the first boot bank. NB logging in via SSH doesn't work with an empty hash field. The Host UI client via a web browser does let you in with an empty password, and allows you to change your password.</li>
</ol>
<br />
<br />
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #f4f4f4; background-color: #000000; background-color: rgba(0, 0, 0, 0.85)}
span.s1 {font-variant-ligatures: no-common-ligatures}
</style><style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #f4f4f4; background-color: #000000; background-color: rgba(0, 0, 0, 0.85)}
span.s1 {font-variant-ligatures: no-common-ligatures}
</style><style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #f4f4f4; background-color: #000000; background-color: rgba(0, 0, 0, 0.85)}
span.s1 {font-variant-ligatures: no-common-ligatures}
</style>Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-76185063610452762942018-09-23T15:40:00.000+02:002019-04-16T20:53:18.791+02:00Lego Boost candy sorter Our project for the 2018 Coderdojo Belgium Coolest Projects exhibition was a candy sorter, built in Lego and driven by Lego Boost. I took pictures and wrote building instructions while disassembling the robot afterwards, so you can now easily build a Skittle sorter in Lego yourself!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNXhoknd30uOVqTrAwzo10AYJwYXyQVj0jdqUPqSOhXxgwZoH7sOeFX8pc2-mA3rfb3F_ZQVzrrBTicXK6-1qoyTL8BBSW-0mXm1czc140QWySZGeOd9T5ALnpWj_o-WLtFl5P1Wwh49U/s1600/IMG_6769+crop.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1379" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNXhoknd30uOVqTrAwzo10AYJwYXyQVj0jdqUPqSOhXxgwZoH7sOeFX8pc2-mA3rfb3F_ZQVzrrBTicXK6-1qoyTL8BBSW-0mXm1czc140QWySZGeOd9T5ALnpWj_o-WLtFl5P1Wwh49U/s320/IMG_6769+crop.JPG" width="275" /></a></div>
<br />
<a href="http://bert.debruijn.be/Lego_Boost_candy_sorter_building_instructions.pdf" target="_blank">http://bert.debruijn.be/Lego_Boost_candy_sorter_building_instructions.pdf</a><br />
<br />Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com1tag:blogger.com,1999:blog-7036379482487192438.post-82228941800004478522017-04-14T17:27:00.002+02:002019-04-16T20:40:51.215+02:00Updating VCSA on a private networkUpdating the VCSA is easy when it has internet access or if you can mount the update iso. On a private network, VMware assumes you have a webserver that can serve up the updaterepo files. In this article, we'll look at how to proceed when VCSA is on a private network where internet access is blocked, and there's no webserver available. The VCSA and PSC contain their own webserver that can be used for an HTTP based update. This procedure was tested on PSC/VCSA 6.0.<br />
<br />
Follow these steps:<br />
<br />
<br />
<ul>
<li>First, download the update repo zip (e.g. for 6.0 U3A, the filename is VMware-vCenter-Server-Appliance-6.0.0.30100-5202501-updaterepo.zip ) </li>
<li>Transfer the updaterepo zip to a PSC or VCSA that will be used as the server. You can use Putty's pscp.exe on Windows or scp on Mac/Linux, but you'd have to run "chsh -s /bin/bash root" in the CLI shell before using pscp.exe/scp if your PSC/VCSA is set up with the appliancesh. </li>
<ul>
<li>chsh -s /bin/bash root</li>
<li>"c:\program files (x86)\putty\pscp.exe" VMware*updaterepo.zip root@psc-name-or-address:/tmp </li>
</ul>
<li>Change your PSC/VCSA root access back to the appliancesh if you changed it earlier: </li>
<ul>
<li>chsh -s /bin/appliancesh root</li>
</ul>
<li>Make a directory for the repository files and unpack the updaterepo files there:</li>
<ul>
<li>mkdir /srv/www/htdocs/6u3</li>
<li>chmod go+rx /srv/www/htdocs/6u3</li>
<li>cd /srv/www/htdocs/6u3</li>
<li>unzip /tmp/VMware-vCenter*updaterepo.zip</li>
<li>rm /tmp/VMware-vCenter*updaterepo.zip</li>
</ul>
<li>Create a redirect using the HTTP rhttpproxy listener and restart it</li>
<ul>
<li>echo "/6u3 local 7000 allow allow" > /etc/vmware-rhttpproxy/endpoints.conf.d/temp-update.conf </li>
<li>/etc/init.d/vmware-rhttpproxy restart </li>
</ul>
<li>Create a /tmp/nginx.conf (I copied /etc/nginx/nginx.conf, changed "listen 80" to "listen 7000" and changed "mime.types" to "/etc/nginx/mime.types")</li>
<li>Start nginx</li>
<ul>
<li>nginx -c /tmp/nginx.conf</li>
</ul>
<li>Start the update via the VAMI. Change the repository URL in settings, use http://psc-name-or-address/6u3/ as repository URL. Then use "Check URL". </li>
<li>Afterwards, clean up: </li>
<ul>
<li>killall nginx</li>
<li>cd /srv/www/htdocs; rm -rf 6u3</li>
</ul>
</ul>
<br />
<br />
P.S. I personally tested this using a PSC as webserver to update both that PSC, and also a VCSA appliance.<br />
P.P.S. VMware released an update for VCSA 6.0 and 6.5 on the day I wrote this. For 6.0, the latest version is U3B at the time of writing, while I updated to U3A.Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-32422937601203704472016-11-23T10:43:00.000+01:002019-04-16T20:41:12.451+02:00which vSphere version is my VM running on?I did not yet update my older post when vSphere 6.7 was released. The list now complete up to vSphere 6.7. Your Linux runs on a VMware VM, but which on which ESXi version? You can see for yourself: run "dmidecode" and look at lines 10, 11 and 12.
<br />
<blockquote>
ESX 2.5 - BIOS Release Date: 04/21/2004 - Address 0xE8480 - Size 97152 bytes</blockquote>
<blockquote>
ESX 3.0 - BIOS Release Date: 04/17/2006 - Address 0xE7C70 - Size 99216 bytes</blockquote>
<blockquote>
ESX 3.5 - BIOS Release Date: 01/30/2008 - Address 0xE7910 - Size 100080 bytes</blockquote>
<blockquote>
ESX 4 - BIOS Release Date: 08/15/2008 - Address 0xEA6C0 - Size 88384 bytes</blockquote>
<blockquote>
ESX 4U1 - BIOS Release Date: 09/22/2009 - Address 0xEA550 - Size 88752 bytes</blockquote>
<blockquote>
ESX 4.1 - BIOS Release Date: 10/13/2009 - Address 0xEA2E0 - Size 89376 bytes</blockquote>
<blockquote>
ESXi 5 - BIOS Release Date: 01/07/2011 - Address 0xE72C0 - Size 101696 bytes</blockquote>
<blockquote>
ESXi 5.1 - BIOS Release Date: 06/22/2012 - Address: 0xEA0C0 - Size: 89920 bytes</blockquote>
<blockquote>
ESXi 5.5 - BIOS Release Date: 07/30/2013 - Address: 0xEA050 - Size: 90032 bytes</blockquote>
<blockquote>
ESXi 6 - BIOS Release Date: 09/30/2014 - Address: 0xE9A40 - Size: 91584 bytes</blockquote>
<blockquote>
ESXi 6.5 - BIOS Release Date: 04/05/2016 - Address: 0xEA580 - Size: 88704 bytes </blockquote>
<blockquote>
ESXi 6.7 - BIOS Release Date: 07/03/2018 - Address: 0xEA520 - Size: 88800 bytes</blockquote>
NB These DMI properties are set at boot time. Even if your VM gets live-migrated to a host running a different vSphere version, your VM will keep the values it got from the host it booted on. What you see is the vSphere version of the host your VM booted on. It is the VM power-on that matters, so a guest OS reboot will not regenerate the DMI properties. A guest OS shut down on the other hand will also power off the VM, and the next power-on will regenerate the DMI properties.Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com1tag:blogger.com,1999:blog-7036379482487192438.post-51526552281866509862016-06-22T09:50:00.001+02:002019-04-16T20:41:12.511+02:00How VMware appliances update themselvesMost VMware appliances (vCenter Appliance, VMware Support Appliance, vRealize Orchestrator) have the so called VAMI: the VMware Appliance Management Interface, generally served via https on port 5480. VAMI offers a variety of functions, including "check updates" and "install updates". Some appliances offer to check/install updates from a connected CD iso, but the default is always to check online. How does that work?<br />
VMware uses a dedicated website to serve the updates: vapp-updates.vmware.com. Each appliance is configured with a repository URL: https://vapp-updates.vmware.com/vai-catalog/valm/vmw/PRODUCT-ID/VERSION-ID . The PRODUCT-ID is a hexadecimal code specific for the product. vRealize Orchestrator uses 00642c69-abe2-4b0c-a9e3-77a6e54bffd9, VMware Support Appliance uses 92f44311-2508-49c0-b41d-e5383282b153, vCenter Server Appliance uses 647ee3fc-e6c6-4b06-9dc2-f295d12d135c. The VERSION-ID contains the current appliance version and appends ".latest": 6.0.0.20000.latest, 6.0.4.0.latest, 6.0.0.0.latest.<br />
The appliance will check for updates by retrieving the repository URL /manifest/manifest-latest.xml . This xml contains the latest available version in fullVersion <update><version>and version <update><fullversion>(fullVersion includes the build number), pre- and post-install scripts, EULA, and a list of updated rpm packages. Each <update><packagegroups><group><package> entry has a <location> that can be appended to the repository URL and downloaded.
The update procedure downloads manifest and rpms, verifies checksums on downloaded rpms, executes the preInstallScript, runs rpm -U on the downloaded rpm packages, executes the postInstallScript, displays the exit code and prompts for reboot.</location></package></group></packagegroups></update></fullversion></update></version></update><br />
With this information, you can setup your own local repository (for cases where internet access is impossible from the virtual appliances), or you can even execute the procedure manually. Be aware that manual update would be unsupported. Using a different repository is supported by a subset of VMware appliances (e.g. VCSA, VRO) but not all (VMware Support Appliance).Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-15010365387977224202015-12-03T23:06:00.000+01:002015-12-03T23:06:25.266+01:00VPN gateway setup for Android 5, iOS 9, and Mac OS X 10.10I recently configured an IKEv1 L2TP/IPSec VPN for a customer. They needed support for a mix of Android 5, iOS 9, and Mac OS X 10.10 clients. During testing and going through debug logs on the VPN gateway, I found that these devices announce support for several authentication hashes, and encryption protocols:<br />
<table>
<tr><td>OS</td><td>authentication</td></td><td>encryption</td></tr>
<tr><td>Android 5</td><td>SHA256-128, SHA1-96, MD5-96</td><td>AES256, AES128, 3DES, DES</td></tr>
<tr><td>iOS 9</td><td>SHA1-96, MD5-96</td><td>AES256, AES128, 3DES</td></tr>
<tr><td>Mac OS X 10.10</td><td>SHA1-96, MD5-96</td><td>AES256, AES128, 3DES</td></tr>
</table>
<br />
The working configurations I found were:<br />
<table>
<tr><td>authentication</td><td>encryption</td></tr>
<tr><td>SHA1</td><td>3DES</td></tr>
<tr><td>SHA1</td><td>AES128</td></tr>
<tr><td>SHA1</td><td>AES256</td></tr>
</table>
<br />
and I settled on the last combo as AES256 is the strongest CBC from that list.<br /><br />
PS for DH key exchange, only so-called Group 2 1024modp was in the list on all three devices, so there was no other choice available, and no further testing was done.<br />
PS2 I tried SHA256 authentication with the Android device, but no successful connection could be set up with the VPN gateway. It looks like there was some kind of incompatibility between the SHA256 implementations on both devices. As the Apple devices didn't announce support for SHA256, there was no reason to debug that in this environment.<br />
PS3 Some of the acronyms encountered during these tests: IKE, HMAC, PRF, CBC<br />Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com1tag:blogger.com,1999:blog-7036379482487192438.post-89431597435096824702015-09-01T21:31:00.002+02:002019-04-16T20:52:40.781+02:00A use case for exporting and importing distributed vswitchesIn a recent VMware project, an existing environment of vSphere ESXi hosts had to be split off to a new instance of vCenter. These hosts were member of a distributed virtual switch, an object that saves its configuration in the vCenter database. This information would be lost after the move to the new vCenter, and the hosts would be left with "orphaned" distributed vswitch configurations.<br />
<br />
Thanks to the export/import function now available in vSphere 5.5 and 6.x, we can now move the full distributed vswitch configuration to the new vCenter:<br />
<br />
<ul>
<li>In the old vCenter, right-click the switch object, click "Export configuration" and choose the default "Distributed switch and all port groups"</li>
<li>Add the hosts to the new vCenter</li>
<li>In the new vCenter, right-click the datacenter object, click "Import distributed switch" in the "Distributed switch" sub-menu.</li>
<li>Select your saved configuration file, and tick the "Preserve original distributed switch and port group identifiers" box (which is not default!)</li>
</ul>
What used to be orphaned configurations on the host, are now valid member switches of the distributed switch you just imported!Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-35431529565595042632015-06-29T15:13:00.002+02:002019-04-16T20:52:40.711+02:00How to solve "user locked out due to failed logins" in vSphere vMAIn vSphere 6, if the vi-admin account get locked because of too many failed logins, and you don't have the root password of the appliance, you can reset the account(s) using these steps:<br />
<br />
<ol>
<li>reboot the vMA</li>
<li>from GRUB, "e"dit the entry</li>
<li>"a"ppend init=/bin/bash</li>
<li>"b"oot</li>
<li># pam_tally2 --user=vi-admin --reset</li>
<li># passwd vi-admin # Optional. Only if you want to change the password for vi-admin.</li>
<li># exit</li>
<li>reset the vMA</li>
<li>log in with vi-admin</li>
</ol>
These steps can be repeated for root or any other account that gets locked out.<br />
<br />
If you do have root or vi-admin access, "sudo pam_tally2 --user=mylockeduser --reset" would do it, no reboot required.Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com3tag:blogger.com,1999:blog-7036379482487192438.post-53999865993965459002015-06-02T09:10:00.001+02:002015-06-02T09:55:47.096+02:00VCSA detailed sizing optionsThe vCenter Server Appliance in vSphere6 can be deployed as "tiny", "small", "medium", and "large". The deployment wizard gives info about the vCPU and vRAM consequences of this choice, and about the total disk size of the appliance. But as there's 11 (eleven!) disks attached to the VCSA appliance, it's worth looking into which disks get a different size.<br>
<br>
<table>
<tbody><tr><td></td><td></td><td>Tiny</td><td>Small</td><td>Medium</td></tr>
<tr><td>Max hosts</td><td></td><td>10</td><td>100</td><td>400</td></tr>
<tr><td>Max VMs</td><td></td><td>100</td><td>1000</td><td>4000</td></tr>
<tr><td>vCPU</td><td></td><td>2</td><td>4</td><td>8</td></tr>
<tr><td>vRAM</td><td></td><td>8</td><td>16</td><td>24</td></tr>
<tr><td>Disk size</td><td></td><td>120</td><td>150</td><td>300</td></tr>
<tr><td>disk0</td><td>/ and /boot</td><td>12</td><td>12</td><td>12</td></tr>
<tr><td>disk1</td><td>/tmp/mount</td><td>1,3</td><td>1,3</td><td>1,3</td></tr>
<tr><td>disk2</td><td>swap</td><td>25</td><td>25</td><td>50</td></tr>
<tr><td>disk3</td><td>/storage/core</td><td>25</td><td>50</td><td>50</td></tr>
<tr><td>disk4</td><td>/storage/log</td><td>10</td><td>10</td><td>25</td></tr>
<tr><td>disk5</td><td>/storage/db</td><td>10</td><td>10</td><td>25</td></tr>
<tr><td>disk6</td><td>/storage/dblog</td><td>5</td><td>5</td><td>10</td></tr>
<tr><td>disk7</td><td>/storage/seat</td><td>10</td><td>25</td><td>50</td></tr>
<tr><td>disk8</td><td>/storage/netdump</td><td>1</td><td>1</td><td>10</td></tr>
<tr><td>disk9</td><td>/storage/autodeploy</td><td>10</td><td>10</td><td>25</td></tr>
<tr><td>disk10</td><td>/storage/invsvc</td><td>5</td><td>10</td><td>25</td></tr>
</tbody></table>
<br>
N.B. I currently don't have the config data for "large".<br>
This table can help if your environment is growing slightly or wildly beyond the original sizing of the VCSA. Using the autogrow command in <a href="http://www.virtuallyghetto.com/2015/02/increasing-disk-capacity-simplified-with-vcsa-6-0-using-lvm-autogrow.html">@lamw's article</a>, you can easily grow the relevant parts of the VCSA VM.Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-36158626005237426342015-05-26T14:02:00.000+02:002015-05-26T14:02:42.582+02:00which vSphere version is my VM running on?<span style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;">(an update of an older post, now complete up to vSphere 6)</span><br style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;" /><br style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;" /><span style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;">Your Linux runs on a VMware VM, but which on which ESXi version? You can see for yourself: run "dmidecode" and look at lines 10, 11 and 12.</span><br style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;" /><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">ESX 2.5 - BIOS Release Date: 04/21/2004 - Address 0xE8480 - Size 97152 bytes</span><br style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;" /><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">ESX 3.0 - BIOS Release Date: 04/17/2006 - Address 0xE7C70 - Size 99216 bytes</span><br style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;" /><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">ESX 3.5 - BIOS Release Date: 01/30/2008 - Address 0xE7910 - Size 100080 bytes<br />ESX 4 - BIOS Release Date: 08/15/2008 - Address 0xEA6C0 - Size 88384 bytes<br />ESX 4U1 - BIOS Release Date: 09/22/2009 - Address 0xEA550 - Size 88752 bytes<br />ESX 4.1 - BIOS Release Date: 10/13/2009 - Address 0xEA2E0 - Size 89376 bytes<br />ESXi 5 - BIOS Release Date: 01/07/2011 - Address 0xE72C0 - Size 101696 bytes</span><br style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;" /><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">ESXi 5.1 - BIOS Release Date: 06/22/2012 - </span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">Address: 0xEA0C0 -</span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;"> Size: 89920 bytes</span><br />
<span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">ESXi 5.5 - BIOS </span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">Release Date: 07/30/2013 -</span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;"> Address: 0xEA050 -</span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;"> Size: 90032 bytes</span><br />
<div>
<span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">ESXi 6 - BIOS </span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;">Release Date: 09/30/2014 -</span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;"> Address: 0xE9A40 -</span><span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;"> Size: 91584 bytes</span></div>
<div>
<span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;"><br /></span></div>
<span style="background-color: white; color: #474b4e; font-family: 'courier new'; font-size: 13px; line-height: 16.5454540252686px;"><br /></span><span style="background-color: white; color: #474b4e; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16.5454540252686px;"></span><span style="background-color: white; color: #474b4e; font-family: inherit; font-size: 13px; line-height: 16.5454540252686px;">NB These DMI properties are set at boot time. Even if your VM gets live-migrated to a host running a different vSphere version, your VM will keep the values it got from the host it booted on. What you see is the vSphere version of the host your VM booted on.</span>Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-78376471011633763732014-07-19T12:10:00.000+02:002014-11-09T22:26:12.768+01:00GEM WS2 MIDI System Exclusive structure and checksumsMIDI is the standard for communication between electronic music instruments like keyboards and synthesizers. And computers! While tinkering with an old floppy-less GEM WS2 keyboard, I wanted to figure out the structure of their System Exclusive memory dumps. SysEx is the vendor-specific (and non-standard) part of MIDI. Vendors can use it for real-time instructions (changing a sound parameter in real-time) and for non-real-time instructions (sending or loading a configuration, sample set, etc.).<br />
<br />
In the GEM WS2, there's two ways of saving the memory (voices, globals, styles and songs): in .ALL files on floppy, and via MIDI SysEx.<br />
<br />
The .ALL files are binary files, 60415 bytes long. The only recognizable parts are the ASCII encoded voice and global names. The SysEx dumps are 73691 bytes long. As always in MIDI, only command start (and end) bytes have MSB 1, and all data bytes have MSB 0. The data is spread out over 576 SysEx packets, preceded by one SysEx packet with header information.<br />
<br />
Each SysEx data packet starts with these bytes (decimal representation):<br />
<br />
<ul>
<li>240 (SysEx start) </li>
<li>47 (GeneralMusic / GEM / Elka manufacturer ID) </li>
<li>0 </li>
<li>2 (the header packet has a 1 here, the data packes have a 2) </li>
<li>a six-bit packet counter (data packet number MOD 64)</li>
<li>15 (data length, discussed below)</li>
<li>then there's room for 120 data bytes</li>
<li>one checksum byte (discussed below)</li>
<li>247 (SysEx end)</li>
</ul>
<br />
<br />
Because the original data (the WS2 memory and the .ALL file) has 8 bits per byte, and MIDI SysEx bytes can only have 7 bits (MSB 0), GEM uses an encoding to go from one to the other:<br />
Seven 8-bit bytes have their LSB stripped, and the LSB's form byte number 8, from the first of seven bytes in the LSB of byte number 8, to the last of seven bytes in bit number 7 (64 decimal value).<br />
Using this encoding, a group of 7 bytes from the .ALL format is transformed into a group of 8 SysEx bytes.<br />
<br />
The length byte in each data packet indicates how many of those byte groups there are in the current data packet. Data is sent per 15 byte groups., resulting in a 127 byte SysEx packet, with the last data packet containing the remaining 6 byte groups. There's only five bytes in the .ALL format to fill the last byte group of the last data packet, and that byte group is padded with two FF(255) bytes.<br />
<br />
The checksum byte is calculated as the XOR of all other bytes in the SysEx data packet, excluding the 240 and 247 start and stop bytes. When receiving a SysEx dump, the total XOR checksum of the bytes between 240 and 247 should therefore always be 0. (NB this is substantially different from the Roland way of doing SysEx checksums).<br />
<br />
With this knowledge, I wrote a Perl script to convert .ALL files to SysEx (known as .syx) bytestreams. Owners of GEM WS1/WS2/WS400 keyboards who find themselves without floppies or without a working floppy drive can now load their .ALL files via a computer (with e.g. MIDI-OX or SysEx Librarian). If interested, send me an e-mail!<br />
<br />
<br />
<br />
<br />Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com23tag:blogger.com,1999:blog-7036379482487192438.post-8131795411715367242013-12-14T23:40:00.000+01:002013-12-14T23:40:01.987+01:00Identifying virtual disks in Linux on vSphereA default virtual machine has straightforward hardware. A single SCSI disk on a single SCSI card, for example. Having multiple SCSI disks or cards in a VM creates the need for in-guest identification. Linux complicates matters slightly by using alphabetical disk naming: /dev/sda, /dev/sdb, ... /dev/sdz, /dev/sdaa, /dev/sdab, ... This post looks at how you can identify individual disks in a VMware virtual machine.<br />
<br />
Executive summary: VMware notation "X:Y" typically maps onto Linux scsi(X+2), Id:Y, which are then named in ascending order with /dev/sd* identifiers.<br />
<br />
<a name='more'></a><br />
First step is to identify the SCSI cards:<br />
<br />
The first two "scsi host" entries you'll see are the virtual IDE controllers, which Linux drives using its SCSI layer too. VMware uses these for one CD-ROM device (max four). The third "scsi host" called "host2" is the first virtual SCSI card. In the VM definition (the VMX file) you'd see this:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">[root@testhost ~]# cd /sys/class/scsi_host</span><br />
<span style="font-family: Courier New, Courier, monospace;">[root@testhost scsi_host]# ls -l</span><br />
<span style="font-family: Courier New, Courier, monospace;">total 0</span><br />
<span style="font-family: Courier New, Courier, monospace;">lrwxrwxrwx. 1 root root 0 May 22 2013 host0 -> ../../devices/pci0000:00/0000:00:07.1/host0/scsi_host/host0</span><br />
<span style="font-family: Courier New, Courier, monospace;">lrwxrwxrwx. 1 root root 0 May 22 2013 host1 -> ../../devices/pci0000:00/0000:00:07.1/host1/scsi_host/host1</span><br />
<span style="background-color: white; color: #38761d; font-family: Courier New, Courier, monospace;">lrwxrwxrwx. 1 root root 0 May 22 2013 host2 -> ../../devices/pci0000:00/0000:00:10.0/host2/scsi_host/host2</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: inherit;">Every device in /proc/scsi/scsi will be identified with the host that it's connected to. That, and the "Id" number, </span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">[root@testhost scsi_host]# cat /proc/scsi/scsi</span><br />
<span style="font-family: Courier New, Courier, monospace;">Attached devices:</span><br />
<span style="font-family: Courier New, Courier, monospace;">Host: scsi1 Channel: 00 Id: 00 Lun: 00</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Vendor: NECVMWar Model: VMware IDE CDR10 Rev: 1.00</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Type: CD-ROM ANSI SCSI revision: 05</span><br />
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">Host: scsi2 Channel: 00 Id: 00 Lun: 00</span><br />
<span style="color: #38761d; font-family: Courier New, Courier, monospace;"> Vendor: VMware Model: Virtual disk Rev: 1.0 </span><br />
<span style="color: #38761d; font-family: Courier New, Courier, monospace;"> Type: Direct-Access ANSI SCSI revision: 02</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;"></span>
What VMware calls "0:0" is the disk on the first SCSI card (scsi2 in Linux), and "Id: 00". The default second disk would be virtually shown on "0:1", being scsi2 "Id: 01".<br />
<br />
<b>So in general, "SCSI disk X:Y" in VMware means scsi(X+2) ID: Y in Linux.</b><br />
<br />
Linux names its disk devices at discovery time, during the boot cycle. So first the disks on scsi2 would be scanned, then scsi3, scsi4 and scsi5. On each scsi_host the disks will be added in ascending order, Id:00 first, up to 06, then 08 up to 15.<br />
<br />
The only situation this could be different, is if you hot-add virtual disks or virtual SCSI cards without rebooting Linux. Both of these actions are supported in VMware, and by the Linux kernel. Those new cards and disks would be added to the list after the pre-existing ones, and no live device renaming/reordering happens for obvious reasons.<br />
<br />
In a multiple SCSI card configuration you might notice that, while scsi2 (first virtual SCSI card) shows up on PCI bus 10, scsi3-5 show up behind a PCI bridge on PCI bus 11, together with the virtual network device(s).<br />
<br />
On vSphere 5.5 and higher, both CD-ROM and disk devices can be shown on virtual SATA controllers, driven in Linux by the ahci driver. Each VMware virtual SATA controller (PCI ID 15ad:07e0 behind a PCI bridge on bus 11) will show up as 30 (!) scsi_host entries, and each can connect to one disk. The virtual disk number VMware shows, will be translated in the corresponding scsi_host number as reported by Linux. Device enumeration will still happen in ascending order over the scsi_hosts as before.<br />
<br />
<br />Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com3tag:blogger.com,1999:blog-7036379482487192438.post-85221305641223770832013-12-14T23:05:00.002+01:002013-12-14T23:05:45.543+01:00which vSphere version is my VM running on?(an update of an older post, now complete up to vSphere 5.5)<br />
<br />
Your Linux runs on a VMware VM, but which on which ESXi version? You can see for yourself: run "dmidecode" and look at lines 10, 11 and 12.<br />
<span style="font-family: courier new;">ESX 2.5 - BIOS Release Date: 04/21/2004 - Address 0xE8480 - Size 97152 bytes</span><br />
<span style="font-family: courier new;">ESX 3.0 - BIOS Release Date: 04/17/2006 - Address 0xE7C70 - Size 99216 bytes</span><br />
<span style="font-family: courier new;">ESX 3.5 - BIOS Release Date: 01/30/2008 - Address 0xE7910 - Size 100080 bytes<br />ESX 4 - BIOS Release Date: 08/15/2008 - Address 0xEA6C0 - Size 88384 bytes<br />ESX 4U1 - BIOS Release Date: 09/22/2009 - Address 0xEA550 - Size 88752 bytes<br />ESX 4.1 - BIOS Release Date: 10/13/2009 - Address 0xEA2E0 - Size 89376 bytes<br />ESXi 5 - BIOS Release Date: 01/07/2011 - Address 0xE72C0 - Size 101696 bytes</span><br />
<span style="font-family: courier new;">ESXi 5.1 - BIOS Release Date: 06/22/2012 - </span><span style="font-family: 'courier new';">Address: 0xEA0C0 -</span><span style="font-family: 'courier new';"> Size: 89920 bytes</span><br />
<span style="font-family: 'courier new';">ESXi 5.5 - BIOS </span><span style="font-family: courier new;">Release Date: 07/30/2013 -</span><span style="font-family: 'courier new';"> Address: 0xEA050 -</span><span style="font-family: 'courier new';"> Size: 90032 bytes</span><br />
<span style="font-family: 'courier new';"><br /></span>
<span style="font-family: inherit;">NB These DMI properties are set at boot time. Even if your VM gets live-migrated to a host running a different vSphere version, your VM will keep the values it got from the host it booted on.</span>Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-71276450530208278932013-11-09T15:48:00.000+01:002013-12-02T22:04:59.332+01:00VMware Certified Associate exams half-price until 31/1/2014Using a voucher code, anyone can do a VCA exam (datacenter virtualization, cloud, or desktop, and maybe network when it becomes available) for half the regular price. VCA is a certification that you can do from the comfort of your desk! Enroll at http://vmware.com/certification/ . To do the exam for half the normal price, use this voucher code: <span style="background-color: white; color: #202020; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;">VMRT4B425324.</span><br />
<div>
Best of luck to anyone who tries!<br />
<br />
NB This code used to reduce the exam price to 0, rendering VCA certification completely free, but starting somewhere in december 2013, the discount will be reduced to 50%.</div>
Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com5tag:blogger.com,1999:blog-7036379482487192438.post-16331546610086827622013-09-30T15:18:00.001+02:002013-09-30T15:18:50.919+02:00downloading protected/embedded videos - the hard wayCharged with the task to save a news broadcast for posteriority, I wanted to download a video that was only available through an embedded "JW Player" videoplayer on a website. Time was not on my side: the video would be purged from the site within a week.<br />
<br />
In the HTML source of the webpage containing the video, I found tags like<br />
<table><tbody>
<tr></tr>
<tr><td class="webkit-line-content"><span class="webkit-html-attribute-name">data-video-src</span>="<span class="webkit-html-attribute-value">http://media.<span style="color: red;">XYZ</span>nieuws.net/GEO2013/09/230916509ONL1309244843676.GeoFLVLong.flv</span>"<br /><span style="font-family: inherit;"><span class="webkit-html-attribute-name" style="white-space: pre-wrap;">data-video-iphone-path</span><span style="white-space: pre-wrap;">="</span><span class="webkit-html-attribute-value" style="white-space: pre-wrap;">GEO2013/09/230916509ONL1309244843676.GeoMP4_H.264.m4v</span></span></td></tr>
<tr><td class="webkit-line-number">or (from another video)</td></tr>
</tbody></table>
<table><tbody>
<tr></tr>
<tr><td class="webkit-line-content"><span class="webkit-html-attribute-name">data-video-rtmp-path</span>="<span class="webkit-html-attribute-value">2009/11/132628352ONL0911177754876.urlFLVLong.flv</span>"</td></tr>
<tr><td class="webkit-line-number"></td></tr>
</tbody></table>
<span style="white-space: pre-wrap;">but I couldn't get a clear URL out of the page's source code (URLs anonymized to protect involved parties).</span><br />
<span style="white-space: pre-wrap;">After a bit of research (a.o. channeling browser traffic through a proxy and looking at the URLs being requested), the files used by the JW Player were still a mystery to me, but I found the server that was hosting the iphone video files: iphone.<span style="color: red;">WXY</span>power.be. And that's where I got lucky: r</span><span style="white-space: pre-wrap;">equesting http://iphone.</span><span style="color: red; white-space: pre-wrap;">WXY</span><span style="white-space: pre-wrap;">power.be/</span><span style="color: red; white-space: pre-wrap;">XYZ</span><span style="white-space: pre-wrap;">nieuws_geomo/_definst_/GEO2013/09/230916509ONL1309244843676.GeoMP4_H.264.m4v/chunklist.m3u8</span><br />
<span style="white-space: pre-wrap;">resulted in a list of media_<span style="color: lime;">N</span>.ts files (where N is a number starting from 1, and in this case ranging to 169).</span><br />
<span style="white-space: pre-wrap;">Fetching all those files (wget) and concatenating them (cat) into one big file, gave me a large mpeg file, playable in VLC. Converting it to mp4 with handbrake reduced it to 75% its original size.</span><br />
<span style="white-space: pre-wrap;"><br /></span>Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com2tag:blogger.com,1999:blog-7036379482487192438.post-6713503889975715442013-07-25T13:09:00.003+02:002013-07-25T13:09:35.461+02:00SSD overprovisioning in vSphereSSD vendors like Samsung or Intel often provide tools to reserve some space on your SSD that can be used by the internal algorithms for better wear-leveling, longevity, garbage collection, and performance. My own Samsung SSD comes with a tool to do that on Windows, for example.<br />
But on vSphere, you'll have to do that manually: I see two possibilities:<br />
<br />
<ol>
<li>don't format the SSD "full" but instead use "partial", and specify only the amount of the disk that you want to use. The rest is left unpartitioned, and therefore unallocated. You can only do this if you haven't formatted the SSD as VMFS yet. If you have, this second possibility can still help you:</li>
<li>create a thick-provisioned lazy-zeroed VMDK on the SSD-backed VMFS, either with vmkfstools or by creating a dummy VM. Those blocks are allocated, but remain unwritten. You're not going to attach the disk to a running VM, so they won't ever be written to. This effectively reduces the amount of blocks that can be written to, leaving the rest open. Caveat: if you've previously removed VMDKs from the volume, you have no guarantee that the underlying blocks are in an unwritten state.</li>
</ol>
<br />
P.S. Your SSD might have some overprovisioning space built in already. I've always assumed that's the reason some vendors sell 256GB while others sell 240GB models. The latter vendors sell the same amount of flash as the former, but leave 1/16th unallocated.Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-26184263701355928322013-07-23T10:17:00.003+02:002013-07-23T10:17:51.145+02:00dd-wrt refusing new configuration: out of NVRAM spaceAnother post documenting a small issue just so I can google it later: one of the Cisco/Linksys WRT160NL devices (both running DD-WRT) in my environment stopped accepting config changes through its web interface. It happened to be the one I'm using as a NAT gateway and DHCP server, not the one just functioning as access point.<br />
A config backup appeared to be full of UPnP rules. Those are port forwarding rules that have been asked for by applications on NATed stations that want to be reachable. Think Skype amongst many others.<br />
Clearing the UPnP list solved the problem: click "NAT/QoS", then "UPnP", then "Delete all". Apparently the UPnP list filled up the available NVRAM space, which broke all subsequent config changes.<br />
<br />Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-50242667377672602642013-05-31T11:18:00.000+02:002013-05-31T11:18:56.653+02:00what's the IP address of my VMImagine wanting to access a VM, but you don't know the IP address, and you don't have a GUI client for your vSphere environment? The most basic way of getting the IP address of a VM from the vSphere hypervisor level, is logging in to the ESXi Shell (could be local or SSH), and finding your VM number in the VM list:<br />
<span style="font-family: Courier New, Courier, monospace;"># vim-cmd vmsvc/getallvms</span><br />
In my example, my VM has number 42. Then type<br />
<span style="font-family: Courier New, Courier, monospace;"># vim-cmd vmsvc/get.summary 42 | grep ipAddress</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ipAddress = "10.11.12.13", </span><br />
<div>
Et voila!<br />
<br />
NB this requires running VMware tools in your guest OS, evidently.</div>
Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-58445881112299061972013-03-04T14:37:00.000+01:002013-03-04T14:37:24.651+01:00nomodeset can break Xorg monitor probingSome time ago, a CentOS install on a particular new Dell workstation needed the "nomodeset" kernel parameter to get a graphical login screen to correctly display. This was with a Radeon Firepro 2260 graphics card.<br />
After applying the CentOS 6.3 updates, Xorg wouldn't correctly detect the LCD panel's resolution anymore. A 1680x1050 panel would get a 1280x1024 resolution. In the days of digital DVI connections, DDC probing and what not, this was unusual and surprising.<br />
A lot of searching and testing led to the solution: the nomodeset parameter broke Xorg probing. Rebooting without the nomodeset parameter worked (no graphical problems like I had earlier), and solved the Xorg resolution probing.Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0tag:blogger.com,1999:blog-7036379482487192438.post-82507085984349320652013-01-05T15:46:00.000+01:002013-01-06T16:25:44.017+01:00Synology RS3413xs+ tech notesThe newest addition to my home lab is a Synology RS3413xs+ NAS. While installing it, I came across a couple of details that I didn't know before buying it. So for other people thinking of buying this unit, here's what I found out:<br />
<a name='more'></a><br />
<br />
<ul><li>If you add network interfaces in the available PCIe slot, they might be numbered _before_ the four onboard interfaces. They were in my case. So onboard 1-4 are eth2-5, and add-on interfaces 1-2 are eth0-1. </li><li>the SSD cache feature only works with identical drives in the both cache slots. You can buy two 120GB SSDs, but you can't just add one 240GB SSD. Except if you configure it manually through the CLI, and want to work without Synology support. </li><li>as explained in an earlier post, there's no multiple-VLAN-over-one-interface support in the GUI, but you can work around that in the CLI</li><li>the DSM web interface counts VLAN-tagged packets twice in its "Total Network" graph. The per-interface/per-bond counters are correct however. PS that looks like the bug I solved three years ago in dstat 0.7.0!</li><li>a Synology RAID group is used as an LVM volume group. Volumes and block-based iSCSI LUNs you create afterwards are implemented as LVM logical volumes. File-based iSCSI LUNs are just placed on formatted volumes like other files.</li><li>the SSD cache can only be used for one LVM logical volume! Read on for a manual workaround.</li><li>activating or deactivating the SSD cache for a volume means stopping all services temporarily.</li><li>both SSDs are configured as a software RAID0 volume, with 64KB segments.</li><li>the SSD partitions aren't aligned at all. Makes sense I guess. The regular disk partition for data is aligned at a 512MB boundary. PS the swap partition is aligned at a 128MB boundary, and the DSM root partition is aligned at 128KB.</li><li>Synology implements its SSD cache feature using the "flashcache" driver in Linux (the one Facebook developed). Flashcache has three caching modes (writeback, writethrough, writearound) of which Synology currently uses <b>writearound</b> in DSM4.1. Just like writethrough this only accelerates read performance, as is clearly indicated in Synology documentation. If you insist on having write cache as well - with all the consequences that brings! - you could manually change this mode to writeback. Not supported ofcourse. See <a href="https://github.com/facebook/flashcache/blob/master/doc/flashcache-sa-guide.txt" target="_blank">the flashcache doc</a> for details on the three modes.</li><li>if you absolutely need SSD cache for multiple volumes, another manual tweak is possible: dividing your SSDs into multiple partitions, making different md RAID0 devices from those, and activating those as flashcache for multiple volumes.</li></ul><div>Get info from your own Synology device using:</div><div># fdisk -u -l /dev/sdk; fdisk -u -l /dev/sdl </div><div>(sdk and sdl are the two SSDs in a 10-bay Synology, where sda..sdj are the 10 regular disks)</div><div># cat /proc/mdstat</div><div># dmsetup table cachedev_0</div><div># dmsetup status cachedev_0</div><div># vgdisplay -v vg1</div>Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com7tag:blogger.com,1999:blog-7036379482487192438.post-12097068922481738322013-01-01T17:03:00.001+01:002013-01-06T15:47:59.706+01:00Multiple VLANs on a Synology NASSynology, like other SOHO/SMB NAS vendors, touts VLAN functionality with their current DSM 4.1 software. However, the web interface just lets you specify one VLAN tag to use over each eth interface (or bond interface).<br />
<h4>Manual approach</h4>In the busybox environment that you can ssh into as root (after enabling ssh through the webinterface), there's all the tools you need to use multiple VLANs over one link (eth or bond), however:<br />
First you insert the 802.1q module into the Linux kernel: <br />
<blockquote class="tr_bq"> /sbin/lsmod | /bin/grep -q 8021q || /sbin/insmod /lib/modules/8021q.ko</blockquote>Then you add each VLAN you need to every interface (bond0 in this example)<br />
<blockquote class="tr_bq"> /sbin/vconfig add bond0 4</blockquote>And finally you can configure IP addresses on every interface.vlan combination (bond0.4 in this example) <br />
<blockquote class="tr_bq"> /sbin/ifconfig bond0.4 192.168.4.1 broadcast 192.168.4.255 netmask 255.255.255.0</blockquote>The same type of script would work on a QNAP NAS too, by the way. They offer 8021q.ko and vconfig in their commandline environment as well.<br />
Packets from the bond0 interface leave the device untagged, packets from the bond0.4 interface leave with a tag specifying VLAN 4.<br />
Be aware that these settings only last until the next reboot.<br />
<br />
<h4>Synology approach (future?)</h4>Synology has its own set of utilities that are used by the webinterface to manage devices. The network interface settings are managed by /usr/syno/sbin/synonet. This utility sets up bonded interfaces, IP addresses, and VLAN entries. However, the utility has the same limitations as the web interface (for unknown reasons): creating a VLAN unconfigures the untagged interface you're working on, and you can't add a second VLAN on the same interface.<br />
It would be nice if synonet could get multi-VLAN support, as all the necessary options seem to be there already. Feature request, Synology?Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com6tag:blogger.com,1999:blog-7036379482487192438.post-36119958613378909742012-12-23T21:53:00.001+01:002012-12-25T12:25:21.062+01:00Buying the right NAS device for your home lab.Buying the right NAS device for a vSphere home lab is not an easy task. This blog post documents the decision process you should go through IMHO.<br />
<br />
First, decide which data you are going to put on it. Lots of people buy a NAS for secondary data only (I.e. backups), but in a home lab, there's probably primary data too. <u>How important is the data</u>, and do you require a backup of this primary data?<br />
<br />
Then, think about <u>the volume of data</u> you need. Is it 1TB, more like 5TB, or rather 10TB?<br />
<br />
Number three, protection level. No one wants to lose data, but how badly? Surviving one disk failure is a minimum, but a RAID5 set enters its "danger zone" when that happens. That means an additional failure will make you lose all the data on the set. The danger zone ends after you've replaced the failed disk and it's contents have been rebuilt. RAID6 enters the danger zone after losing a second device before the first is rebuilt. Kn<u>ow your danger zone</u>!<br />
<br />
A fourth decision is speed. Bandwidth is a concern to some, but on a Gbit switch, a device with 4 or more disks can often saturate that bandwidth. Multiple Gbit links can help if more bandwidth is needed. But <u>the most important performance indicator is IOPS</u>. Knowing how many IOPS you want is extremely difficult, but once you arrive at a figure, getting the IOPS is a matter of spreading your data over enough individual disks. One WD Caviar Red drive can do about 112 write IOPS or 45 read IOPS of 4 KB. Caching can greatly improve host-facing IOPS as well. <a href="http://www.storagereview.com/western_digital_red_nas_hard_drive_review_wd30efrx" target="_blank">This article</a> gives a great view on the world of disk bandwidth, IOPS and latency.<br />
<br />
You should also know which protocols your NAS will need to speak, but as most do CIFS, NFS and iSCSI anyway, most use types are covered. If you need specialty features like replication, filter on that too. Also, is your device really supported? The actual support might not matter for a home lab, but it's the strongest statement you can get that <u>it will work</u>.<br />
<br />
Conclusion: in most environments, this is going to lead to a NAS configuration with a <u>high number of slots</u> (forget the 2 to 4 bay models), and relatively <u>small disks</u> in those slots. And that is ... a<b> lot </b>more expensive than just adding 3TB drives until you reach the volume you need. As always, there's no such thing as a free lunch: you'll get what you pay for.<br />
<br />Bert de Bruijnhttp://www.blogger.com/profile/14859034314670252617noreply@blogger.com0