10GB Network Between Windows 10 and Freenas

I recently picked up a pair of Mellanox MNPA19-XTR 10GB Ethernet cards from eBay for a really good price. I wanted a faster way to do back ups. Currently, I have a Synology DS1815+ as my main storage server. It has 8x 4TB configured as a RAID6. This will give me up to two drives to fail with a third destroying the RAID itself.

Next I’m using my old X79 PC running Freenas. It has 8x 2TB configured in RAIDZ (RAID5). I know, with that many drives I should run at least a RAIDZ2. But the purpose of this is a back up the Synology server.

Now I wanted another back up because I don’t want to lose any data plus it’s fun to play with these things. I decided to pick up 3X 8TB drives and will configure them as a software RAID5 on Windows 10.

IMG_0370.jpg
2X Western Digital Red and Seagate Ironwolf 8TB

This was also good time to dust off my X99 PC in the Fractal Design Node 804. This case has grown into me. I really like this case. The design of this case is great. The filters work great and adding these 3 hard drives was easy. The only issue I had was with the Seagate drive where only two of the four holes lined up.

IMG_0371.jpg
Not the same hole position on Seagate drive?

The Seagate drive swings back and forth but not a big deal since the computer just sits in its place.

When initializing the drives, make sure you select GPT if the drives are over 2TB each. Otherwise, it will resize them to more than 1 partition each disk.

initilize_disk_gpt.png
Initialize disks using GPT for drives larger than 2TB

Next I will use Storage Spaces to create a RAID5 pool.

raid5pool_storage_spaces.png
Windows Storage Space RAID5 Pool

Now on to the Mellanox card. Windows 10 has identified it automatically without any driver install.

device_manager_mellanox.png

Next I will give the Mellanox card a static IP using 192.168.100.100.

mellanox_static_ip_windows.png
Windows Network TCP/IPv4 static IP
mellanox_static_ip_windows_jumbo_packet.png
Make sure you set Jumbo Packet = 9000

In Freenas, go Network then Add Interface. On the NIC dropdown, you should see a new adapter – select it and fill out the information. I will use 192.168.100.101 with the same subnet mask.

mellanox_static_ip_freenas.png
Freenas IP configuration – make sure you add mtu 9000 in options

When setting the IP address to the Mellanox, the IP saved on the first NIC either changed or became inaccessible. So I set the static IP on that as well and all went back to normal.

I created a test file on Windows that’s 10GB big using

fsutil file createnew test10gb.txt 10000000000

I wanted to see how fast I can copy the file from my desktop to both the storage pool and a shared folder on Freenas using the 10GB connection. Here are the results.

10gb_transfer_to_storage_pool.png
10GB file transfer from Desktop to Storage Pool
10gb_transfer_to_freenas_via_mellanox.png
10GB file transfer from Desktop to Freenas shared folder via 10GB network

The storage pool transfer is a bit slow but not surprising. The speed to the shared Freenas folder was as expected. I ran CrystalDiskMark on both and here are the results that support the speeds above.

benchmark_raidpool_drive.png
Benchmark on Storage Pool
benchmark_shared_folder_via_10gb.png
Benchmark on shared folder using 10GB network

Overall, this has been a good addition. The cards are around $32 for two and the cables were only $12 – SFP-H10GB-CU3M Cisco SFP DAC cable. So for less than $50 I can connect to Freenas using 10GB ethernet. I will be using Robocopy and running back ups.

Make sure you pull out the cables using the color tabs. They are locked in place and the tabs will release them.

Laravel Homestead on Windows Issues

I really want to use Windows and Laravel Homestead as a dev environment so that I don’t have to keep pulling out my Macbook Pro when I’m at home. I have a 2015 iMac at home but I do want to utilize the better hardware on my PC. No matter how many times I try, I just can’t get it to work.

This post is meant for me to have notes on my latest attempts and results. Many seem to have success with Homestead and Windows. Laravel commands run fine but when it comes to NPM commands it just gives me problems.

The latest error is…

npm ERR! path /home/vagrant/myproject/node_modules/fsevents/build/Release/.deps/Users/eshanker/Code/fsevents/lib
npm ERR! code ETXTBSY
npm ERR! errno -26
npm ERR! syscall rmdir
npm ERR! ETXTBSY: text file is busy, rmdir ‘/home/vagrant/a1careportal/node_modules/fsevents/build/Release/.deps/Users/eshanker/Code/fsevents/lib’

npm ERR! A complete log of this run can be found in:
npm ERR! /home/vagrant/.npm/_logs/2018-01-27T18_23_45_986Z-debug.log

Some solutions say to use sudo but you’re not really supposed to so I did the solution found at https://docs.npmjs.com/getting-started/fixing-npm-permissions. That did not work so I used sudo anyway and still a problem.

I ran the command with sudo, –no-bin-links, and –no-optional. I even followed suggestions from https://stackoverflow.com/questions/45678817/error-etxtbsy-text-file-is-busy-on-npm-install. Still issues.

Once again, I have wasted an entire morning. I really want to use my PC hardware but don’t want to dual boot on Ubuntu. I have a spare Dell Inspiron running Ubuntu and I have my iMac and Macbook Pro. I guess I just want it to work. Oh well, when I get the itch to look into it again, I guess I’ll find another morning to waste time on it.

Update 2018-01-01: Problem Solved

I finally fixed the problem. I updated the package.json using code from another project. I noticed there was a new entry called “config”. I ended up copying the “scripts” and “config” section. Here’s what I have below.

"scripts": {
    "dev": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch-poll": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "hot": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
    "production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
  },
  "config": {
    "webpack": "node_modules/laravel-mix/setup/webpack.config.js"
  },

Finally, Homestead works on Windows 10.

Laravel Development on Windows 10 Using Linux Subsystem

This is a guide on how to configure Windows 10 using the Fall Creators Update released in October 2017. I will be using Ubuntu for the Linux Subsystem.

Ubuntu

  1. Turn on Windows Subsystem for Linux in the Windows Feature
    windows_feature_wsl
  2. Restart Windows so it fully installs it
  3. Then go to the Windows Store app and download and install Ubuntu
    ubuntu_windows_store
  4. Launch it from the Windows Store screen. Terminal will open and will ask you questions to configure the environment such as username and password.
  5. You should update Ubuntu with the usual commands
    sudo apt-get update
    sudo apt-get upgrade -y
  6. Install build essentials
    sudo apt-get install build-essential -y

PHP7

Now your environment is up to date. The next step is to get PHP7 installed. Depending on the version of Ubuntu, you may not have access to the latest version of PHP. Just add a repository and install it. For this guide, I will be install PHP7.1.

  1. sudo apt-get install -y python-software-properties
  2. sudo add-apt-repository -y ppa:ondrej/php
  3. sudo apt-get update -y
  4. sudo apt-get install -y php7.1 php7.1-cli php7.1-common php7.1-mbstring php7.1-gd php7.1-mysql php7.1-mcrypt php7.1-zip php7.1-xml

NodeJS

  1. curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash –
  2. sudo apt-get install -y nodejs

Composer

Instructions can be found at https://getcomposer.org/download/. Please note, step 2 below changes. The hash value is generated automatically. Step 5 will move and rename the command so it is accessible throughout the environment. Step 6 will test it if it works.

  1. php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
  2. php -r “if (hash_file(‘SHA384’, ‘composer-setup.php’) === ‘[this is where the hash goes – do not copy this verbatim – go to the link above’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL;”
  3. php composer-setup.php
  4. php -r “unlink(‘composer-setup.php’);”
  5. sudo mv composer.phar /usr/local/bin/composer
  6. composer about

Laravel

Please be careful with copying and pasting. The quotes sometimes gets pasted with a different font – thus ending in a different result. After installation, make sure you add the path to your profile file (~/.profile) with step 3. If there’s already a line that exist, just add it. Keep in mind that each path is separated by a colon (:) and ends with $PATH.

  1. composer global require “laravel/installer”
  2. pico ~/.profile
  3. export PATH=~/.config/composer/vendor/bin:$PATH
  4. source ~/.profile

MySQL Server

Install MySQL server and follow the on-screen instructions. If the server is not started or you get a mysqld.sock error, you probably need to start the service. The command is in step 3.

  1. sudo apt-get install mysql-server -y
  2. sudo service mysql start
  3. sudo mysql_secure_installation

To help manage your database, download MySQL Workbench from https://dev.mysql.com/downloads/workbench/. You may need to download some prerequisite software from Microsoft.

mysql_workbench_requirements
Click the OK button
mysql_workbench_download_prerequisites
Click the Download Prerequisites button

Click on the Download Prerequisites button and it will take you to https://dev.mysql.com/resources/wb62_prerequisites.html. This page will list a couple of software but all I download is the Visual C++ Redistrubatble for Visual Studio 2015. Meeting that requirement seems to be enough for me. I download the 64bit version to match my operating system. Once installed, run the MySQL Workbench installer again and you should have no problem.

Create a new connection. The default values should work. All you have to do is provide the password.

mysql_connection_test
Connect to your new MySQL Server

Make sure that Ubuntu is running and that the MySQL service is also running or you won’t be able to connect.

That’s about it. I’m glad WSL is out of beta. So far it’s been running well.

I tried Virtualbox with Ubuntu workstation and after the Creator’s Update, it stopped working. I can log in but it won’t load the desktop on the console window. Oddly enough, the preview window shows the desktop loaded.

I also tried Homestead but I get an error with the shared folder. I run npm commands and it tells me that it can’t delete and write because of permission denied. I also tried Hyper-V and Ubuntu workstation is horrible on it. Moving the mouse lags. I’ve given it 2 CPU and 6GB of ram. I used different drivers – nothing.

I also posted a different way to develop Laravel on Windows check it out here. It works for the most part but it’s not as clean with SSH keys and GIT repositories. That article is actually pretty popular based on my analytics. I’m a bit surprised since I don’t really recommend using Windows for development unless you’re using Microsoft technology. It’s just a huge headache. We’ll see how well this environment last. Fortunately for me I have Apple computers and can run Ubuntu on spare hardware. This guide is just for my curiousity and to help others. Also, I like being able to use “better” hardware than my Apple devices.