Tag: windows 10

  • Installing an NVIDIA Gigabyte GTX 1060 Graphics Card into a Dell Precision T5810

    Might be easy. Might be hard. Never done it. Here are my notes.

    TL;DR

    • Managed to get it working after a dozen or so reboots, driver installations, and placement permutation of the original and/or new graphics card
    • The only interesting/semi-innovative part of the project was having to pry off a strip of metal from the case’s side panel in order to get the new card to fit.

    Long Boring Version

    Warning: Ramblings Ahead

    I had hoped to go about this process in a slow/careful manner in order to be sure that I knew exactly what the keys to success are in installing a Gigabyte NVIDIA 1060 Geforce GTX into a Dell Precision T5810 running Windows 10.

    Nope. Sorry. I did get there eventually, but it was such a convoluted/confusing journey that, frankly, I really am not sure what the “magic” step(s) was/were. So if you’re trying to get help in achieving something similar, then all I can offer are my rambling recollections of a frustrating 1/2-day process.

    Background

    I wanted to try out photogrammetry (in particular meshroom and alicevision, which require Nvidia GPUs, with these recommended specs) so I posted on r/photogrammetry asking what the lowest-budget hardware is that I would need. Based on the advice I received from a random guy who sounded like he knew what he was talking about, I ended up getting a Dell T5810 from newegg.com. At $290+tax with 12 (logical) Xeon Cores and 64GB of RAM, it seemed like a phenomenal deal. (Tip: I suspect that this was a still-boxed return that newegg.com didn’t want sitting on their shelves so slashed the price; if you’re looking for a good deal, go to newegg.com and just try lots of combinations of specs; if you find a combo with a surprisingly low price — e.g. you add some RAM and price drops with “Only 1 in stock” — then you might be onto an awesome deal!)

    Now, to do photogrammetry, I’m told you need a decent GPU, the random guy recommended a GTX 1060. (Note ahead: he also warned that a lot of them are too big for the Dell T5810!)

    I’ve never been into gaming, so this was the first time in my life when I’d had to give graphics cards any attention. So this article is very much for the GPU newbies out there.

    After observing the ebay market for a week or two, I eventually put in a bid for a Gigabyte Geforce GTX 1060 with 3GB of RAM (the “1060” from hereon). It cost me about $90+shipping. The box arrived in superb condition; the previous owner had evidently kept the box, wrappings, CD and start up pamphlet with the intention to sell it for a future upgrade.

    My T5810 came with a basic Nvidia Quadro NVS 295 card. I tested it out by installing Steam and the free trial version of “Shadow of the Tomb Raider” (I literally haven’t played Tomb Raider since the late 90s!), and the poor little Quadro would not even start!

    Tomb Raider at 100% GPU, and even the Task Manager is burning up!

    I googled how to replace a graphics card and, of course, there were like a billion articles/discussions on Google, and so I could only peruse the first few I came across, which all conveyed the silly message that there’s nothing to it — just swap the cards, and you’re good to go. Yeah Right.

    Hardware Access

    So I powered off and opened up the Dell T5810. It was pretty easy to remove the Quadro — no screws to deal with, just a blue plastic clip held it in place. Here it is sitting alongside the 1060.

    A quick note on power delivery. The 1060 takes a 6-pin power input. (The Quadro does not; all of its power came via the PCIe slot.) My T5810 Power Supply Unit (PSU) is the default that comes from the manufacturer with the “minimum” 425w delivery. The 1060 says that it requires a PSU with 400w minimum. So part of my experiment is to test if this slender-sounding margin is truly sufficient. The Dell T5810 has two yellow 6-pin cables emanating from the PSU. According to this page, a 6-pin connector provides an additional 75w to the PCIe’s 75w.

    Setting the 1060 into place was only a tiny bit trickier. It was twice as wide as the Quadro, so would need to be placed in a different PCIe slot with the extra slot covering removed.

    The bigger problem though involved the power connection. First, the 6-pin cable only just reached far enough to get to the top of the 1060 GTX where the power input is situated. Not wanting to put physical stress on the card or connection, I almost considered getting an extension, but decided in the end that it was “only just” long enough.

    Second, and much more seriously, the T5810 would not shut on the card because the power cable connector, going into the top of the large 1060 card, was obstructing a ridiculous “crossbar” riveted to the inner side of the removable panel!

    The connector (red circle) collides with the “crossbar” (red ellipse) when trying to shut the side panel

    So I had to make a decision to either:

    • Sell the Gigabyte 1060 model (i.e. resell it on ebay), research what medium-range Nvidia models DO fit the T5810, and then buy that model from ebay/craigslist (at the cost of hours of work, shipping hassle, and weeks of waiting), or
    • Pry the riveted crossbar off the panel at risk of damaging the aesthetics of the Dell T5810.

    Since the Dell was already second hand, a little bit scuffed up, and not ever intended to be a flagship machine, and since the crossbar had no discernible structural role, I went with the latter. The de-riveting process was fairly easy — I just got a screwdriver and worked it under each rivet till it popped. You could see some minor dents on the outside; but overall I’m very pleased with the outcome.

    Some pics of the “de-riveting” process/outcome resulting in a closable computer case.

    Software Mayhem

    With the case in a closable state I powered on the T5810 having no idea what to expect. I did not install any drivers because (i) I was advised not to on some random google search, and (ii) I was not sure whether drivers would get installed automatically, so wanted to give Windows 10 the opportunity to impress me.

    To my (initial) pleasant surprise, the screen came on but, for better or worse, I thought that the image looked ‘crude’, and concluded that the signal was probably not arising from the GPU but from the Motherboard’s fallback signal, even though the signal was being channeled through the 1060 card to the DVI output. (My monitor is too old for an HDMI, but still has a great image.)

    So I decided to install the NVIDIA driver. I went to the Nvidia site, downloaded the relevant driver, and was just about to install it when I got a message in a dialog on my Windows 10 machine that said (paraphrased) that I needed to restart for the driver to take effect. Since I had not installed any driver yet, I concluded that Windows 10 must have initiated the driver download automatically, so I restarted with the naïve expectation that it would boot back again with the 1060 fully operational.

    Unfortunately, this did not happen. Instead, I got a blank screen. I left it for quite a while (1 hour?) and then killed the power and rebooted.

    Now I won’t bore you with the details, but I spent the rest of the day, and much of the next morning, jumping through hoops to get things working. I tried replacing the 1060 with the Quadro; I tried running them both together; I tried the HDMI output, the DVI outputs; I tried installing the driver I downloaded from nvidia.com; I tried installing the software that came with the CD. Sometimes the T5810 would boot; sometimes it wouldn’t. Sometimes it would boot and detect the 1060, sometimes it wouldn’t. I could not discern any rhyme or reason to what the heck was going on. The whole process was incredibly frustrating and opaque. What’s soooo annoying is that I worried it would be confusing and opaque, but neither the “Internet” (presented to me by Google), nor Windows 10, did anything to bring clarity to the situation. I was given no clue as to what was handled automatically, and what was not. I was given no advice to e.g. “give it several hours; it will boot on when ready”. Nothing.

    In the end, I got it working without the Quadro. However, I am not willing to say that “all is well that end’s well”, because I really wanted to understand the process, and have not been able to get the clarity that I desired. Windows 10 did nothing to make this process transparent. All it needed was a simple user experience along the lines of “A new graphics card has been detected. Would you like a driver to be installed automatically?”

    So if you’re looking for guidance in this area, all I can say is good luck. I still don’t understand why it is not advised to install the driver before installing the hardware. Next time I will.

    The good news is that the GPU seems to be performing very well now. It makes light work of Tombraider.

    Tombraider running at just 3% GPU.

  • Windows 10 for Unix Users

    Goals

    It’s been literally decades since I’ve owned a Windows machine; here’s a guide to setting up Windows 10 and getting orientated for those used to doing things the MacOS/Linux way. Some specific goals include:

    • Initial setup
    • Backups
    • Install winget package manager
    • Install WSL2 and Ubuntu
    • Install terminal

    Initial Setup & Orientation

    The most important tools and short cuts for navigating round my Mac, and the W10 equivalent, are:​*​

    • CMD+Tab to switch programs
      • ALT+Tab
    • Cycle through programs (with CMD+Tab) to get to Finder
      • Unlike Finder, which is always open on a Mac, File Explorer is not necessarily open. So to get to it fast, I use WIN+N where N is the position of File Explorer in the Taskbar; I like to keep it at the first position, so WIN+1 does the trick
    • CMD+` to cycle through windows
      • Unfortunately, although lots of places online claim that the combo CTRL+` will cycle through windows of the same program, I have not found this to work on my W10M. The best way I have found to achieve this is to use the WIN+N combo where N is the position of the program in the taskbar. If you have a program with two or more windows open, then repetitions of the WIN+N combo for that program will cycle through its windows. Since it is almost always the browser or File Explorer that has lots of windows open, I make sure to place these programs near the beginning of the taskbar.
    • CMD+zxcvwqas to perform “classic” short cut operations
      • CTRL+zxcvwqas
    • CTRL+CMD+left/right to move between tabs within Browser
      • CTRL+Tab, or
      • CTRL+PageUp/PageDown in Edge
    • CMD+left/right to move cursor to beginning/end of line
      • Home/End
    • Shift+CTRL+3/4 to take a screen shot
      • WIN+Shift+S to open screen shot wizard; your image will initially be copied to clipboard; to save it to a file, you need to click on the pop up icon of that image and save it proper.

    Additionally, when we use ALT+Tab, we do NOT want to see all the various Edge browser tabs as this makes the visual field overwhelming. So we go to Settings > System > Multitasking and below the “Alt + Tab” section, choose “Open windows only” from the drop down menu.

    Windows File Structure

    The main difference between the W10 file structure and that of Unix is that, with Unix, everything is container within the root file '/'. With W10, each storage device gets assigned a letter, and then it acts as the root of its own file system. For a decent quick reference of the similarities/differences see here.

    The other thing worth nothing is that the W10 File Explorer is a bit fiddly in so far as it does not readily provide a clear representation of the file structure; rather, it wants to provide you with a bunch of options to find useful stuff. However, IMO, I’d prefer a simple tree-structure nested menu set up. I can get somewhat close to that by going to View > Options > Change Folder and Search Options > View and then checking/unchecking the following:

    • Checked
      • “Display the full path in the title bar”
      • “Show hidden folders, files and drives”
      • “Show all libraries”
    • Unchecked
      • “Hide empty drives”
      • “Show all folders”

    In the General tab, I also like to apply the “Single click to open an item” option.

    With these options applied, the File Explorer provides a fairly intuitive representation of the nested file systems. The only “quirk” is the entry labelled “This PC”. When selected, you don’t see a bunch of nested files/folders as is otherwise the case, rather, you see two sets of icons labelled “Folders” and “Devices and Drives”. The former lets you jump straight into the user’s private data, the latter let’s you go to the root of a file system on a physical device. Although this is arguably inelegant in that it disrupts the simple pattern of having every view a simple snap shot of a level within a nested structure, I can see that its purpose is well intentioned and that I can live with it.

    Installing Windows Subsystem for Linux 2

    There are two ways to install Windows Subsystem for Linux 2 (WSL2). The “simpler way” is to sign up to the Windows insider program where you get to install the latest non-stable version of W10. If you’re not willing to share your usage diagnostics with Microsoft or risk non-stable releases, then you need to do the following (based on this article) to enable WSL2. First, open a Powershell prompt with admin privileges and run:

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    Then this to enable virtual machines on your W10M:

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

    … then restart. (Note: when I tried this my computer stalled on reboot; but it seemed to work after a further power-off-on cycle.) Next, download this WSL2 kernel update installer and run it, and then run this command to make WSL2 your default (as opposed to WSL1, I guess):

    wsl --set-default-version 2
    

    If you now run:

    wsl --list --verbose

    … then you’ll be told that:

    Windows Subsystem for Linux has no installed distributions.
    Distributions can be installed by visiting the Microsoft Store:
    https://aka.ms/wslstore

    So go to the Store and install the latest release of Ubuntu and, if you haven’t done so already, the new W10 Terminal. Now start/restart the Terminal and you can expect to find the option to start a new tab with the Ubuntu shell prompt. Run the usual:

    sudo apt update -y
    sudo apt upgrade -y

    … and you’re up to date and ready to go with WSL2!

    WSL2 Ubuntu Configuration

    OK, now that we have a bash shell working in Ubuntu, we want to be able to configure it nicely. In order to configure my working unix shells, I maintain an easy-to-install CLI called “myconfig” that you can see here. This allows me to quickly install up-to-date versions of tmux, vim, zsh, oh-my-zsh, nvm, powerlevel10K, etc., and to thereby enjoy a slick-looking shell experience packed with useful aliases, shell scripts and other tools.

    Anyhow, I was pleased to discover that my myconfig CLI has worked very well to date on WSL2 Ubuntu. The only extra thing I needed to do to get a nice zsh shell working was to configure the fonts for Powerlevel10k (P10K) to make the command prompt look snazzy. To do that, you need to manually download the four files specified in the P10k instructions to your W10M.

    Download these files to your W10 Machine

    Then double click on each file to open it and then click “install”.

    Then you need to press CTRL+, in your W10 Terminal app in order to open up the settings. These settings are configured as a JSON file, so you might need to specify the first time you open it that you want to open it in a text editor like notepad.

    Once open, find the section labelled “defaults” where you can specify the default look of the different shells available within Terminal, and add an entry telling Terminal to use the fonts we just installed to the W10M. (FYI: by installing these files, you cause them to be system-findable within C:\Windows\Fonts\MesloLGS NF .)

    "defaults":
            {
                // Put settings here that you want to apply to all profiles.
    		//DWD ADDED
    		"fontFace":"MesloLGS NF"
            }

    And, presto, your Terminal will now have nice modern fonts applied that make P10k look fantastic. (If, unlike me, you don’t have P10k installed by a self-maintained CLI like myconfig then of course you’ll need to follow the instructions to set it up.)

    Again, nice work Microsoft, I honestly expected the Terminal to have rock-bottom 80s-level support for aesthetics.

    OK, this is not my zsh with P10k, but credit to Terminal that Hollywood works really well

    WSL2 SSH and Daemon Services

    What about running background services like an apache server from WSL2? One difference we have with WSL2 is that Ubuntu is not initiated with systemd, so to start/stop services, such as apache, you need to use the older syntax of e.g. sudo service apache2 start.

    sudo /etc/init.d/apache2 start

    Of course, you need to ask yourself how you plan to use your W10M. If you plan to run something like a production server on it, then you also need to worry about things like restarts when you are out of town, forwarding requests between W10 and WSL2, etc. I am not going to explore that sort of thing now, but will make a note of this article and this article in case I do in the future.

    However, I will briefly cover ssh since, IMO, it’s not fun having to work directly with the W10M to accomplish something when I can work from a laptop.

    The best/simplest approach I have found so far is based on this article. The idea is to connect to the ssh server that is easily installable with Powershell into W10, and then to set WSL2 bash as your default shell.

    As some quick background, if you run Powershell and then simply run bash, it will execute .\Windows\System32\bash.exe, since .\Windows\System32\bash.exe is in path (cf. cmd /c path), which has the effect of turning the W10 Powershell into the WSL2 Ubuntu bash shell. Similarly, when in a bash shell, you can run powershell.exe to convert the shell back into a Powershell (since /mnt/c/Windows/System32/WindowsPowerShell/v1.0 is in the path).

    So the approach we are taking is to basically ssh into Powershell and then run ‘bash’ (or a process under the hood that is similar to this).

    First, check if you have ssh installed by runing the following from an Administrator’s Powershell:

    Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
    
    Name  : OpenSSH.Client~~~~0.0.1.0
    State : Installed
    
    Name  : OpenSSH.Server~~~~0.0.1.0
    State : NotPresent

    To install an ssh server, run:

    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    

    Now start the service and get it to start automatically:

    Start-Service sshd
    Set-Service -Name sshd -StartupType 'Automatic'

    Now we can set the default shell to bash with the following:

    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\WINDOWS\System32\bash.exe" -PropertyType String -Force
    

    Of course, you can skip this step if you want to ssh into W10 with Powershell and then jump into bash as needed. Equally, with this setting, you ssh into bash and then can switch to Powershell with powershell.exe as described above.

    Now you need to go to Windows Defender Firewall > Advanced Settings > Inbound Rules and begin the “New Rule…” wizard. Select “Port” and click Next, then select TCP and enter “22” into the field labelled “Specific local ports” and click next. Then select “Allow the connection” and clikc Next. Then uncheck all but the “Private” option and click Next. The give this inbound rule a name like “SSH-Inbound-I” and click Finish. Do the same for an outbound rule, and now you can accept ssh connections from within your private network.

    That’s it — now you can ssh into your W10M with your windows (not Ubuntu!) username/password combination, and get passed straight through to a WSL2 bash prompt.

    I would most definitely not recommend exposing your W10M to anything outside your private network!

    WSL2 Misc Notes

    What about graphical applications? The short story is that one can set up their W10M to display Linux GUI applications, but it involves a lot of set up. This article claims that Microsoft is working to make Linux applications run somewhat seemlessly on W10, so I plan to just wait for that (since there is no Linux GUI in particular that I am keen to use on my W10M.)

    How does the Ubuntu file system interact with the W10 file system? In the last few months there have been some improvements in this regard. When you start an Ubuntu shell, it lands you in your W10 home folder in what looks as though it’s a mounted volume! So you can peruse and edit the files on your NSFT file system from within your Linux shell! (About a year ago, you could do something similar, but it was not so nearly smooth and “out of the box”. I’m really pleasantly surprised by how much Microsoft seems to be investing in WSL2, and how well these things are working together.

    What about networking? Again, a year ago, if you tried starting an apache server in Ubuntu, then, being within a virtual machine, it would not just “work” out of the box. But now when you do it, you can find access that network from a W10 browser just by going to localhost in the url bar. Awesome!

    What about ssh-ing into your Ubuntu shell?

    Intro to the new W10 Package Manager “winget”

    One of the best and most innovative things about Linux is the concept of the “package manager”. If you want to add software to your Linux machine, then, typically, you do not have to hunt down something to download, and then have that installer place something somewhere on your machine that may or may not be malware and/or completely impossible to remove (due to lack of centralized convention). Instead, you use a command line tool that speaks to a centralized remote “repository” of software. This CLI is called a package manager; it makes it incredibly easy to install/update/remove software and, since it’s organized by the same people in charge of your Linux distribution,​†​ you can have confidence that it won’t have any malware in it, and that it will be placed on your file system according to smart conventions so that it will not clash with other installed software, will have all the correct dependencies, etc., and thus will be easy to upgrade or remove in the future.

    As a rule of thumb, whenever you can install a progam via a package manager, install it via a package manager. Conversely, if the only option to install software is via a third party download, then first consider whether you really need it or if there is an alternative provided by a package manager. There is a lot to be said in keeping your machine lean and well organized, and key to this is to avoid third-party download installations or to keep them to an absolute minimum. (I very rarely install programs other than through a package manager these days.)

    (Further aside: one of my dreaded memories of owning a Windows PC back in the 90s was the inexorable feeling that the machine would inevitably become bloated over the course of time as you download/install more and more software that — depending on the 3rd parties competence and/or moral compass — will cripple eventually bring your machine to a horrible grinding halt.)

    Thankfully, Microsoft have come round (after realizing the popularity of centralized repositories like the Apple App store, Google Play, Homebrew, and all the various Linux package managers). First, they implemented the Microsoft Store, which allows you to get plenty of games and GUI apps, and now they have the “winget” CLI. In fact, it is the offering of WSL2 and winget that made me decide to give W10 another chance after decades of lofty disdain.

    At some point winget will be built into W10. In the meantime, if you are not on the W10 insiders program, then you can install it by visiting the github release page for winget-cli, downloading the “*.appxbundle” file, and running it.

    Once installed, you can run winget from a W10 Command Pompt or Powershell by running e.g. winget install vim.

    Exploring winget

    Our system thus far has three command line options:

    • The classic Windows “Command Prompt”
    • The Windows Powershell
    • Ubuntu WSL2

    Each of these can be launched through the Terminal app that we downloaded via the Microsoft Store. winget can be run from either of the Windows shells. To be clear, it is simply a safer and cleaner way to install programs on your W10M than by visiting myriad separate sites and downloading a graphical installer.

    Here are some programs that I recommend you install right off the bat with winget:

    • winget install vim
    • winget install vscode-system-x86
    • winget install 'Google Chrome'
    • winget install Brave
    • winget install firefox
    • winget install blender

    vim of course is meant to be run direct from the command line but, unfortunately, winget does not configure the W10 path environment variable to make vim launchable straight after installation. To achieve this, search for “Advanced System Settings” in the W10 search field (bottom left of screen), and select the option associated with the Control Panel.

    Then click on “Environment Variables” and within the area labelled “System Variables” select path and click on edit:

    Then click on “New” and then type or “Browse” to the location "C:\Program Files\Vim\vim82". Click OK, etc. to apply these settings, then open a fresh Powershell or Command Prompt. There you can type and run the command path to check the new content of the Path environment variable and verify that the path we just added is recognized within the shell.

    As an alternative way to check if vim is findable from within a Command Prompt shell, you can run where vim, and from a Powershell, run cmd /c where vim.​‡​ Now we can run vim from the Windows shells to edit files directly.

    Likewise, GUI apps like can be found in the main applications menu as per apps downloaded by the Microsoft Store. In some cases you can download a GUI app through either the store or winget, such as blender.

    One shortcoming, IMO, of winget is the fact that you cannot perform upgrades or uninstalls right out of the box. These are considered “experimental features”. To enable these features, you need to run winget settings, which opens a file in notepad, top which you then add the following block:

    {
        ...
        // DWD ADDED:
        "experimentalFeatures": {
            "uninstall": true,
            "upgrade": true
       }
    }

    Now you can run e.g. winget upgrade 'Google Chrome', etc. (IMO, this sort of functionality is supposed to be central to what a package manager is all about, and does NOT lend confidence.)

    Backing Up a W10 Machine

    … to be continued …


    1. ​*​
      I am not claiming these are the only or even best way to accomplish things, they are just part of my regular workflow, and so I want to be able to map these concepts from Mac to W10
    2. ​†​
      This is not always the case; sometimes you need to add access to additional remote repositories; when you do this, of course you have to make a judgement as to the reputability of the source.
    3. ​‡​
      cmd /c CMD just means to use the Command Prompt command to run CMD

  • Installing Windows 10 when all you have is a Mac (UEFI Version)

    In a previous article I described how to install Windows 10 on a machine when all you have otherwise is a Mac. The problem is that you need Windows 10 to install Windows 10, so I had to use Virtualbox on the Mac to turn my USB device into a Windows-10 installer.

    The Problem

    I installed Windows 10 onto my refurbished Dell T5810 workstation using the process described in the previous article. This however only worked if you booted your destination drive using “Legacy” mode. That was OK for a while, but I wanted to boot using UEFI because, so I’m told, that’s the more modern/sophisticated way to do things and it will make your machine boot faster.

    Now, I originally assumed that my installation of Windows 10, carried out as it was with the official Microsoft Installer software within Virtualbox, would have made my installation of Windows 10 UEFI compatible by default. So I booted my workstation into System Setup (by pressing F2 on restart), and started playing around with settings. I very naively assumed that Dell would not allow me to set things in such a way as to make it impossible for me to get back into System Setup. Nope. I tried some settings following the advice of some random crapy article I googled, and my workstation stopped working altogether. Powering it on left me with a totally blank screen.

    I followed some advice to get the CMOS back to factory settings by TWICE removing the watch battery from the motherboard, holding the power button for 30 seconds (to drain any residual charge from the capacitors, etc.), but this did not solve the problem. However, the third time I tried this I decided to leave the battery out overnight just in case it needed several hours to completely reset and, thankfully, that worked!

    The Solution

    Upon further research, I came to realize that my installation of Windows 10 was fundamentally incapable of UEFI booting because that feature is simply not integrated into my original USB installer; an option that, as I said, the official Microsoft Software does not offer. Again, how naive of me to assume that a product straight from Microsoft to support its historic flagship product would not offer, let alone provide by default, the most modern booting option.

    Anyhow, long story short, you need to create the USB device installer using a different software product called rufus. So follow all the steps in the previous article up to the point where you have a Windows 10 instance running on Virtualbox, you’ve downloaded the Microsoft MediaCreationTool, and you’ve arrived at this window:

    MediaCreationTool: Choose ISO file this time!

    Now, instead of creating our Windows 10 installer directly onto the USB device, you need to instead create an ISO file and save it to your simulated Desktop.

    Next, go to https://rufus.ie/downloads and save the latest .exe file to your Virtualbox instance’s Downloads folder.

    Download the rufus tool from https://rufus.ie/downloads

    Once downloaded, run rufus as administrator to get this interface:

    Under the “Device” field you need to select your USB device (which, here, is confusingly labelled by its partitions). Next, in the “Boot selection” field you need to select “UEFI:NTFS”, and make sure the Partition Scheme is GPT. In the field next to the “Boot selection” field, labelled “Select”, you need to locate the ISO file you downloaded using the MediaCreationTool. Make sure the rest of your settings are the same as in the image above (or are otherwise sensible), and hit START to format your USB device.

    Once that process is finished you can quit Virtualbox and, boot up your target machine with this USB device, and install Windows 10 from scratch, and then you can expect it to boot with UEFI.

  • Installing Windows 10 when all you have is a Mac (Legacy/Non-UEFI Version)

    Important! This advice has been deprecated and is only applicable if you’re trying to install Windows 10 on a machine without UEFI support. If your machine does have UEFI support, then start here.

    Background

    Skip this section if you just want to jump to the “how I did it” content.

    I haven’t used Windows in a serious way for about 15 years now. I enthusiastically converted to Apple in ~2005 and never expected to want to own a PC again. From about 2005 to 2015, I held Microsoft with contempt and couldn’t imagine why anyone would use their products. IMO, Steve Jobs raised the bar incredibly high as to what a modern personal-computer company can be.

    It turns out though that Microsoft eventually took notice (circa Balmer’s exit?) and began raising its own bar. It began to get my notice about ~5 years ago when it started developing some fantastic open source products (typescript and Visual Studio Code in particular).

    I’d also started hearing rumors about linux being integrated into Windows 10. Curiosity to check it out, and to be able to better interact with students and interns who had Windows machines, lead me to finally commit to getting a machine on which I could give Window’s a fresh shot.

    I’d also been wanting to try out some photogrammetry software for a while that requires an Nvidia GPU. That, and other motivations, lead me to seek out a server/workstation on to which I could install Windows 10. I found a great deal on Newegg.com for a Dell Precision T5810. For $290 (+ $15 tax) I got 64 GB DDR4 RAM, a E5-2620 v3 2.4GHz 6-Core (x2 hyper-thread) Intel Xeon CPU, and a simple GPU (Quadro NVS 295). The only catch was it had no drives and, therefore, no starting OS.

    I had some drives sitting around, and figured it would be easy to just install Windows 10 myself. However, I was surprised to learn upon googling “Install Windows from USB” that almost all solutions assumed you already had access to a Windows 10 machine. Getting round this chicken-and-egg problem with just a Mac took some research that I hope others can benefit from.

    Installing Windows 10 without Windows 10

    Requirements

    • Mac with recent OS and Homebrew installed
    • At least ~25GB free hard drive space
    • An external SSD drive (see below; a recent USB 3.0 flash drive is supposed to work but didn’t seem to in my case)

    Basic Approach

    After some digging, I concluded that there are two basic ways to get a Windows 10 installer onto a USB drive starting with just a Mac:

    1. Run a modified “Boot Camp Assistant” from my Mac’s /Applications/Utilities/Boot Camp Assistant.
    2. Emulate Windows 10 on your Mac.

    If you want to go with the first approach then you can consult this gist that seems to be thoroughly researched. However, I it had an aura of hackiness about it, so I opted to go with an emulation solution.

    To be clear, I really dislike emulating whole operating systems, so the goal here is to create-use-delete a VM Windows 10 instance as quickly and simply as possible so that we can get Windows 10 properly installed on a separate dedicated machine.

    Install Windows 10 via Virtualbox

    First, you’ll need to obtain a copy of Windows 10 as an ISO file. You can get that direct from Microsoft. I went for Windows 10, 64-bit, with English language. The downloaded ISO file is ~5GB. Save this to your Downloads folder.

    While that’s downloading, install virtualbox and its extension pack on your Mac with:

    brew cask install virtualbox
    brew cask install virtualbox-extension-pack

    Open virtualbox from /Applications and click on the blue-spiky-ball “New” icon to create a new virtual machine.

    Virtualbox Main UI

    You’ll be guided through a few steps. Give the VM a name, choose Windows (64-bit) as your OS, and decide how much RAM you want the VM to be able to use. (I wasn’t sure what to pick here since I didn’t know how RAM-hungry Windows 10 is or the mechanics of virtualbox in these regards. My machine has 16GB, so I figured I’d allot ~6GB. I monitored virtualbox during the heavy parts and it pretty much maxed out all my Mac’s available memory at times, but I’m still not sure how this setting is handled in that regard.)

    When you’ve chosen your memory size, select “Create a virtual hard disk” and then click “Create”.

    Virtualbox wizard to allot RAM.

    You’ll then be asked about how/where you want the hard disk for the VM to be set up. The first time I did this, I gave a ball park guess of ~20GB, but later found that this wasn’t enough. Windows 10 actually requires a minimum of 22,525MB, hence why I recommended earlier that you allot at least 25GB. However, if you can spare it, then go for even more like 40GB — this is the amount I chose (second time trying!), and it seemed to work fine for me.

    Leave the other default settings and click “Create”.

    Virtualbox wizard to allot hard-disk space and file format.

    Once the VM is created, we need to enable the VM to access the USB device.

    Now, as I mentioned earlier, a USB flashdrive is supposed to work, but I tried 3 different flash drives and found that they would all fail late in the process (and get extremely hot). Luckily for me, I had an external SSD drive lying around so I tried that and it worked no problem. I can only speculate that the work involved in writing to a USB drive passing through the Mac OS to/from the Windows 10 instance was too intense for relatively slow flash drives, and thus requires an SSD. For reference, the SSD drive I used can be found here on Amazon. (If you want to give as fast USB thumdrive a go then good luck to you, but I’ll assume from hereon that you’re using an SSD.)

    Anyhow, once you have your SSD interted into your Mac, select the Windows 10 item in the left column of main virtualbox view so that its various settings and properties and can be viewed on the right of that view. Go down to the USB section and click on the word “USB”.

    The main view of the virtualbox interface.

    This will open a menu enabling you to add the SSD drive that we will want to make available to our virtual Windows 10 instance.

    Virtualbox menu to pass USB device through to virtual Windows 10 instance.

    You also must also make sure to select “USB 3.0 (xHCI) Controller”, or your Windows 10 instance won’t detect the USB. (Note: these USB 2.0 and 3.0 options are only available because you installed the virtualbox-extension-pack earlier.)

    One last thing before we try to start our Windows 10 instance: go to virtualbox preferences, and select the “Display” tab. Change the “Maximum Guest Screen Size” to “none” and then click “OK”. This will prevent the simulated screen from showing up in a smallish box that will make it rather tedious to interact with the Windows 10 simulation.

    Virtualbox preferences; enable the view of instance to scale.

    Now we’re ready to start our Windows 10 instance, so click “Start” at the main interface. The first time you run the Windows 10 instance, virtualbox will prompt you to select a “disk” with which to boot the new virtual machine. You need to go through the drop-down selector to add the ~5GB Windows 10 ISO file that you saved to your Downloads folder earlier.


    Virtualbox wizard to select Windows 10 ISO file.

    Once the disk has been selected from your Downloads folder, click “Start” to launch the VM simulating a first installation of Windows 10. Along the way, you’ll have to answer standard setup questions, accept terms, etc. Keep things simple: don’t sign into a Microsoft account (go with “Offline Account” and “Limited Experience”). When prompted, do not try to use an activation key (just press “I don’t have a key”). When you come to select an OS, I went with Windows 10 Professional (though things might have been more streamlined if I’d gone with the simpler Home Edition). On the screen “Choose privacy settings for your device”, I switched basically every service off. Decline all of the personalization, Cortana-spy-on-you functionality, etc.

    Switch off all of the invasive-data options in the Windows 10 setup.

    This process took me about 10 minutes to get through.

    An important step is to choose “Custom: Install Windows Only” since we are not upgrading a system from a previous incantation of Windows.

    Eventually, you’ll end up with a working Windows 10 interface.

    Installing a Windows 10 installer within an virtual Windows 10 machine onto a USB device

    Once in a working Windows 10 instance, we need to install the program that will turn our USB device into a portable Windows 10 installer. Open the Edge browser (the icon on the Desktop is easiest), go to:

    www.microsoft.com/en-us/software-download/windows10

    … and click on “Download tool now” under “Create Windows 10 installation media”.

    Opt to save this download, and then double click on that exe in the Downloads folder. This will launch the “Windows 10 Setup” wizard. Select “Create installation media (USB flash drive, DVD, ISO file) for another PC” when prompted.

    You’ll then need to select/confirm your Windows version, language and target architecture.

    Finally, you’ll be asked to choose your USB device. If you set up the pass-through options correctly earlier, then it will show up as the sole option.

    Click next to start the installation onto the USB disk. This will take an external SSD drive about 10-15 minutes to complete. As I mentioned, I also tried three USB flash drives, and they each started getting sluggish after about 10 minutes (slowing to a halt at ~50%), and then reported an obscure error after about 20 minutes (having got very hot!). If you don’t have an external SSD handy, then I’ve heard good things about the Sandisk Extreme Pro.

    Once the process completes, you can power down the VM instance, right click on the item in the main virtualbox interface, and remove it. It will then give you an option to remove all related files. This will free up your disk space.

    Using the SSD as a boot drive on a Dell T5810

    It’s beyond the scope of this article to go over the general details of installing an OS from such a USB device, but I’ll quickly mention the smooth ride I had from thereon with my refurbished Dell T5810.

    In my case, I had to add a main drive to the T5810 (a 1TB SSD Samsung), and then I powered on the machine with the external SSD plugged into one of the USB 3.0 slots. The first boot took a while (~1 min as I recall) to show anything, but then the Dell logo showed up and I pressed F2 in order to enter System Setup. There I was able to select Legacy Boot and ensure that the external SSD would be used early on in a legacy-BIOS boot. Exiting that menu caused the system to reboot from the external SSD and entered me into a Windows 10 installation wizard as expected.

    The only hiccup I encountered concerned an error when trying to select the internal SSD drive (I was told Windows 10 could not be installed there), but that problem was quickly solved by this absolutely fantastic ~1 min video on Youtube.

    I now have Windows 10 working great on the T5810, and I’m so impressed with it that I’ll have to write another article soon on that subject!