<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vikas N Kumar's Website</title>
    <description>This website is Vikas N Kumar's personal site for his fun hobby work. Here you will find some interesting things.</description>
    <link>https://www.vikaskumar.org/</link>
    <atom:link href="https://www.vikaskumar.org/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 03 Mar 2026 12:28:08 -0500</pubDate>
    <lastBuildDate>Tue, 03 Mar 2026 12:28:08 -0500</lastBuildDate>
    <generator>Jekyll v3.8.7</generator>
    
      <item>
        <title>SETTING UP INBOUND AND OUTBOUND CALLING ON PHONE SYSTEM WITH ASTERISK</title>
        <description>&lt;p&gt;&lt;a href=&quot;/2026/02/24/cisco-voip-internal-phone-system-setup-asterisk-sip.html&quot;&gt;Previously&lt;/a&gt; we saw how to setup and internal phone system using Asterisk and old Cisco® phones with extensions. You could call any phone extension in the system directly. However, it did not do any outbound calling to actual phones or receive inbound calls from them.&lt;/p&gt;

&lt;p&gt;This post explains how to use a VOIP provider like &lt;a href=&quot;https://www.twilio.com/docs/sip-trunking&quot;&gt;Twilio&lt;/a&gt; or &lt;a href=&quot;https://www.vonage.com/communications-apis/sip-trunking/&quot;&gt;Vonage&lt;/a&gt; or &lt;a href=&quot;https://voip.ms/blog/what-is-elastic-sip-trunking/&quot;&gt;VOIP.ms&lt;/a&gt; using the concept of &lt;a href=&quot;https://en.wikipedia.org/wiki/SIP_trunking&quot;&gt;&lt;strong&gt;SIP Trunking&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By setting up the Asterisk system to use SIP trunking, the phone system can now make outbound calls and receive inbound calls from regular phones. Back in the day, the USA had analog telephones, commonly known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Plain_old_telephone_service&quot;&gt;POTS&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Public_switched_telephone_network&quot;&gt;PSTN&lt;/a&gt;, but in the last ten years or so these
telephones have completely disappeared and replaced with VOIP phones. Historically, you would have needed a custom PCI-E card to convert your VOIP to POTS technology, but today you do &lt;strong&gt;not&lt;/strong&gt; need that anymore. You can use a VOIP service provider like Twilio or Vonage or VOIP.ms and be successful at doing calls to regular phones. All over the internet using your existing internet connection without paying too much extra.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;TABLE OF CONTENTS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#sip-trunking-with-twilio&quot;&gt;1. SIP Trunking With Twilio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#setting-up-asterisk-configuration&quot;&gt;2. Setting Up Asterisk Configuration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#setting-up-firewall-rules&quot;&gt;3. Setting Up Firewall Rules&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#references&quot;&gt;4. References&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;sip-trunking-with-twilio&quot;&gt;SIP TRUNKING WITH TWILIO&lt;/h2&gt;

&lt;p&gt;I chose Twilio to do the SIP trunking, since I already had an external VOIP number with them which was not being used much over the years. The phone number that you can buy from Twilio can also receive text messages. I setup the text message forwarding using Twilio’s &lt;a href=&quot;https://www.twilio.com/docs/voice/twiml&quot;&gt;TwiML apps&lt;/a&gt; to forward to my actual cellphone and let the phone calls on that number be used for SIP trunking with Asterisk.&lt;/p&gt;

&lt;p&gt;Here’s a summary of the steps you need to follow. All details are provided in their excellent &lt;a href=&quot;https://www.twilio.com/docs/sip-trunking&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Login to Twilio and access your Dashboard&lt;/li&gt;
  &lt;li&gt;Create a new SIP Trunk&lt;/li&gt;
  &lt;li&gt;Disable &lt;em&gt;Secure Trunking&lt;/em&gt; for now.&lt;/li&gt;
  &lt;li&gt;Create a username and password for the SIP trunk authentication from your Asterisk setup. Make sure the password is at least 24-32 characters.&lt;/li&gt;
  &lt;li&gt;Add your Asterisk server’s external WAN IP address to the allow list. If you have a home IP address since you are setting Asterisk up at home like me, you may want to periodically check this IP address allow list, or allow all IPs (insecure). You may be able to use a Dynamic DNS FQDN here too.&lt;/li&gt;
  &lt;li&gt;Note down the &lt;a href=&quot;https://en.wikipedia.org/wiki/Public_switched_telephone_network&quot;&gt;PSTN&lt;/a&gt; host name for your SIP trunk.&lt;/li&gt;
  &lt;li&gt;Note down all the &lt;a href=&quot;https://www.twilio.com/docs/sip-trunking/ip-addresses&quot;&gt;Twilio IP addresses&lt;/a&gt; for your region.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have all this information you can proceed to update the Asterisk configuration to perform calls via the Twilio SIP Trunk.&lt;/p&gt;

&lt;p&gt;The setup is identical if you instead choose to use Vonage or VOIP.ms SIP trunking. The only things that will change will be the PSTN hostname which will be unique to each SIP provider, the authentication credentials and the IP addresses.&lt;/p&gt;

&lt;p&gt;Twilio notes in their &lt;a href=&quot;/files/voip/callmanager/AsteriskTwilioSIPTrunkingv2_1.pdf&quot;&gt;Asterisk setup documentation&lt;/a&gt; that they only support &lt;code class=&quot;highlighter-rouge&quot;&gt;ulaw&lt;/code&gt; codecs and not others.&lt;/p&gt;

&lt;h2 id=&quot;setting-up-asterisk-configuration&quot;&gt;SETTING UP ASTERISK CONFIGURATION&lt;/h2&gt;

&lt;p&gt;Make sure you have Asterisk setup as described in the &lt;a href=&quot;/2026/02/24/cisco-voip-internal-phone-system-setup-asterisk-sip.html&quot;&gt;previous post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This section will describe adding to that configuration.&lt;/p&gt;

&lt;p&gt;You want your Asterisk, which most likely is behind a NAT or Firewall in a LAN, to connect to Twilio over your network’s external IP address that you may have &lt;em&gt;allowed&lt;/em&gt; in Twilio’s SIP Trunking setup above.&lt;/p&gt;

&lt;p&gt;Asterisk will need to be told that information too.&lt;/p&gt;

&lt;p&gt;In &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/sip.conf&lt;/code&gt; add the following lines to the &lt;code class=&quot;highlighter-rouge&quot;&gt;[general]&lt;/code&gt; section. Remember from the previous post that we used &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_sip&lt;/code&gt; and not &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_pjsip&lt;/code&gt; in our Asterisk setup.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[general]
;add IP addresses
localnet=192.168.9.0/24         
;externaddr=XXX.XXX.XXX.XXX      
externhost=myhomeip.example.com
externrefresh=180
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As you have seen in the previous post, the local LAN address is &lt;code class=&quot;highlighter-rouge&quot;&gt;192.168.9.0/24&lt;/code&gt; for my system, and maybe different for yours. You have to set that to the &lt;code class=&quot;highlighter-rouge&quot;&gt;localnet&lt;/code&gt; configuration option. If you have a known external IP address, you can set that using the &lt;code class=&quot;highlighter-rouge&quot;&gt;externaddr&lt;/code&gt; option. If you have a Dynamic DNS setup, you can set that to the &lt;code class=&quot;highlighter-rouge&quot;&gt;externhost&lt;/code&gt; option, with a refresh rate set to &lt;code class=&quot;highlighter-rouge&quot;&gt;externrefresh&lt;/code&gt; in seconds.&lt;/p&gt;

&lt;p&gt;Use either the &lt;code class=&quot;highlighter-rouge&quot;&gt;externhost&lt;/code&gt; or the &lt;code class=&quot;highlighter-rouge&quot;&gt;externaddr&lt;/code&gt; option, but not both. The &lt;code class=&quot;highlighter-rouge&quot;&gt;externaddr&lt;/code&gt; takes precedence.&lt;/p&gt;

&lt;p&gt;Now setup the Twilio outbound calling template and details in the &lt;code class=&quot;highlighter-rouge&quot;&gt;sip.conf&lt;/code&gt; file at the bottom.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[twilio-trunk](!)
type=peer
context=from-twilio
canreinvite=no
insecure=port,invite
disallow=all
allow=ulaw
;;;NOTE: ENTER YOUR EXTERNAL IP HERE
externaddr=XXX.XXX.XXX.XXX

[twilio0](twilio-trunk)
;;;NOTE: CHANGE YOUR SIP TRUNK TO WHAT YOU SETUP
host=MYSIPTRUNK.pstn.us1.twilio.com
remotesecret=CHANGE_THIS_PASSWORD
secret=CHANGE_THIS_PASSWORD
defaultuser=MYSIPTRUNK_USERNAME

[twilio1](twilio-trunk)
host=54.172.60.0

[twilio2](twilio-trunk)
host=54.172.60.1

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As you can see above, these settings will be custom to your SIP trunk setup. You will set your external IP address here optionally, you will setup your PSTN SIP Trunk URL from Twilio, the username and password credentials (as &lt;em&gt;defaultuser&lt;/em&gt;, &lt;em&gt;remotesecret&lt;/em&gt; and &lt;em&gt;secret&lt;/em&gt;), and lastly set all the individual IP addresses as separate sections.&lt;/p&gt;

&lt;p&gt;Twilio provides multiple &lt;a href=&quot;https://www.twilio.com/docs/sip-trunking/ip-addresses&quot;&gt;IP addresses&lt;/a&gt; for each region, so I added all the IP addresses one at a time for all the US regions. I ended up with 8 such sections. Twilio says that the calls can be received from any such IP address, so it makes sense to add all of them due to load balancing on Twilio’s side.&lt;/p&gt;

&lt;p&gt;You may have noticed the &lt;code class=&quot;highlighter-rouge&quot;&gt;context&lt;/code&gt; name &lt;code class=&quot;highlighter-rouge&quot;&gt;from-twilio&lt;/code&gt;. This has to be defined in the &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/extensions.conf&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;But first, we add an additional extension too. Taking the configuration from the previous post and adding an extra outgoing extension pattern as below.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[extensions]
exten =&amp;gt; 100,1,Goto(call-extension,${EXTEN},1)
; Note the duplication of the hint peername
same =&amp;gt; hint,SIP/100,SIP/100
exten =&amp;gt; 101,1,Goto(call-extension,${EXTEN},1)
same =&amp;gt; hint,SIP/101,SIP/101
exten =&amp;gt; 102,1,Goto(call-extension,${EXTEN},1)
same =&amp;gt; hint,SIP/102,SIP/102
;;; TWILIO SIP TRUNK OUTGOING
exten =&amp;gt; _1NXXXXXXXXX,1,Set(CALLERID(all)=&quot;Vikas Kumar&quot; &amp;lt;+18888888888&amp;gt;)
same =&amp;gt; n,Dial(SIP/twilio0/+${EXTEN})

[from-twilio]
exten =&amp;gt; _+1NXXXXXXXXX,1,Dial(SIP/100)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the above configuration, &lt;code class=&quot;highlighter-rouge&quot;&gt;from-twilio&lt;/code&gt; handles all inbound calls received on the SIP trunk phone number, shown above as &lt;code class=&quot;highlighter-rouge&quot;&gt;+18888888888&lt;/code&gt;, and routes it to extension &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt;. It does &lt;strong&gt;not&lt;/strong&gt; ring all the extensions in a round-robin fashion at the moment, just the &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt; one.&lt;/p&gt;

&lt;p&gt;The outbound calling is done based on the pattern &lt;code class=&quot;highlighter-rouge&quot;&gt;_1NXXXXXXXXX&lt;/code&gt; which requires a &lt;code class=&quot;highlighter-rouge&quot;&gt;1&lt;/code&gt; (US country code) to be dialed followed by 10 digits, and will then route that call to &lt;code class=&quot;highlighter-rouge&quot;&gt;twilio0&lt;/code&gt; as defined in &lt;code class=&quot;highlighter-rouge&quot;&gt;sip.conf&lt;/code&gt;. It sets a caller ID, which shows my name and the phone number &lt;code class=&quot;highlighter-rouge&quot;&gt;+18888888888&lt;/code&gt;. You should replace that with whatever caller ID name you want to be displayed along with the phone number you have purchased from your SIP provider.&lt;/p&gt;

&lt;p&gt;That’s it. Now restart Asterisk or do a reload using the command line interface:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;asterisk &lt;span class=&quot;nt&quot;&gt;-rvvvv&lt;/span&gt;
CLI&amp;gt; sip reload
CLI&amp;gt; dialplan reload
CLI&amp;gt; core reload
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now you should be able to make outbound calls and receive inbound calls successfully.&lt;/p&gt;

&lt;p&gt;You can also use &lt;a href=&quot;https://www.twilio.com/docs/sip-trunking/trunk-verification&quot;&gt;Twilio’s SIP trunk testing system&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But wait, you are behind a Firewall !! Your inbound calls are not coming in.&lt;/p&gt;

&lt;h2 id=&quot;setting-up-firewall-rules&quot;&gt;SETTING UP FIREWALL RULES&lt;/h2&gt;

&lt;p&gt;You have to let your firewall allow connections from Twilio’s dedicated IP addresses to connect to your Asterisk server’s SIP port &lt;code class=&quot;highlighter-rouge&quot;&gt;5060&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;5061&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In my case the Asterisk server runs on &lt;code class=&quot;highlighter-rouge&quot;&gt;192.168.9.99&lt;/code&gt;. So the firewall rule will be like below:&lt;/p&gt;

&lt;p&gt;Allow Twilio IP range &lt;code class=&quot;highlighter-rouge&quot;&gt;54.172.60.0/30&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;54.244.51.0/30&lt;/code&gt; on the WAN address at ports &lt;code class=&quot;highlighter-rouge&quot;&gt;5060&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;5061&lt;/code&gt; to redirect all those connections to IP &lt;code class=&quot;highlighter-rouge&quot;&gt;192.168.9.99&lt;/code&gt; on ports &lt;code class=&quot;highlighter-rouge&quot;&gt;5060&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;5061&lt;/code&gt;, respectively.&lt;/p&gt;

&lt;p&gt;Also allow &lt;code class=&quot;highlighter-rouge&quot;&gt;UDP&lt;/code&gt; ports &lt;code class=&quot;highlighter-rouge&quot;&gt;10000-20000&lt;/code&gt; for RTP packets to enter the firewall and forward them to &lt;code class=&quot;highlighter-rouge&quot;&gt;192.168.9.99&lt;/code&gt; which is our Asterisk IP. This is required in case you have an external SIP extension that needs to connect to your internal Asterisk IP. This also is required to run the Twilio tests.&lt;/p&gt;

&lt;p&gt;Depending on your router, you will need to set this in their &lt;em&gt;port forward&lt;/em&gt; setup screen.&lt;/p&gt;

&lt;p&gt;That’s it. Now you should be able to call the Twilio number and see your Cisco® VOIP phone ring.&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;REFERENCES&lt;/h2&gt;

&lt;p&gt;I was helped by many references from the internet and I am listing all of them here, so they can be of reference to you too.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.twilio.com/docs/sip-trunking&quot;&gt;Twilio - SIP Trunking&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.vonage.com/communications-apis/sip-trunking/&quot;&gt;Vonage - SIP Trunking&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://voip.ms/blog/what-is-elastic-sip-trunking/&quot;&gt;VOIP.ms - SIP Trunking&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.redhat.com/en/blog/asterisk-public-switched-telephone-network&quot;&gt;RedHat Linux - Asterisk PSTN setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wiki.voip.ms/article/Asterisk_SIP&quot;&gt;VOIP.ms Asterisk Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twilio-cms-prod.s3.amazonaws.com/documents/AsteriskTwilioSIPTrunkingv2_1.pdf&quot;&gt;Twilio Asterisk SIP setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.twilio.com/docs/sip-trunking/ip-addresses&quot;&gt;Twilio IP Addresses&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.twilio.com/docs/sip-trunking/sending-sip-to-twilio-best-practices&quot;&gt;Twilio SIP Best Practices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.asterisk.org&quot;&gt;Asterisk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 27 Feb 2026 00:00:00 -0500</pubDate>
        <link>https://www.vikaskumar.org/2026/02/27/cisco-voip-setup-inbound-outbound-calling-asterisk-sip.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2026/02/27/cisco-voip-setup-inbound-outbound-calling-asterisk-sip.html</guid>
        
        
        <category>voip</category>
        
      </item>
    
      <item>
        <title>SETTING UP AN INTERNAL PHONE SYSTEM WITH OLD CISCO&amp;reg; IP PHONES AND ASTERISK</title>
        <description>&lt;p&gt;In 2020, I &lt;a href=&quot;/2020/09/01/cisco-voip-factory-reset.html&quot;&gt;wrote a post&lt;/a&gt; on updating firmware on old Cisco® IP phones, and I got carried away by other projects and this project went on the backburner.
This year I decided to complete this project, so that I could use these wired VOIP phones as an internal phone system across multiple rooms, where I could dial a number and speak to a person in a different room. I use this to interact with my family members when I want to ask them something and do not want to walk over for whatever reason.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.asterisk.org&quot;&gt;Asterisk&lt;/a&gt; is an open source &lt;a href=&quot;https://en.wikipedia.org/wiki/Business_telephone_system&quot;&gt;PBX - Private Branch Exchange&lt;/a&gt; software that I used to set this up. The process is a bit involved and is tricky to get right if you miss something in the configuration.&lt;/p&gt;

&lt;p&gt;I will describe the process in detail in this post. Note that this post does &lt;strong&gt;not&lt;/strong&gt; describe a setup for making outbound calls or receiving inbound calls on actual landline phone numbers. This is for creating a custom extension per phone, and calling those extensions, similar to what you find in hotels, where you can call one room to another by dialing that room’s number.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;TABLE OF CONTENTS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#setup-linux-server&quot;&gt;1. Setup Linux Server&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#compiling-asterisk-and-patching&quot;&gt;2. Compiling Asterisk And Patching&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#setting-up-asterisk-configuration&quot;&gt;3. Setting Up Asterisk Configuration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#starting-asterisk&quot;&gt;4. Starting Asterisk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#factory-reset-with-old-firmware&quot;&gt;5. Factory Reset With Old Firmware&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#setting-up-each-phone&quot;&gt;6. Setting Up Each Phone&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#references&quot;&gt;7. References&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;setup-linux-server&quot;&gt;SETUP LINUX SERVER&lt;/h2&gt;

&lt;p&gt;The best way to build a private setup is to use an old laptop or desktop that can run Linux to do this. You could always do it with a VM on the cloud, but I would not recommend that at this time.&lt;/p&gt;

&lt;p&gt;I used an Acer Aspire 250 from 2010 with a 64-bit Intel® Celeron processor, 1GB RAM and a cheap 180GB SSD. This laptop is &lt;em&gt;actually&lt;/em&gt; sufficient for this project.&lt;/p&gt;

&lt;p&gt;I installed &lt;a href=&quot;https://www.debian.org/download&quot;&gt;Debian 12 (Bookworm)&lt;/a&gt; on this laptop but you can also try it with Debian 13 or Debian Testing or Ubuntu. I needed this system to be lightweight and without a GUI, so I used Debian.&lt;/p&gt;

&lt;p&gt;The following packages were needed to be installed as dependencies:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;su -
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;apt &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;build-essential make git sox ffmpeg libxml2-utils tftpd-hpa &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    net-tools iptables-persistent rsyslog ghostscript apache2 nmap zip wget vim &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    openssh-server rsync mariadb-server mariadb-client bison flex flite curl mpg123 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    sqlite3 uuid odbc-mariadb &lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;subversion unixodbc ipset iptables fail2ban htop &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    tcpdump lame screen easy-rsa sysstat apt-transport-https pkgconf autotools-dev autoconf &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    dpkg-dev libsnmp-dev liblua5.2-dev libspeexdsp-dev libxml2-dev libssl-dev libsqlite3-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    unixodbc-dev uuid-dev libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    libical-dev libspandsp-dev libjansson-dev libsrtp2-dev libneon27-dev liburiparser-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    libavdevice-dev automake libtool-bin portaudio19-dev libpq-dev libresample1-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    libgmime-3.0-dev libiksemel-dev libncurses-dev libnewt-dev default-libmysqlclient-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    libicu-dev libtiff-tools libtiff-dev screen
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There maybe other libraries you may need to install while compiling Asterisk.&lt;/p&gt;

&lt;h2 id=&quot;compiling-asterisk-and-patching&quot;&gt;COMPILING ASTERISK AND PATCHING&lt;/h2&gt;

&lt;p&gt;If you followed the &lt;a href=&quot;/2020/09/01/cisco-voip-factory-reset.html&quot;&gt;previous post&lt;/a&gt;, your Cisco® IP phones have now been set to &lt;a href=&quot;https://en.wikipedia.org/wiki/Session_Initiation_Protocol&quot;&gt;SIP&lt;/a&gt; mode. To get Asterisk to work with these nearly 15-20 year old phones in SIP mode, we have to patch Asterisk with the patch that makes the phone use &lt;em&gt;call manager&lt;/em&gt;. This
patch is available from &lt;a href=&quot;https://usecallmanager.nz/patching-asterisk.html&quot;&gt;https://usecallmanager.nz/patching-asterisk.html&lt;/a&gt; or from the Git repo at &lt;a href=&quot;https://github.com/usecallmanagernz/patches/&quot;&gt;https://github.com/usecallmanagernz/patches/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I chose to use the Asterisk version 20.18.0 since it was marked as &lt;strong&gt;stable&lt;/strong&gt;, and it is what worked for me.&lt;/p&gt;

&lt;p&gt;Download &lt;a href=&quot;https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/&quot;&gt;Asterisk source v20.18.0 from their download server&lt;/a&gt;. It will be under the &lt;code class=&quot;highlighter-rouge&quot;&gt;old-releases&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Untar the package and patch the source code.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;tar&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-zxvf&lt;/span&gt; asterisk-20.18.0.tar.gz
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;asterisk-20.18.0/
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;wget https://raw.githubusercontent.com/usecallmanagernz/patches/master/asterisk/cisco-usecallmanager-20.18.0.patch
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;patch &lt;span class=&quot;nt&quot;&gt;--strip&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;1 &amp;lt; ./cisco-usecallmanager-20.18.0.patch
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now compile the source code. You can choose to run &lt;code class=&quot;highlighter-rouge&quot;&gt;make menuselect&lt;/code&gt; to select options, but I chose the default options as that was sufficient for this setup.&lt;/p&gt;

&lt;p&gt;You will then compile and install the compiled binaries, and the &lt;code class=&quot;highlighter-rouge&quot;&gt;samples&lt;/code&gt; which installs the configuration files in &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ CFLAGS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-DENABLE_SRTP_AES_GCM -DENABLE_SRTP_AES_256&quot;&lt;/span&gt; ./configure
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make &lt;span class=&quot;nb&quot;&gt;install
&lt;/span&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make samples
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;setting-up-asterisk-configuration&quot;&gt;SETTING UP ASTERISK CONFIGURATION&lt;/h2&gt;

&lt;p&gt;Now that Asterisk has been installed, we have to setup the SIP configuration files.&lt;/p&gt;

&lt;p&gt;Asterisk has deprecated their old &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_sip&lt;/code&gt; module in favor of &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_pjsip&lt;/code&gt; module. &lt;strong&gt;HOWEVER&lt;/strong&gt;, we are going to setup &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_sip&lt;/code&gt; for this task and disable &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_pjsip&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is only due to the fact that these phones are quite old, the &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_sip&lt;/code&gt; module works well, the patch applied for the &lt;em&gt;Cisco call manager&lt;/em&gt; is for &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_sip&lt;/code&gt; and it is much easier to setup.&lt;/p&gt;

&lt;p&gt;No changes need to be made in &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/asterisk.conf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/modules.conf&lt;/code&gt; add or edit the following lines, so that you enable &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_sip&lt;/code&gt; and disable &lt;code class=&quot;highlighter-rouge&quot;&gt;chan_pjsip&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;;noload=chan_sip.so
noload=chan_pjsip.so
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/logger.conf&lt;/code&gt; add or edit the following lines, so that you enable some logging.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;debug.log =&amp;gt; error,warning,notice,verbose,debug
trace.log =&amp;gt; trace
security.log =&amp;gt; security
console =&amp;gt; notice,warning,error
messages.log =&amp;gt; notice,warning,error
full.log =&amp;gt; notice,warning,error,debug,verbose,dtmf,fax
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/extensions.conf&lt;/code&gt; add the following lines. I have 3 phones, so 3 extensions were added: &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;101&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;102&lt;/code&gt;. You may choose different extension numbers or add more or as many as you need.&lt;/p&gt;

&lt;p&gt;Remember we are setting up an &lt;strong&gt;internal&lt;/strong&gt; phone system that &lt;strong&gt;cannot&lt;/strong&gt; do outbound calls or receive inbound calls from external phone numbers for this post.
The goal is to just call from one phone to another by dialing the extension code.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;call-extension&lt;/code&gt; section below is the &lt;em&gt;context&lt;/em&gt; defined for the phones and the &lt;code class=&quot;highlighter-rouge&quot;&gt;extensions&lt;/code&gt; section below is individual extensions defined with that &lt;em&gt;context&lt;/em&gt;. This was copied verbatim from &lt;a href=&quot;https://usecallmanager.nz/dialplan-extensions.html&quot;&gt;https://usecallmanager.nz/dialplan-extensions.html&lt;/a&gt; and modified as per my needs.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[call-extension]
exten =&amp;gt; _X.,1,Set(PEERNAME=${EXTEN})
; By manually checking for call-forwarding, the call can be forwarded even if the phone is unregistered
same =&amp;gt; next,Set(CALLFORWARD=${SIPPEER(${PEERNAME},callforward)})
same =&amp;gt; next,GotoIf($[${LEN(${CALLFORWARD})} != 0]?callforward,1)
same =&amp;gt; next,Set(MAILBOX=${SIPPEER(${PEERNAME},mailbox)})
; Phones can be made to play a different ring using the Alert-Info header, see Ring Tones for examples
same =&amp;gt; next,ExecIf($[${LEN(${ALERT_INFO})} != 0]?SIPAddHeader(Alert-Info: &amp;lt;${ALERT_INFO}&amp;gt;))
same =&amp;gt; next,Dial(SIP/${PEERNAME},30)
same =&amp;gt; next,Goto(${TOLOWER(${DIALSTATUS})},1)

; Check if forwarded to the phone's voicemail extension
exten =&amp;gt; callforward,1,GotoIf($[${CALLFORWARD} = ${SIPPEER(${PEERNAME},vmexten)}]?busy,1)
; Cisco SIP phones support displaying diversion information
same =&amp;gt; next,Set(REDIRECTING(from-all,i)=&quot;${SIPPEER(${PEERNAME},callerid_name)}&quot; &amp;lt;${SIPPEER(${PEERNAME},callerid_num)}&amp;gt;)
same =&amp;gt; next,Set(REDIRECTING(reason,i)=cfu)
same =&amp;gt; next,Goto(extensions,${CALLFORWARD},1)

; If ${MAILBOX} is empty send congestion, otherwise go to voicemail extension below
exten =&amp;gt; congestion,1,ExecIf($[${LEN(${MAILBOX})} = 0]?Congestion(10))
same =&amp;gt; next,Set(GREETING=u)
same =&amp;gt; next,Goto(voicemail,1)

; If ${MAILBOX} is empty send busy, otherwise go to voicemail extension below
exten =&amp;gt; busy,1,ExecIf($[${LEN(${MAILBOX})} = 0]?Busy(10))
same =&amp;gt; next,Set(GREETING=b)
same =&amp;gt; next,Goto(voicemail,1)

exten =&amp;gt; noanswer,1,Goto(congestion,1)
exten =&amp;gt; chanunavail,1,Goto(congestion,1)

exten =&amp;gt; voicemail,1,Answer()
same =&amp;gt; next,Wait(0.5)
same =&amp;gt; next,VoiceMail(${MAILBOX},${GREETING})
same =&amp;gt; next,Hangup(normal_clearing)

[extensions]
exten =&amp;gt; 100,1,Goto(call-extension,${EXTEN},1)
; Note the duplication of the hint peername
same =&amp;gt; hint,SIP/100,SIP/100
exten =&amp;gt; 101,1,Goto(call-extension,${EXTEN},1)
same =&amp;gt; hint,SIP/101,SIP/101
exten =&amp;gt; 102,1,Goto(call-extension,${EXTEN},1)
same =&amp;gt; hint,SIP/102,SIP/102
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Edit the &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/sip_notify.conf&lt;/code&gt; to have the following configuration for notifying the phones/extensions directly from the Asterisk command line interface (CLI). This will enable the Asterisk administrator to reboot or reload configurations for every phone &lt;em&gt;peer&lt;/em&gt; directly from the Asterisk CLI. This content may
already be present in the &lt;code class=&quot;highlighter-rouge&quot;&gt;sip_notify.conf&lt;/code&gt; file due to the patch that was compiled into Asterisk. I am writing this here in case you need to verify.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;; Cisco

[cisco-check-cfg]
Event=&amp;gt;check-sync

[cisco-restart]
Event=&amp;gt;service-control
Subscription-State=&amp;gt;active
Content-Type=&amp;gt;text/plain
Content=&amp;gt;action=restart
Content=&amp;gt;RegisterCallId={${SIPPEER(${PEERNAME},regcallid)}}
Content=&amp;gt;ConfigVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;DialplanVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;SoftkeyVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;FeatureControlVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;HeadsetVersionStamp={0-0000000000}

[cisco-reset]
Event=&amp;gt;service-control
Subscription-State=&amp;gt;active
Content-Type=&amp;gt;text/plain
Content=&amp;gt;action=reset
Content=&amp;gt;RegisterCallId={${SIPPEER(${PEERNAME},regcallid)}}
Content=&amp;gt;ConfigVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;DialplanVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;SoftkeyVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;FeatureControlVersionStamp={00000000-0000-0000-0000-000000000000}
Content=&amp;gt;HeadsetVersionStamp={0-0000000000}

[cisco-prt-report]
Event=&amp;gt;service-control
Subscription-State=&amp;gt;active
Content-Type=&amp;gt;text/plain
Content=&amp;gt;action=prt-report
Content=&amp;gt;RegisterCallId={${SIPPEER(${PEERNAME},regcallid)}}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Edit the &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/sip.conf&lt;/code&gt; file with the following details. &lt;strong&gt;NOTE&lt;/strong&gt;: Cisco® phones will need &lt;code class=&quot;highlighter-rouge&quot;&gt;TCP&lt;/code&gt; to be enabled for them to work.&lt;/p&gt;

&lt;p&gt;Make sure that &lt;code class=&quot;highlighter-rouge&quot;&gt;TCP&lt;/code&gt; is enabled in the &lt;code class=&quot;highlighter-rouge&quot;&gt;general&lt;/code&gt; section of the &lt;code class=&quot;highlighter-rouge&quot;&gt;sip.conf&lt;/code&gt; file.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[general]
tcp_enable=yes
tcpbindaddr=0.0.0.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In the same file &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/sip.conf&lt;/code&gt; now define the &lt;em&gt;Cisco call manager&lt;/em&gt; specific settings as below. The extensions have to match the extension numbers in &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/extensions.conf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;All names have been changed to &lt;code class=&quot;highlighter-rouge&quot;&gt;USER_&amp;lt;extension&amp;gt;&lt;/code&gt; for privacy but you can setup your own names here. For simplicity the passwords are the same as the extension number. You can change that to any alphanumeric password if you like.&lt;/p&gt;

&lt;p&gt;We are using &lt;strong&gt;non-secure mode&lt;/strong&gt; here, so everything is in clear-text, there is no encryption. That is something for a different post in the future, since encryption setup is a lot more complicated and brittle. A lot of these old phones support outdated encryption methods and I did not have time to test that yet.&lt;/p&gt;

&lt;p&gt;I have defined a custom section &lt;code class=&quot;highlighter-rouge&quot;&gt;cisco-7941&lt;/code&gt; for all my phone types. It is a very basic configuration and does not do video calls.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;secret&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;callerid&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt; can be changed per device as needed. For example, I used my first name as the &lt;code class=&quot;highlighter-rouge&quot;&gt;callerid&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt; fields instead of &lt;code class=&quot;highlighter-rouge&quot;&gt;USER 100&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[non-secure-mode](!)
transport=tcp

[extension](!)
type=friend
context=extensions
host=dynamic
trustrpid=no
parkinglot=default
allowsubscribe=yes
notifyhold=no
callcounter=yes
videosupport=no
disallow=all
allow=g722,ulaw,alaw,g729

[cisco-usecallmanager](!,extension)
transport=tcp
nat=no
directmedia=no
sendrpid=rpid
rpid_update=yes
rpid_immediate=yes
send_diversion=yes
dndbusy=yes
cisco_usecallmanager=yes
cisco_pickupnotify_alert=from,to
cisco_pickupnotify_timer=5
cisco_keep_conference=no
cisco_multiadmin_conference=yes
huntgroup_default=no

[cisco-7941](!,cisco-usecallmanager)
; These should match &amp;lt;busyTrigger&amp;gt; and &amp;lt;maxNumCalls&amp;gt; in SEPMAC.cnf.xml
busylevel=4
call-limit=5
; Force huntgroup login so that the prompt does not show the logged out message
huntgroup_default=yes
; 79x1 series only support 32-bit tags
encryption_taglen=32

[101](cisco-7941,non-secure-mode)
;; change this password
secret=101
;; change user name caller ID
callerid=&quot;USER 101&quot; &amp;lt;101&amp;gt;
;; change description
description=&quot;USER 101&quot;
callgroup=1
pickupgroup=1
mailbox=101@default

[100](cisco-7941,non-secure-mode)
;; change this password
secret=100
;; change user name caller ID
callerid=&quot;USER 100&quot; &amp;lt;100&amp;gt;
;; change description
description=&quot;USER 100&quot;
callgroup=1
pickupgroup=1
mailbox=100@default

[102](cisco-7941,non-secure-mode)
;; change this password
secret=102
;; change user name caller ID
callerid=&quot;USER 102&quot; &amp;lt;102&amp;gt;
;; change description
description=&quot;USER 102&quot;
callgroup=1
pickupgroup=1
mailbox=102@default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now that Asterisk has been configured, let’s start it.&lt;/p&gt;

&lt;h2 id=&quot;starting-asterisk&quot;&gt;STARTING ASTERISK&lt;/h2&gt;

&lt;p&gt;You will need to create an &lt;code class=&quot;highlighter-rouge&quot;&gt;asterisk&lt;/code&gt; user and group.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;addgroup &lt;span class=&quot;nt&quot;&gt;--system&lt;/span&gt; asterisk
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;adduser &lt;span class=&quot;nt&quot;&gt;--system&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--ingroup&lt;/span&gt; asterisk asterisk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If your Asterisk install, installed a &lt;code class=&quot;highlighter-rouge&quot;&gt;systemd&lt;/code&gt; file you can run&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;systemctl start asterisk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In my case, I wanted to view the startup screen, so I launched it in a &lt;code class=&quot;highlighter-rouge&quot;&gt;screen&lt;/code&gt; terminal.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;screen -
screen&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;su &lt;span class=&quot;nt&quot;&gt;-g&lt;/span&gt; asterisk &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;/usr/sbin/asterisk -mqf -C /etc/asterisk/asterisk.conf&quot;&lt;/span&gt; asterisk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will start Asterisk in the &lt;code class=&quot;highlighter-rouge&quot;&gt;screen&lt;/code&gt; and you can see the process working. You can exit this &lt;code class=&quot;highlighter-rouge&quot;&gt;screen&lt;/code&gt; session by pressing &lt;code class=&quot;highlighter-rouge&quot;&gt;Ctrl A Ctrl D&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can also check if Asterisk is listening on both TCP and UDP port &lt;code class=&quot;highlighter-rouge&quot;&gt;5060&lt;/code&gt; by running &lt;code class=&quot;highlighter-rouge&quot;&gt;netstat -vnatpul | grep 5060&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;netstat &lt;span class=&quot;nt&quot;&gt;-vnatpul&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;5060
tcp        0      0 0.0.0.0:5060            0.0.0.0:&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;               LISTEN      -
udp        0      0 0.0.0.0:5060            0.0.0.0:&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;                           - 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now let’s try the Asterisk CLI tool to connect to the Asterisk service.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;asterisk &lt;span class=&quot;nt&quot;&gt;-rvvvv&lt;/span&gt;
CLI&amp;gt; &lt;span class=&quot;nb&quot;&gt;help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;help&lt;/code&gt; command will show you all the supported commands.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;sip show peers&lt;/code&gt; command will show you the connected peers (or the extensions) as configured in &lt;code class=&quot;highlighter-rouge&quot;&gt;sip.conf&lt;/code&gt; above. The phones may not be connected yet, but if they are you will see all their details and their IP addresses.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;dialplan show extensions&lt;/code&gt; will show all the configured extensions as defined in &lt;code class=&quot;highlighter-rouge&quot;&gt;extensions.conf&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;CLI&amp;gt; sip show peers
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      
100/100                   192.168.9.100                            D  No         No             25348    Unmonitored USER 100
101/101                   192.168.9.101                            D  No         No             42813    Unmonitored USER 101                         
102/102                   192.168.9.102                            D  No         No             39144    Unmonitored USER 102                            
3 sip peers &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Monitored: 0 online, 0 offline Unmonitored: 3 online, 0 offline]

CLI&amp;gt; dialplan show extensions
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; Context &lt;span class=&quot;s1&quot;&gt;'extensions'&lt;/span&gt; created by &lt;span class=&quot;s1&quot;&gt;'pbx_config'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;s1&quot;&gt;'100'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;          hint: SIP/100,SIP/100                         &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;extensions.conf:954]
                    1. Goto&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;call-extension,&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;EXTEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;,1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;extensions.conf:952]
  &lt;span class=&quot;s1&quot;&gt;'101'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;          hint: SIP/101,SIP/101                         &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;extensions.conf:956]
                    1. Goto&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;call-extension,&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;EXTEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;,1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;extensions.conf:955]
  &lt;span class=&quot;s1&quot;&gt;'102'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;          hint: SIP/102,SIP/102                         &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;extensions.conf:958]
                    1. Goto&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;call-extension,&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;EXTEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;,1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;extensions.conf:957]

-&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 3 extensions &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;6 priorities&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;1 context. &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;-
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Let’s assume all your phones are online.&lt;/p&gt;

&lt;p&gt;To reboot a phone with extension &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt; remotely, you can run the following command:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;CLI&amp;gt; sip notify cisco-reset 100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To reload a phone’s configuration with extension &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt; remotely, you can run the following command:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;CLI&amp;gt; sip notify cisco-restart 100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now let us move on to setting up each phone.&lt;/p&gt;

&lt;h2 id=&quot;factory-reset-with-old-firmware&quot;&gt;FACTORY RESET WITH OLD FIRMWARE&lt;/h2&gt;

&lt;p&gt;Please read and follow the &lt;a href=&quot;/2020/09/01/cisco-voip-factory-reset.html&quot;&gt;previous post&lt;/a&gt; to update the firmware for the phones first. I am using Cisco® &lt;code class=&quot;highlighter-rouge&quot;&gt;7961G&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;7975G&lt;/code&gt; models, which I procured on eBay for $20 each.&lt;/p&gt;

&lt;p&gt;You will need the &lt;code class=&quot;highlighter-rouge&quot;&gt;tftpd-hpa&lt;/code&gt; setup as in the post. Your router can be configured to make the default TFTP server be &lt;code class=&quot;highlighter-rouge&quot;&gt;192.168.9.99&lt;/code&gt;, which is the IP address of the Asterisk server we will be using here.
&lt;em&gt;Your actual IP address may be different.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You will need the firmware updated and working. The phone will end up saying &lt;code class=&quot;highlighter-rouge&quot;&gt;Unconfigured&lt;/code&gt; or &lt;code class=&quot;highlighter-rouge&quot;&gt;Registering&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now remove the firmware from the &lt;code class=&quot;highlighter-rouge&quot;&gt;TFTP&lt;/code&gt; folders and only leave the files ending in &lt;code class=&quot;highlighter-rouge&quot;&gt;.loads&lt;/code&gt; in there.&lt;/p&gt;

&lt;h2 id=&quot;setting-up-each-phone&quot;&gt;SETTING UP EACH PHONE&lt;/h2&gt;

&lt;p&gt;Each phone has to be configured with a specific XML file, and some generic XML files that should all be placed in the same folder that serves the &lt;code class=&quot;highlighter-rouge&quot;&gt;TFTP&lt;/code&gt; service, which in our case is &lt;code class=&quot;highlighter-rouge&quot;&gt;/srv/tftp&lt;/code&gt; on the same Linux server that runs Asterisk.&lt;/p&gt;

&lt;h3 id=&quot;xmldefaultcnfxml&quot;&gt;XMLDefault.cnf.xml&lt;/h3&gt;

&lt;p&gt;This is a file that every phone reads for the firmware to load, and also specifies the IP address of the SIP server. You can download this file &lt;a href=&quot;/files/voip/callmanager/XMLDefault.cnf.xml&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Remember to edit the &lt;code class=&quot;highlighter-rouge&quot;&gt;processNodeName&lt;/code&gt; to point to your IP address where you run the Asterisk and TFTP servers.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;loadInformation&lt;/code&gt; should hold the &lt;code class=&quot;highlighter-rouge&quot;&gt;SIP&lt;/code&gt; firmware if you want to upload that each time the phone reboots. The firmware must be placed in the &lt;code class=&quot;highlighter-rouge&quot;&gt;TFTP&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;I am not clear on whether this firmware needs loading each time.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;Default&amp;gt;
  &amp;lt;callManagerGroup&amp;gt;
    &amp;lt;members&amp;gt;
      &amp;lt;member priority=&quot;0&quot;&amp;gt;
        &amp;lt;callManager&amp;gt;
          &amp;lt;ports&amp;gt;
            &amp;lt;ethernetPhonePort&amp;gt;2000&amp;lt;/ethernetPhonePort&amp;gt;
            &amp;lt;mgcpPorts&amp;gt;
              &amp;lt;listen&amp;gt;2427&amp;lt;/listen&amp;gt;
              &amp;lt;keepAlive&amp;gt;2428&amp;lt;/keepAlive&amp;gt;
            &amp;lt;/mgcpPorts&amp;gt;
          &amp;lt;/ports&amp;gt;
          &amp;lt;processNodeName&amp;gt;192.168.9.99&amp;lt;/processNodeName&amp;gt;
        &amp;lt;/callManager&amp;gt;
      &amp;lt;/member&amp;gt;
    &amp;lt;/members&amp;gt;
  &amp;lt;/callManagerGroup&amp;gt;
  &amp;lt;loadInformation434 model=&quot;Cisco 7961G-GE&quot;&amp;gt;SIP41.8-4-2S&amp;lt;/loadInformation434&amp;gt;
  &amp;lt;loadInformation300 model=&quot;Cisco 7961&quot;&amp;gt;SIP41.8-4-2S&amp;lt;/loadInformation300&amp;gt;
  &amp;lt;loadInformation437 model=&quot;Cisco 7975&quot;&amp;gt;SIP75.8-4-2S&amp;lt;/loadInformation437&amp;gt;
  &amp;lt;loadInformation457 model=&quot;Cisco 7975G&quot;&amp;gt;SIP75.8-4-2S&amp;lt;/loadInformation457&amp;gt;
  &amp;lt;authenticationURL&amp;gt;&amp;lt;/authenticationURL&amp;gt;
  &amp;lt;directoryURL&amp;gt;&amp;lt;/directoryURL&amp;gt;
  &amp;lt;idleURL&amp;gt;&amp;lt;/idleURL&amp;gt;
  &amp;lt;informationURL&amp;gt;&amp;lt;/informationURL&amp;gt;
  &amp;lt;messagesURL&amp;gt;&amp;lt;/messagesURL&amp;gt;
  &amp;lt;servicesURL&amp;gt;&amp;lt;/servicesURL&amp;gt;
&amp;lt;/Default&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;other-xml-files&quot;&gt;Other XML Files&lt;/h3&gt;

&lt;p&gt;The following XML files are downloaded from other Asterisk setups on Github, and the internet &lt;a href=&quot;#references&quot;&gt;referenced later&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most of these do not need change, and I used them as-is. The &lt;a href=&quot;https://usecallmanager.nz&quot;&gt;UseCallManager.nz&lt;/a&gt; site has details on each file if you want to modify them.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;dialplan.xml&lt;/code&gt;: This file defines a pattern matching for extensions. I used the default patterns since my extensions are internal. You can download this file &lt;a href=&quot;/files/voip/callmanager/dialplan.xml&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AppDialRules.xml&lt;/code&gt;: The list of transformation rules applied to numbers dialed through either the phone’s received call history or via the bluetooth address book is specified for newer model phones. I used the default patterns since my extensions are internal. You can download this file &lt;a href=&quot;/files/voip/callmanager/AppDialRules.xml&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;DialTemplate.xml&lt;/code&gt;: Dial templates control what number patterns are valid and how many seconds to wait for extra digits before dialing. I used the default patterns since my extensions are internal. You can download this file &lt;a href=&quot;/files/voip/callmanager/DialTemplate.xml&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;FeaturePolicy.xml&lt;/code&gt;: Feature policy controls what features are enabled, mostly for newer model phones. I used the default patterns since my extensions are internal. You can download this file &lt;a href=&quot;/files/voip/callmanager/FeaturePolicy.xml&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SoftKeys.xml&lt;/code&gt;: This file defines the configurable keys and tags on the phone. I used the default patterns since my extensions are internal. You can download this file &lt;a href=&quot;/files/voip/callmanager/SoftKeys.xml&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;sepmaccnfxml&quot;&gt;SEPMAC.cnf.xml&lt;/h3&gt;

&lt;p&gt;Now we come to the main configuration file for each phone. The &lt;code class=&quot;highlighter-rouge&quot;&gt;SEPMAC.cnf.xml&lt;/code&gt; file needs to be unique for each phone, where the &lt;code class=&quot;highlighter-rouge&quot;&gt;MAC&lt;/code&gt; part is the MAC address of the phone. This MAC address can be found behind the phone in a sticker or by checking the Network Settings of the phone.&lt;/p&gt;

&lt;p&gt;For instance, if your phone has a MAC address of &lt;code class=&quot;highlighter-rouge&quot;&gt;00:AA:BB:CC:DD:EE&lt;/code&gt; the file will be called &lt;code class=&quot;highlighter-rouge&quot;&gt;SEP00AABBCCDDEE.cnf.xml&lt;/code&gt;. I have provided a sample &lt;a href=&quot;/files/voip/callmanager/SEP00AABBCCDDEE.cnf.xml&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;/files/voip/callmanager/SEPMAC.cnf.xml&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I will mention the important changes I made to this file for each phone. You must verify that these changes are per your liking.&lt;/p&gt;

&lt;p&gt;First check the &lt;code class=&quot;highlighter-rouge&quot;&gt;NTP&lt;/code&gt; server information. I use &lt;code class=&quot;highlighter-rouge&quot;&gt;pool.ntp.org&lt;/code&gt; and setup my time zone to be &lt;code class=&quot;highlighter-rouge&quot;&gt;Eastern Standard/Daylight Time&lt;/code&gt; since I am in that time zone. I also selected &lt;code class=&quot;highlighter-rouge&quot;&gt;M/D/YY&lt;/code&gt; for the date display on the phone since I am in the USA. You may prefer &lt;code class=&quot;highlighter-rouge&quot;&gt;D/M/YY&lt;/code&gt; instead.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &amp;lt;dateTimeSetting&amp;gt;
      &amp;lt;dateTemplate&amp;gt;M/D/YY&amp;lt;/dateTemplate&amp;gt;
      &amp;lt;timeZone&amp;gt;Eastern Standard/Daylight Time&amp;lt;/timeZone&amp;gt;
      &amp;lt;ntps&amp;gt;
        &amp;lt;ntp&amp;gt;
          &amp;lt;name&amp;gt;pool.ntp.org&amp;lt;/name&amp;gt;
          &amp;lt;ntpMode&amp;gt;unicast&amp;lt;/ntpMode&amp;gt;
        &amp;lt;/ntp&amp;gt;
      &amp;lt;/ntps&amp;gt;
    &amp;lt;/dateTimeSetting&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next make sure your IP address for the Asterisk service is set correctly, in my case to &lt;code class=&quot;highlighter-rouge&quot;&gt;192.168.9.99&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &amp;lt;callManagerGroup&amp;gt;
      &amp;lt;members&amp;gt;
        &amp;lt;member priority=&quot;0&quot;&amp;gt;
          &amp;lt;callManager&amp;gt;
            &amp;lt;ports&amp;gt;
              &amp;lt;sipPort&amp;gt;5060&amp;lt;/sipPort&amp;gt;
              &amp;lt;securedSipPort&amp;gt;5061&amp;lt;/securedSipPort&amp;gt;
            &amp;lt;/ports&amp;gt;
            &amp;lt;processNodeName&amp;gt;192.168.9.99&amp;lt;/processNodeName&amp;gt;
          &amp;lt;/callManager&amp;gt;
        &amp;lt;/member&amp;gt;
      &amp;lt;/members&amp;gt;
    &amp;lt;/callManagerGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now go to the section titled &lt;code class=&quot;highlighter-rouge&quot;&gt;sipLines&lt;/code&gt; in the file. We have a single line defined, since the phone system will answer only on one line at this time. If you want to setup multiple lines you can refer to the &lt;a href=&quot;https://usecallmanager.nz&quot;&gt;UseCallManager.nz&lt;/a&gt; website for more details.&lt;/p&gt;

&lt;p&gt;As you can see below, I have setup the &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt; extension in this specific phone and used the same &lt;code class=&quot;highlighter-rouge&quot;&gt;authName&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;authPassword&lt;/code&gt; as defined in the &lt;code class=&quot;highlighter-rouge&quot;&gt;secret&lt;/code&gt; in &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/asterisk/sip.conf&lt;/code&gt; file in the &lt;a href=&quot;#setting-up-asterisk-configuration&quot;&gt;earlier section&lt;/a&gt;. The &lt;code class=&quot;highlighter-rouge&quot;&gt;displayName&lt;/code&gt; is the same as &lt;code class=&quot;highlighter-rouge&quot;&gt;callerid&lt;/code&gt; field in the &lt;code class=&quot;highlighter-rouge&quot;&gt;sip.conf&lt;/code&gt;
file. The &lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;featureLabel&lt;/code&gt; should be the extension name which in our case is &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;busyTrigger&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;maxNumCalls&lt;/code&gt; in this file should match &lt;code class=&quot;highlighter-rouge&quot;&gt;busylevel&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;call-limit&lt;/code&gt; in the &lt;code class=&quot;highlighter-rouge&quot;&gt;sip.conf&lt;/code&gt; file.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &amp;lt;sipLines&amp;gt;
      &amp;lt;line button=&quot;1&quot; lineIndex=&quot;1&quot;&amp;gt;
        &amp;lt;featureID&amp;gt;9&amp;lt;/featureID&amp;gt;
        &amp;lt;featureLabel&amp;gt;100&amp;lt;/featureLabel&amp;gt;
        &amp;lt;proxy&amp;gt;USECALLMANAGER&amp;lt;/proxy&amp;gt;
        &amp;lt;port&amp;gt;5060&amp;lt;/port&amp;gt;
        &amp;lt;name&amp;gt;100&amp;lt;/name&amp;gt;
        &amp;lt;displayName&amp;gt;USER 100&amp;lt;/displayName&amp;gt;
        &amp;lt;autoAnswer&amp;gt;
          &amp;lt;autoAnswerEnabled&amp;gt;0&amp;lt;/autoAnswerEnabled&amp;gt;
        &amp;lt;/autoAnswer&amp;gt;
        &amp;lt;callWaiting&amp;gt;3&amp;lt;/callWaiting&amp;gt;
        &amp;lt;authName&amp;gt;100&amp;lt;/authName&amp;gt;
        &amp;lt;authPassword&amp;gt;100&amp;lt;/authPassword&amp;gt;
        &amp;lt;contact&amp;gt;100&amp;lt;/contact&amp;gt;
        &amp;lt;sharedLine&amp;gt;false&amp;lt;/sharedLine&amp;gt;
        &amp;lt;messageWaitingLampPolicy&amp;gt;3&amp;lt;/messageWaitingLampPolicy&amp;gt;
        &amp;lt;messageWaitingAMWI&amp;gt;0&amp;lt;/messageWaitingAMWI&amp;gt;
        &amp;lt;messagesNumber&amp;gt;&amp;lt;/messagesNumber&amp;gt;
        &amp;lt;ringSettingIdle&amp;gt;4&amp;lt;/ringSettingIdle&amp;gt;
        &amp;lt;ringSettingActive&amp;gt;5&amp;lt;/ringSettingActive&amp;gt;
        &amp;lt;forwardCallInfoDisplay&amp;gt;
          &amp;lt;callerName&amp;gt;true&amp;lt;/callerName&amp;gt;
          &amp;lt;callerNumber&amp;gt;true&amp;lt;/callerNumber&amp;gt;
          &amp;lt;redirectedNumber&amp;gt;true&amp;lt;/redirectedNumber&amp;gt;
          &amp;lt;dialedNumber&amp;gt;true&amp;lt;/dialedNumber&amp;gt;
        &amp;lt;/forwardCallInfoDisplay&amp;gt;
        &amp;lt;maxNumCalls&amp;gt;5&amp;lt;/maxNumCalls&amp;gt;
        &amp;lt;busyTrigger&amp;gt;4&amp;lt;/busyTrigger&amp;gt;
        &amp;lt;recordingOption&amp;gt;enable&amp;lt;/recordingOption&amp;gt;
      &amp;lt;/line&amp;gt;
    &amp;lt;/sipLines&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also edit the &lt;code class=&quot;highlighter-rouge&quot;&gt;phoneLabel&lt;/code&gt; field to show the name of the phone extension.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &amp;lt;phoneLabel&amp;gt;USER 100&amp;lt;/phoneLabel&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;featurePolicyFile&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;dialTemplate&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;softKeyFile&lt;/code&gt; should point to &lt;code class=&quot;highlighter-rouge&quot;&gt;FeaturePolicy.xml&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;DialTemplate.xml&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;SoftKeys.xml&lt;/code&gt; which are placed in the &lt;code class=&quot;highlighter-rouge&quot;&gt;/srv/tftp&lt;/code&gt; folder. You can also serve these files via HTTP if you like.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &amp;lt;dialTemplate&amp;gt;DialTemplate.xml&amp;lt;/dialTemplate&amp;gt;
    &amp;lt;softKeyFile&amp;gt;SoftKeys.xml&amp;lt;/softKeyFile&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &amp;lt;featurePolicyFile&amp;gt;FeaturePolicy.xml&amp;lt;/featurePolicyFile&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;loadInformation&lt;/code&gt; for this phone configuration must have the correct &lt;code class=&quot;highlighter-rouge&quot;&gt;.loads&lt;/code&gt; filename which also should match the &lt;code class=&quot;highlighter-rouge&quot;&gt;loadInformation&lt;/code&gt; fields in the &lt;code class=&quot;highlighter-rouge&quot;&gt;XMLDefault.cnf.xml&lt;/code&gt; file described above. For the Cisco® 7961G, the below &lt;code class=&quot;highlighter-rouge&quot;&gt;loadInformation&lt;/code&gt; line was used.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &amp;lt;loadInformation&amp;gt;SIP41.8-4-2S&amp;lt;/loadInformation&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To get the phone directories to work, we need to add a &lt;code class=&quot;highlighter-rouge&quot;&gt;directoryURL&lt;/code&gt; field pointing to the XML file with the directory contents and also update the &lt;code class=&quot;highlighter-rouge&quot;&gt;phoneServices&lt;/code&gt; to add a &lt;code class=&quot;highlighter-rouge&quot;&gt;Contacts&lt;/code&gt; section.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &amp;lt;phoneServices useHTTPS=&quot;false&quot;&amp;gt;
    &amp;lt;provisioning&amp;gt;2&amp;lt;/provisioning&amp;gt;
    &amp;lt;phoneService type=&quot;1&quot; category=&quot;0&quot;&amp;gt;
      &amp;lt;name&amp;gt;Contacts&amp;lt;/name&amp;gt;
      &amp;lt;url&amp;gt;http://192.168.9.99/Directory.xml&amp;lt;/url&amp;gt;
      &amp;lt;vendor&amp;gt;&amp;lt;/vendor&amp;gt;
      &amp;lt;version&amp;gt;&amp;lt;/version&amp;gt;
    &amp;lt;/phoneService&amp;gt;
    &amp;lt;phoneService type=&quot;1&quot; category=&quot;0&quot;&amp;gt;
      &amp;lt;name&amp;gt;Missed Calls&amp;lt;/name&amp;gt;
      &amp;lt;url&amp;gt;Application:Cisco/MissedCalls&amp;lt;/url&amp;gt;
      &amp;lt;vendor&amp;gt;&amp;lt;/vendor&amp;gt;
      &amp;lt;version&amp;gt;&amp;lt;/version&amp;gt;
    &amp;lt;/phoneService&amp;gt;
    &amp;lt;phoneService type=&quot;1&quot; category=&quot;0&quot;&amp;gt;
      &amp;lt;name&amp;gt;Received Calls&amp;lt;/name&amp;gt;
      &amp;lt;url&amp;gt;Application:Cisco/ReceivedCalls&amp;lt;/url&amp;gt;
      &amp;lt;vendor&amp;gt;&amp;lt;/vendor&amp;gt;
      &amp;lt;version&amp;gt;&amp;lt;/version&amp;gt;
    &amp;lt;/phoneService&amp;gt;
    &amp;lt;phoneService type=&quot;1&quot; category=&quot;0&quot;&amp;gt;
      &amp;lt;name&amp;gt;Placed Calls&amp;lt;/name&amp;gt;
      &amp;lt;url&amp;gt;Application:Cisco/PlacedCalls&amp;lt;/url&amp;gt;
      &amp;lt;vendor&amp;gt;&amp;lt;/vendor&amp;gt;
      &amp;lt;version&amp;gt;&amp;lt;/version&amp;gt;
    &amp;lt;/phoneService&amp;gt;
    &amp;lt;phoneService type=&quot;2&quot; category=&quot;0&quot;&amp;gt;
      &amp;lt;name&amp;gt;Voicemail&amp;lt;/name&amp;gt;
      &amp;lt;url&amp;gt;Application:Cisco/Voicemail&amp;lt;/url&amp;gt;
      &amp;lt;vendor&amp;gt;&amp;lt;/vendor&amp;gt;
      &amp;lt;version&amp;gt;&amp;lt;/version&amp;gt;
    &amp;lt;/phoneService&amp;gt;
  &amp;lt;/phoneServices&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &amp;lt;directoryURL&amp;gt;http://192.168.9.99/Directory.xml&amp;lt;/directoryURL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As you can see we are serving this &lt;code class=&quot;highlighter-rouge&quot;&gt;Directory.xml&lt;/code&gt; file from a HTTP port on the same Linux server running Asterisk. 
We describe hosting this file in the next section.&lt;/p&gt;

&lt;p&gt;Lastly, if you want to setup &lt;code class=&quot;highlighter-rouge&quot;&gt;SSH&lt;/code&gt; into the phone, which I have not been able to test fully at the moment, you can edit the &lt;code class=&quot;highlighter-rouge&quot;&gt;sshUserId&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;sshPassword&lt;/code&gt; tags.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &amp;lt;sshUserId&amp;gt;phone100&amp;lt;/sshUserId&amp;gt;
  &amp;lt;sshPassword&amp;gt;password100&amp;lt;/sshPassword&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: The phones are so old that they do not support secure SSH encryption protocols. You may have to downgrade the encryption scheme to get it to work.&lt;/p&gt;

&lt;h3 id=&quot;directoryxml&quot;&gt;Directory.xml&lt;/h3&gt;

&lt;p&gt;We host the &lt;code class=&quot;highlighter-rouge&quot;&gt;Directory.xml&lt;/code&gt; file on an Apache2 service on the same Linux server that runs Asterisk. We installed &lt;code class=&quot;highlighter-rouge&quot;&gt;apache2&lt;/code&gt; as a dependency initially.&lt;/p&gt;

&lt;p&gt;For my extensions &lt;code class=&quot;highlighter-rouge&quot;&gt;100&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;101&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;102&lt;/code&gt;, the &lt;code class=&quot;highlighter-rouge&quot;&gt;Directory.xml&lt;/code&gt; looks like the below. You must change the &lt;code class=&quot;highlighter-rouge&quot;&gt;Name&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;Telephone&lt;/code&gt; tags to match your extensions and caller-IDs.&lt;/p&gt;

&lt;p&gt;You will need one &lt;code class=&quot;highlighter-rouge&quot;&gt;DirectoryEntry&lt;/code&gt; per extension.&lt;/p&gt;

&lt;p&gt;You can download this file &lt;a href=&quot;/files/voip/callmanager/Directory.xml&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;CiscoIPPhoneDirectory&amp;gt;
    &amp;lt;Title&amp;gt;Internal PBX&amp;lt;/Title&amp;gt;
    &amp;lt;Prompt&amp;gt;Select Contact&amp;lt;/Prompt&amp;gt;
    &amp;lt;DirectoryEntry&amp;gt;
        &amp;lt;Name&amp;gt;USER 100&amp;lt;/Name&amp;gt;
        &amp;lt;Telephone&amp;gt;100&amp;lt;/Telephone&amp;gt;
    &amp;lt;/DirectoryEntry&amp;gt;
    &amp;lt;DirectoryEntry&amp;gt;
        &amp;lt;Name&amp;gt;USER 101&amp;lt;/Name&amp;gt;
        &amp;lt;Telephone&amp;gt;101&amp;lt;/Telephone&amp;gt;
    &amp;lt;/DirectoryEntry&amp;gt;
    &amp;lt;DirectoryEntry&amp;gt;
        &amp;lt;Name&amp;gt;USER 102&amp;lt;/Name&amp;gt;
        &amp;lt;Telephone&amp;gt;102&amp;lt;/Telephone&amp;gt;
    &amp;lt;/DirectoryEntry&amp;gt;
&amp;lt;/CiscoIPPhoneDirectory&amp;gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When setting up Apache2, you need to make sure it returns this file with a header of &lt;code class=&quot;highlighter-rouge&quot;&gt;Content-Type: text/xml&lt;/code&gt;, otherwise the phone will not be able to parse it.&lt;/p&gt;

&lt;p&gt;Below is a sample Apache2 configuration that will work. Many examples on the internet dynamically generate this XML file but I have a static file.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;VirtualHost *:80&amp;gt;
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        &amp;lt;Files &quot;Directory.xml&quot;&amp;gt;
            ForceType text/xml
        &amp;lt;/Files&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can also use &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; instead of Apache2 if you prefer that. &lt;strong&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;Content-Type&lt;/code&gt; header must be &lt;code class=&quot;highlighter-rouge&quot;&gt;text/xml&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;ringlistxml&quot;&gt;ringlist.xml&lt;/h3&gt;

&lt;p&gt;If you want to add multiple ringtons to the phone, you will need to setup a &lt;code class=&quot;highlighter-rouge&quot;&gt;ringlist.xml&lt;/code&gt; file with the ringtone files along with it in the &lt;code class=&quot;highlighter-rouge&quot;&gt;/srv/tftp&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;I got a lot of my ringtones from &lt;a href=&quot;https://github.com/staskobzar/cisco_prov.git&quot;&gt;this Github repo&lt;/a&gt; and I setup my &lt;code class=&quot;highlighter-rouge&quot;&gt;ringlist.xml&lt;/code&gt; file which can be &lt;a href=&quot;/files/voip/callmanager/ringlist.xml&quot;&gt;downloaded here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It will have contents that look like below, where the &lt;code class=&quot;highlighter-rouge&quot;&gt;FileName&lt;/code&gt; is the path relative to the TFTP server directory.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;CiscoIPPhoneRingList&amp;gt;
    &amp;lt;Ring&amp;gt;
        &amp;lt;DisplayName&amp;gt;Are you there Male?&amp;lt;/DisplayName&amp;gt;
        &amp;lt;FileName&amp;gt;AreYouThere.raw&amp;lt;/FileName&amp;gt;
    &amp;lt;/Ring&amp;gt;
    &amp;lt;Ring&amp;gt;
        &amp;lt;DisplayName&amp;gt;Are you there Female?&amp;lt;/DisplayName&amp;gt;
        &amp;lt;FileName&amp;gt;AreYouThereF.raw&amp;lt;/FileName&amp;gt;
    &amp;lt;/Ring&amp;gt;
    &amp;lt;Ring&amp;gt;
        &amp;lt;DisplayName&amp;gt;Analog 1&amp;lt;/DisplayName&amp;gt;
        &amp;lt;FileName&amp;gt;Analog1.raw&amp;lt;/FileName&amp;gt;
    &amp;lt;/Ring&amp;gt;
    &amp;lt;Ring&amp;gt;
        &amp;lt;DisplayName&amp;gt;Analog 2&amp;lt;/DisplayName&amp;gt;
        &amp;lt;FileName&amp;gt;Analog2.raw&amp;lt;/FileName&amp;gt;
    &amp;lt;/Ring&amp;gt;
    &amp;lt;Ring&amp;gt;
        &amp;lt;DisplayName&amp;gt;Bass&amp;lt;/DisplayName&amp;gt;
        &amp;lt;FileName&amp;gt;Bass.raw&amp;lt;/FileName&amp;gt;
    &amp;lt;/Ring&amp;gt;
    &amp;lt;Ring&amp;gt;
        &amp;lt;DisplayName&amp;gt;CallBack&amp;lt;/DisplayName&amp;gt;
        &amp;lt;FileName&amp;gt;CallBack.raw&amp;lt;/FileName&amp;gt;
    &amp;lt;/Ring&amp;gt;
    &amp;lt;Ring&amp;gt;
        &amp;lt;DisplayName&amp;gt;Chime&amp;lt;/DisplayName&amp;gt;
        &amp;lt;FileName&amp;gt;Chime.raw&amp;lt;/FileName&amp;gt;
    &amp;lt;/Ring&amp;gt;
&amp;lt;/CiscoIPPhoneRingList&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;background-images&quot;&gt;Background Images&lt;/h3&gt;

&lt;p&gt;You can change the background image by creating a &lt;code class=&quot;highlighter-rouge&quot;&gt;Desktop&lt;/code&gt; folder with a structure for each phone you want to support.&lt;/p&gt;

&lt;p&gt;Details are described in &lt;a href=&quot;https://usecallmanager.nz/background-images.html&quot;&gt;UseCallManager.nz’s description for this feature&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I have placed a sample collection for my &lt;code class=&quot;highlighter-rouge&quot;&gt;7961G&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;7975G&lt;/code&gt; phones &lt;a href=&quot;/files/voip/callmanager/Desktops.tar.gz&quot;&gt;here&lt;/a&gt;. You can run &lt;code class=&quot;highlighter-rouge&quot;&gt;tar -zxvf&lt;/code&gt; on the &lt;code class=&quot;highlighter-rouge&quot;&gt;Desktops.tar.gz&lt;/code&gt; file and place it in &lt;code class=&quot;highlighter-rouge&quot;&gt;/srv/tftp&lt;/code&gt; as is.&lt;/p&gt;

&lt;p&gt;As you can see in the below image, I got a Linux penguin icon showing up as my desktop screen. You can see that instead of &lt;code class=&quot;highlighter-rouge&quot;&gt;USER 100&lt;/code&gt; I have used my first name &lt;code class=&quot;highlighter-rouge&quot;&gt;VIKAS&lt;/code&gt; in the configurations everywhere, which is visible on the top right corner of the screen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/voip/callmanager/user_100.jpeg&quot; alt=&quot;Linux Penguin Desktop on Cisco 7961G&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;REFERENCES&lt;/h2&gt;

&lt;p&gt;I was helped by many references from the internet and I am listing all of them here, so they can be of reference to you too.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.asterisk.org&quot;&gt;Asterisk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/&quot;&gt;Asterisk old releases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freepbx.org&quot;&gt;FreePBX&lt;/a&gt; - I ended up not using the FreePBX software since they wanted me to pay money to get Cisco® phones to work. The whole point of this project is for this to be &lt;strong&gt;free&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://usecallmanager.nz/&quot;&gt;UseCallManager.nz&lt;/a&gt; - There is a ton of information on this site and I have only scratched the surface. Without the hard work that has gone into making this site and the patch, this endeavour would be futile.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/usecallmanagernz&quot;&gt;Github - usecallmanager&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/staskobzar/cisco_prov.git&quot;&gt;Github - cisco_prov by staskobzar&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dkgroot/provision_sccp.git&quot;&gt;Github - provision_sccp by dkgroot&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chan-sccp/chan-sccp&quot;&gt;Github - chan_sccp by chan-sccp&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/waynemerricks/Cisco7942FreePBX&quot;&gt;Github - Cisco7942FreePBX by waynemerricks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/NamoDev/Cisco-IP-Phone-Provisioning-Files&quot;&gt;Github - Cisco-IP-Phone-Provisioning-Files by NamoDev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/PintoBernardo/Cisco-IP-Phones&quot;&gt;Github - Cisco-IP-Phones by PintoBernardo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MrCirca/cisco_voip_phones_xml_generator&quot;&gt;Github - cisco_voip_phones_xml_generator by MrCirca&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jefffall/Asterisk&quot;&gt;Github - old Asterisk configs by jefffall&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/files/voip/manuals/8.5_1__Cisco_Unified_IP_Phone_Services_Application_Development_Notes.pdf&quot;&gt;Cisco Application development notes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.asterisk-pro.com/&quot;&gt;Asterisk Pro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 24 Feb 2026 00:00:00 -0500</pubDate>
        <link>https://www.vikaskumar.org/2026/02/24/cisco-voip-internal-phone-system-setup-asterisk-sip.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2026/02/24/cisco-voip-internal-phone-system-setup-asterisk-sip.html</guid>
        
        
        <category>voip</category>
        
      </item>
    
      <item>
        <title>WATCHING STREAMING VIA ROKU ON A SUPERSONIC FC9600 CRT TV</title>
        <description>&lt;p&gt;On a recent visit to a local hamfest in Parsippany, NJ I ended up purchasing a used portable 5.5” CRT TV with AM/FM radio and a cassette player for $5. I have recently been interested in procuring one of these just to have it, and this was a great opportunity to get one for cheap, in cash. However, I did not know if it
worked or not. There was no power cable, and the seller did not have the 10 “C”-size batteries needed for a demo. Yet, I purchased it thinking that if something does not work I will learn to repair it.&lt;/p&gt;

&lt;p&gt;This TV did not have any markings besides the word &lt;strong&gt;SUPERSONIC&lt;/strong&gt; on it, so I started doing some research on the web on how to identify and find details on the TV.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h3 id=&quot;power-ratings&quot;&gt;POWER RATINGS&lt;/h3&gt;

&lt;p&gt;First step was to figure out what the electrical requirements for the power supply were. As per &lt;em&gt;Figure 1&lt;/em&gt;, there was no labeling so I spent many minutes doing image searches on Google and Duckduckgo to find the best matches.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/2025-11-29_underside_of_tv.jpeg&quot; alt=&quot;Figure 1. Underside of the Supersonic FC9600 portable&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 1: Underside of the TV with the missing label&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;And I did, on eBay. Someone had once posted a listing selling the same but unboxed version for $25.&lt;/p&gt;

&lt;p&gt;I grabbed all the images from the listing and am reposting them here just in case they disappear from the web.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figures 2a to 2j&lt;/em&gt; are the images from the listing. As you can see that &lt;em&gt;Figure 2i&lt;/em&gt; shows the details of the power supply needed: DC 13.5V 1000mA, or 10 1.5V UM-2 “C” Size batteries. But it also worked with a car charger (&lt;em&gt;Figure 2d&lt;/em&gt;), which was originally supplied with the TV. Car batteries supply 12V DC, which means that a 12V 1A DC charger would suffice. &lt;em&gt;Figure 2b&lt;/em&gt; shows that the DC operation could be anywhere between 12-15V, which works for us.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-01.jpg&quot; alt=&quot;Figure 2a. Supersonic FC9600 box - front view&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2a. Supersonic FC9600 box - front view&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-02.jpg&quot; alt=&quot;Figure 2b. Supersonic FC9600 box - side view&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2b. Supersonic FC9600 - side view&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-03.jpg&quot; alt=&quot;Figure 2c. Supersonic FC9600 - power adapter covered in plastic&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2c. Supersonic FC9600 - power adapter covered in plastic&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-04.jpg&quot; alt=&quot;Figure 2d. Supersonic FC9600 - car charger covered in plastic&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2d. Supersonic FC9600 - car charger covered in plastic&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-05.jpg&quot; alt=&quot;Figure 2e. Supersonic FC9600 - unboxed TV covered in plastic - front view&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2e. Supersonic FC9600 - unboxed TV covered in plastic - front view&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-06.jpg&quot; alt=&quot;Figure 2f. Supersonic FC9600 - unboxed TV covered in plastic - side view of the power switch&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2f. Supersonic FC9600 - unboxed TV covered in plastic - side view of the power switch&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-07.jpg&quot; alt=&quot;Figure 2g. Supersonic FC9600 - unboxed TV covered in plastic - rear view of the antenna&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2g. Supersonic FC9600 - unboxed TV covered in plastic - rear view of the antenna&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-08.jpg&quot; alt=&quot;Figure 2h. Supersonic FC9600 - unboxed TV covered in plastic - side view of the volume control&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2h. Supersonic FC9600 - unboxed TV covered in plastic - side view of the volume control&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-09.jpg&quot; alt=&quot;Figure 2i. Supersonic FC9600 - unboxed TV covered in plastic - bottom view of the factory sticker&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2i. Supersonic FC9600 - unboxed TV covered in plastic - bottom view of the factory sticker&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/fc9600-10.jpg&quot; alt=&quot;Figure 2j. Supersonic FC9600 - image of the user manual&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2j. Supersonic FC9600 - image of the user manual&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Ok, now I needed to procure a power supply.&lt;/p&gt;

&lt;h3 id=&quot;streaming-requirements&quot;&gt;STREAMING REQUIREMENTS&lt;/h3&gt;

&lt;p&gt;Analog over-the-air (OTA) transmission has stopped in the USA, so the only way to use the existing antenna was for AM/FM radio which worked fine. For TV reception through other means, such as a digital antenna, there was a 3.5mm jack labeled &lt;code class=&quot;highlighter-rouge&quot;&gt;EXT ANT&lt;/code&gt; which stands for external antenna. I needed a 3.5mm jack to a coaxial convertor or an HDMI convertor or an RCA convertor.&lt;/p&gt;

&lt;p&gt;I had a working old Roku LT 2700X from my parents, which currently is over 10 years old now, but still works. It has a 3-pin RCA connector with video and audio outputs.&lt;/p&gt;

&lt;p&gt;So technically, I could connect the Roku LT 2700X to the TV with a RCA convertor that would convert to the 3.5mm antenna jack. However, the 3-pin RCA to single-pin 3.5mm cable that I had did not work or transmit correctly. Seemed like I need an RF modulator in the middle.&lt;/p&gt;

&lt;p&gt;I needed to procure an RCA-to-coaxial RF modulator, a pre-crimped small coaxial cable, a coaxial cable to 3.5mm jack converter and I would be in business. Start shopping at Amazon!&lt;/p&gt;

&lt;h3 id=&quot;parts-needed&quot;&gt;PARTS NEEDED&lt;/h3&gt;

&lt;p&gt;Please note these are affiliate links and they are solid products in my experience.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/4amIdxG&quot;&gt;Universal 12V 2A 1A Power Supply AC Adapter with 11 Changeable DC Plug Tips AC to DC12V Power Cord for LED Strip Light CCTV Camera BT Speaker GPS Webcam Router DC12V Wall Plug Charger 6FT&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/4onoPEp&quot;&gt;Duracell C Batteries&lt;/a&gt; - optional if you want to power the TV with batteries&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/48Hjzqm&quot;&gt;Fancasee 2 Pack F Type Female to 1/8” 3.5mm Male Mono Plug Jack Adapter Coupler Converter Connector for Coax Coaxial Cable Cord Antenna and More&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/4irnf2O&quot;&gt;THE CIMPLE CO - RF Modulator, RCA Composite to RF Coaxial Adapter, Converts Standard Definition Signals to Coax, Watch DVD, VHS, Game Consoles on TV, Includes A/V Cable, Does Not Work in Reverse&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3Xs70sF&quot;&gt;Coaxial cable 1ft&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;a used Roku LT 2700X with remote from eBay, Facebook or someone who has it&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;streaming-setup&quot;&gt;STREAMING SETUP&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Power your TV up with the &lt;a href=&quot;https://amzn.to/4amIdxG&quot;&gt;power supply&lt;/a&gt; and test all its switches and the volume. Set it to &lt;strong&gt;channel 3&lt;/strong&gt; by setting the &lt;code class=&quot;highlighter-rouge&quot;&gt;Band&lt;/code&gt; switch to  the &lt;code class=&quot;highlighter-rouge&quot;&gt;VHF-L&lt;/code&gt; setting as shown in &lt;em&gt;Figure 3&lt;/em&gt;. And do not forget to the set the &lt;code class=&quot;highlighter-rouge&quot;&gt;Function&lt;/code&gt; switch to &lt;code class=&quot;highlighter-rouge&quot;&gt;TV&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/2025-11-29_channel_3_vhf_low.jpeg&quot; alt=&quot;Figure 3. Channel 3 or VHF-L setting&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3. “Channel 3” or VHF-L setting&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Now let’s connect the coaxial cable end of the &lt;a href=&quot;https://amzn.to/48Hjzqm&quot;&gt;3.5mm Mono Plug Jack Adapter&lt;/a&gt; to the &lt;a href=&quot;https://amzn.to/3Xs70sF&quot;&gt;coaxial cable&lt;/a&gt; first. Then plug in the 3.5mm end into the port labeled &lt;code class=&quot;highlighter-rouge&quot;&gt;EXT ANT&lt;/code&gt; on the rear TV panel. See &lt;em&gt;Figure 4&lt;/em&gt; for both the power cable and the coaxial cable with the 3.5mm connector in place.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/2025-11-29_external_antenna_connector.jpeg&quot; alt=&quot;Figure 4. Connect the coaxial cable via the 3.5mm Mono Plug Jack Adapter to the TV&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 4. Connect the coaxial cable via the 3.5mm Mono Plug Jack Adapter to the TV&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Connect the open end of the coaxial cable to the &lt;code class=&quot;highlighter-rouge&quot;&gt;IN&lt;/code&gt; input of the &lt;a href=&quot;https://amzn.to/4irnf2O&quot;&gt;Cimple RCA to Coax&lt;/a&gt; RF Modulator, as seen in &lt;em&gt;Figure 5&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/2025-11-29_cimple_rca_to_coax.jpeg&quot; alt=&quot;Figure 5. RCA-to-Coaxial RF Modulator by The Cimple Co&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5. RCA-to-Coaxial RF Modulator by The Cimple Co&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Connect one end of the 3-pin RCA cable to the RF modulator as in &lt;em&gt;Figure 5&lt;/em&gt; and the other end to the Roku LT 2700x as seen in &lt;em&gt;Figure 6&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/2025-11-29_roku_lt2700_rca_connected.jpeg&quot; alt=&quot;Figure 6. RCA cable connected to the Roku LT 2700x&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6. RCA cable connected to the Roku LT 2700x&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;: Power on the TV, RF modulator and the Roku in that order, preferably. If everything has been connected correctly, you will see the Roku boot screen as in &lt;em&gt;Figure 7&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/2025-11-29_roku_boot_screen.jpeg&quot; alt=&quot;Figure 7. Roku boot screen visible on the Supersonic FC9600 CRT TV&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 7. Roku boot screen visible on the Supersonic FC9600 CRT TV&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: Using the Roku remote (not pictured), you can configure the Roku and connect it to WiFi. The Roku LT 2700x does not have an ethernet RJ-45 port to connect it to ethernet, so WiFi is the only option. It will need a 2.4GHz access point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;: Once your Roku is configured, you can use the Roku remote to navigate their menu and watch &lt;em&gt;Live&lt;/em&gt; channels on the Roku UI. Since the Roku is quite old and unsupported, many new apps may not work, but some apps like &lt;em&gt;The Roku Channel&lt;/em&gt; continue to work. &lt;em&gt;Figure 8&lt;/em&gt; shows some live news channel I was able to stream on the Supersonic FC9600 using a Roku LT 2700X with an RF modulator.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/supersonic/fc9600/2025-11-29_view_streaming_news_mamdani.jpeg&quot; alt=&quot;Figure 8. NYC Mayor-elect Zohran Mamdani on the news giving a speech as seen on TV&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 8. NYC Mayor-elect Zohran Mamdani on the news giving a speech as seen on TV&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;The TV works, the radio works but the cassette player does not work. Next thing to fix in the future.&lt;/p&gt;

</description>
        <pubDate>Sat, 29 Nov 2025 00:00:00 -0500</pubDate>
        <link>https://www.vikaskumar.org/2025/11/29/supersonic-fc9600-crt-tv-modernize.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2025/11/29/supersonic-fc9600-crt-tv-modernize.html</guid>
        
        
        <category>antennas</category>
        
        <category>radio</category>
        
      </item>
    
      <item>
        <title>BUILD A MULTI-GPU CLUSTER FOR HASHCAT WITH LINUX AND NVIDIA</title>
        <description>&lt;p&gt;Building a multi-GPU &lt;a href=&quot;https://www.hashcat.net&quot;&gt;Hashcat&lt;/a&gt; password cracking cluster can be very economical if you choose a combination of budget GPUs with a reasonable hash rate.&lt;/p&gt;

&lt;p&gt;Nowadays, due to the AI craze and before that due to the cryptocurrency craze, there has been a serious price inflation and price gouging by GPU vendors, such as NVIDIA, for graphics cards that can perform a lot of password cracking at scale.&lt;/p&gt;

&lt;p&gt;In this post, I show you how to build a multi-GPU cluster and achieve a better price/performance ratio with several budget GPUs as compared to buying one expensive one.&lt;/p&gt;

&lt;p&gt;The goal for my use case is to optimize on both &lt;em&gt;price&lt;/em&gt; and &lt;em&gt;risk&lt;/em&gt;. There is a risk that if you run a lot of password hash cracking on a GPU, that it may wear out earlier. When you use budget GPUs, you may wear them out but they are cheaper to replace, and hence, cost effective.&lt;/p&gt;

&lt;p&gt;Except for the GPUs, and their PCI-E risers, everything else I bought pre-owned on online marketplaces, since you don’t need some parts to be new.&lt;/p&gt;

&lt;p&gt;I used 5 GPUs for this cluster, and a 6th one can be added to it. This is a self-contained cluster and you do not need a monitor as I use an HDMI screen as part of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: This cluster can be used for machine learning and other CUDA programming too!&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2 id=&quot;requirements&quot;&gt;REQUIREMENTS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;5-6 GPUs NVIDIA GeForce 1650 GTX - &lt;a href=&quot;https://amzn.to/3Od232D&quot;&gt;Amazon Link&lt;/a&gt;, &lt;a href=&quot;https://www.bestbuy.com/site/pny-nvidia-geforce-gtx-1650-4gb-gddr6-pci-express-3-0-graphics-card-with-dual-fan-black/6502683.p?skuId=6502683&quot;&gt;Best Buy Link&lt;/a&gt;. I purchased these on sale each for $139.99 during Labor Day and Thanksgiving sales in the USA. So my total cost was less than $900 including taxes, which is cheaper than a new &lt;a href=&quot;https://amzn.to/3O8qmi8&quot;&gt;RTX 4090 GPU&lt;/a&gt; which can be over $1600. Although the RTX 4090 can provide &lt;a href=&quot;https://gist.github.com/Chick3nman/32e662a5bb63bc4f51b847bb422222fd&quot;&gt;insane performance&lt;/a&gt;, if you can afford it.&lt;/li&gt;
  &lt;li&gt;Refurbished HP Z840 with 128GB RAM and 1 TB SSD hard drives from &lt;a href=&quot;https://www.ebay.com/sch/i.html?_from=R40&amp;amp;_nkw=HP+z840+128GB&quot;&gt;eBay&lt;/a&gt; for about $460. You can use any other barebones PC, but it does help to have at least 32 GB RAM and 6+ GPU slots. Cryptocurrency miners use motherboards that have 12 GPU slots but you do not get enough RAM or powerful CPUs in those, so the multipurpose nature of your cluster to run machine learning and/or password cracking may not be possible.&lt;/li&gt;
  &lt;li&gt;Kali Linux or Ubuntu 22.04 LTS&lt;/li&gt;
  &lt;li&gt;NVIDIA drivers. I am running &lt;code class=&quot;highlighter-rouge&quot;&gt;NVIDIA-Linux-x86_64-535.146.02.run&lt;/code&gt; from NVIDIA for Linux.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3SoVdZp&quot;&gt;6 GPU Risers&lt;/a&gt;. These are needed to allow the variety of PCI-E slots to be used with the PCI-E x16 GPUs.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3SoT3ZN&quot;&gt;Crypto mining rig hardware&lt;/a&gt; or a pre-owned rig from Facebook Marketplace. I bought mine for $30 along with all the fans, which I did not use.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/4b1H4JW&quot;&gt;EVGA 1500W Power Supply&lt;/a&gt; or a pre-owned one that works. I bought mine pre-owned for $40.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3Hmuyai&quot;&gt;Extruded Aluminum&lt;/a&gt; if you want to DIY the whole structure from scratch.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/48Cv401&quot;&gt;Aluminum rail accessories&lt;/a&gt;. You will need this for attaching some of the rig parts together, if your rig is like mine.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/4aVU5Vv&quot;&gt;Brass Standoff screws&lt;/a&gt; for attaching the GPUs to the rails.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/48DoCWx&quot;&gt;Tap and Die Set&lt;/a&gt; for threading the small holes required for your standoff screws&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/4b5CV7Z&quot;&gt;Drill&lt;/a&gt; and &lt;a href=&quot;https://amzn.to/3U8hIEa&quot;&gt;drill bits&lt;/a&gt;. I already had these and do not count this towards the budget. You can procure the drill on Facebook Marketplace for cheap, and buy new drill bits.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/48FRygq&quot;&gt;HDMI 7” screen&lt;/a&gt; for using as a touch screen monitor.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/48WAYZB&quot;&gt;Metric Allen wrench set&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Phillips Screwdriver, Pliers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in all, with the mix of new and pre-owned equipment, I spent about $1550. If you were to buy everything new, you may end up paying about $500 more, which could be instead leveraged to buy more GPUs. Or you can buy an RTX 4090 and not need anything above!&lt;/p&gt;

&lt;h2 id=&quot;setup&quot;&gt;SETUP&lt;/h2&gt;

&lt;p&gt;In &lt;em&gt;Figure 1&lt;/em&gt;, you see a typical cryptocurrency miner rig. It has 7 large fans, a big 1500W+ power supply, a space to mount the motherboard (shown highlighted by the yellow rectangle) and a wide beam to screw the GPUs onto. You can see my pre-owned frame has some screws still there near the bottom edge of the yellow rectangle on the beam.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/001_typical_miner_rig.jpeg&quot; alt=&quot;Figure 1. A typical cryptocurrency miner rig&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 1. A typical cryptocurrency miner rig&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;But before you do anything to the frame, you want to test your hardware out so that you can  make sure that you have all the right parts, your risers work and your GPUs work. &lt;em&gt;Figure 2&lt;/em&gt; shows me testing my hardware out. Testing is described &lt;a href=&quot;#linux-and-drivers&quot;&gt;in the section here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/002_multi_gpu_setup_ugly.jpeg&quot; alt=&quot;Figure 2. Testing out all the hardware first&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2. Testing out all the hardware first&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;I disassemble the whole rig into its parts and find the best matching aluminum legs and corresponding screws to create a flat structure like in &lt;em&gt;Figure 3&lt;/em&gt;. If you are not using a pre-designed frame, you can use the &lt;a href=&quot;https://amzn.to/3Hmuyai&quot;&gt;Extruded Aluminum&lt;/a&gt; to DIY the whole structure. You will need to drill holes and use the &lt;a href=&quot;https://amzn.to/48DoCWx&quot;&gt;tap-and-die set&lt;/a&gt; to thread the holes for screws, both standoff screws and any other screws that allow you to put the legs together. You can also use the &lt;a href=&quot;https://amzn.to/48Cv401&quot;&gt;aluminum rail accessories&lt;/a&gt; to attach legs to each other.&lt;/p&gt;

&lt;p&gt;I also drilled small 1/8” holes for the M3 screws to hold the GPU risers as shown in &lt;em&gt;Figure 3&lt;/em&gt;. You can see my brass standoff screws there waiting to hold GPU risers. &lt;strong&gt;NOTE&lt;/strong&gt;: Make sure your measurements are perfect. I used a painters tape on the aluminum legs, marked and then drilled to make sure I did not get positioning wrong.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/003_create_new_base.jpeg&quot; alt=&quot;Figure 3. Create a new base for the GPU risers&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3. Create a new base for the GPU risers&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;I then installed all the risers, and screwed them in. Then I installed a GPU in each riser. In my frame, as seen in &lt;em&gt;Figure 4&lt;/em&gt;, I am using only 4 GPUs. I could have added a fifth GPU riser space but then if I were to upgrade the GPUs to bigger ones, there would be no space for airflow. However, you could design yours better than what I did.&lt;/p&gt;

&lt;p&gt;Now follow the documentation of the EVGA power supply and the GPU risers, or Youtube videos, and connect the power cables correctly to the GPU cards, the GPU risers and to the rest of the system.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/004_top_view_gpus.jpeg&quot; alt=&quot;Figure 4. Top view after the GPUs have been installed&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 4. Top view after the GPUs have been installed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Now connect the riser end to the PCI-E slot of the HP Z840 server as shown in &lt;em&gt;Figure 5&lt;/em&gt;. Here I installed my fifth GPU in one of the PCI-E x16 slots so that the computer could display something. In general, GPU risers do not work well with displays. The risers I chose were not being recognized by the BIOS/UEFI for display purposes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/005_inside_view_risers.jpeg&quot; alt=&quot;Figure 5. Inside view of the server where the PCI-E connections are made&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5. Inside view of the server where the PCI-E connections are made&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Everything is connected now. I then built a small front-facing tower so that I could attach the 7” HDMI screen to the front of the GPU rack as shown in &lt;em&gt;Figure 6&lt;/em&gt;. The HDMI cable from this screen connects to the GPU that is &lt;strong&gt;inside&lt;/strong&gt; the computer. The screen also has a touchscreen-and-power USB-C cable, which I connected to a USB-3 port on the computer.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/006_front_view_screen.jpeg&quot; alt=&quot;Figure 6. HDMI screen installed&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6. HDMI screen installed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;linux-and-drivers&quot;&gt;LINUX AND DRIVERS&lt;/h2&gt;

&lt;p&gt;I used Kali Linux on the HP Z840 as it works out of the box, but you can also use Ubuntu 22.04 LTS, if your purpose is something else besides password cracking. Installing Kali Linux follows standard procedure as described &lt;a href=&quot;https://www.kali.org/docs/usb/live-usb-install-with-linux/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you have installed Kali Linux, download the appropriate NVIDIA Drivers from &lt;a href=&quot;https://www.nvidia.com/Download/index.aspx?lang=en-us&quot;&gt;https://www.nvidia.com/Download/index.aspx?lang=en-us&lt;/a&gt;. Select the correct combination in the form and download the driver file on to the computer. You will need a modern browser like Firefox or Google Chrome to do this. I recommend doing this directly on the computer you are setting up.&lt;/p&gt;

&lt;p&gt;The form fields for the GTX 1650 are shown in &lt;em&gt;Figure 7&lt;/em&gt;. Once you hit the &lt;code class=&quot;highlighter-rouge&quot;&gt;Search&lt;/code&gt; button on the form you will get a file that is most recent from NVIDIA. As of this document, I got the file &lt;code class=&quot;highlighter-rouge&quot;&gt;NVIDIA-Linux-x86_64-535.146.02.run&lt;/code&gt;, which means that the NVIDIA driver version is &lt;code class=&quot;highlighter-rouge&quot;&gt;535.146.02&lt;/code&gt;. I then run this file as &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt;
as below, and follow the prompts to install everything. Then I install CUDA SDK from &lt;a href=&quot;https://developer.nvidia.com/cuda-downloads?target_os=Linux&amp;amp;target_arch=x86_64&amp;amp;Distribution=Debian&amp;amp;target_version=12&amp;amp;target_type=runfile_local&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;./NVIDIA-Linux-x86_64-535.146.02.run
&lt;span class=&quot;c&quot;&gt;## once completed, install CUDA&lt;/span&gt;
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda_12.3.2_545.23.08_linux.runsudo sh cuda_12.3.2_545.23.08_linux.run
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sh cuda_12.3.2_545.23.08_linux.run
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/007_nvidia_driver_settings.png&quot; alt=&quot;Figure 7. NVIDIA Driver form fields for GTX 1650&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 7. NVIDIA Driver form fields for GTX 1650&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Once everything is installed, reboot the system and make sure it boots up so that you can view the HDMI screen showing the Kali Linux desktop as seen in &lt;em&gt;Figure 8&lt;/em&gt;. You can also play some Youtube videos or videos using the VLC media player to see if everything is working as seen in &lt;em&gt;Figure 9&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/007_kali_linux_on_setup.jpeg&quot; alt=&quot;Figure 8. Kali Linux setup completed&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 8. Kali Linux setup completed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wisecracker/setup/008_video_rendering.jpeg&quot; alt=&quot;Figure . Video rendering test from Youtube&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 9. Video rendering test from Youtube&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h3 id=&quot;devicequery&quot;&gt;DEVICEQUERY&lt;/h3&gt;

&lt;p&gt;Next we run &lt;code class=&quot;highlighter-rouge&quot;&gt;deviceQuery&lt;/code&gt; from the CUDA SDK to make sure that the GPUs are detected and we see the output showing 5 GPUs detected.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;/usr/local/cuda/extras/demo_suite/deviceQuery
./deviceQuery Starting...

 CUDA Device Query &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Runtime API&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; version &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;CUDART static linking&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;

Detected 5 CUDA Capable device&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;

Device 0: &lt;span class=&quot;s2&quot;&gt;&quot;NVIDIA GeForce GTX 1650&quot;&lt;/span&gt;
  CUDA Driver Version / Runtime Version          12.2 / 12.2
  CUDA Capability Major/Minor version number:    7.5
  Total amount of global memory:                 3904 MBytes &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;4093509632 bytes&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;14&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; Multiprocessors, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; CUDA Cores/MP:     896 CUDA Cores
  GPU Max Clock rate:                            1590 MHz &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1.59 GHz&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Memory Clock rate:                             6001 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;         &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072, 65536&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;3D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;16384, 16384, 16384&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum Layered 1D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Maximum Layered 2D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768, 32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  Maximum number of threads per block:           1024
  Max dimension size of a thread block &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1024, 1024, 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Max dimension size of a grid size    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2147483647, 65535, 65535&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 3 copy engine&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Run &lt;span class=&quot;nb&quot;&gt;time &lt;/span&gt;limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;UVA&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:      Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 2 / 0
  Compute Mode:
     &amp;lt; Default &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;multiple host threads can use ::cudaSetDevice&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; with device simultaneously&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;

Device 1: &lt;span class=&quot;s2&quot;&gt;&quot;NVIDIA GeForce GTX 1650&quot;&lt;/span&gt;
  CUDA Driver Version / Runtime Version          12.2 / 12.2
  CUDA Capability Major/Minor version number:    7.5
  Total amount of global memory:                 3902 MBytes &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;4091150336 bytes&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;14&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; Multiprocessors, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; CUDA Cores/MP:     896 CUDA Cores
  GPU Max Clock rate:                            1590 MHz &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1.59 GHz&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Memory Clock rate:                             6001 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;         &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072, 65536&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;3D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;16384, 16384, 16384&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum Layered 1D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Maximum Layered 2D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768, 32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  Maximum number of threads per block:           1024
  Max dimension size of a thread block &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1024, 1024, 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Max dimension size of a grid size    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2147483647, 65535, 65535&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 3 copy engine&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Run &lt;span class=&quot;nb&quot;&gt;time &lt;/span&gt;limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;UVA&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:      Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 3 / 0
  Compute Mode:
     &amp;lt; Default &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;multiple host threads can use ::cudaSetDevice&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; with device simultaneously&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;

Device 2: &lt;span class=&quot;s2&quot;&gt;&quot;NVIDIA GeForce GTX 1650&quot;&lt;/span&gt;
  CUDA Driver Version / Runtime Version          12.2 / 12.2
  CUDA Capability Major/Minor version number:    7.5
  Total amount of global memory:                 3904 MBytes &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;4093509632 bytes&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;14&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; Multiprocessors, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; CUDA Cores/MP:     896 CUDA Cores
  GPU Max Clock rate:                            1590 MHz &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1.59 GHz&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Memory Clock rate:                             6001 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;         &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072, 65536&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;3D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;16384, 16384, 16384&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum Layered 1D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Maximum Layered 2D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768, 32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  Maximum number of threads per block:           1024
  Max dimension size of a thread block &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1024, 1024, 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Max dimension size of a grid size    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2147483647, 65535, 65535&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 3 copy engine&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Run &lt;span class=&quot;nb&quot;&gt;time &lt;/span&gt;limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;UVA&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:      Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 4 / 0
  Compute Mode:
     &amp;lt; Default &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;multiple host threads can use ::cudaSetDevice&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; with device simultaneously&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;

Device 3: &lt;span class=&quot;s2&quot;&gt;&quot;NVIDIA GeForce GTX 1650&quot;&lt;/span&gt;
  CUDA Driver Version / Runtime Version          12.2 / 12.2
  CUDA Capability Major/Minor version number:    7.5
  Total amount of global memory:                 3904 MBytes &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;4093509632 bytes&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;14&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; Multiprocessors, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; CUDA Cores/MP:     896 CUDA Cores
  GPU Max Clock rate:                            1590 MHz &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1.59 GHz&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Memory Clock rate:                             6001 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;         &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072, 65536&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;3D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;16384, 16384, 16384&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum Layered 1D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Maximum Layered 2D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768, 32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  Maximum number of threads per block:           1024
  Max dimension size of a thread block &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1024, 1024, 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Max dimension size of a grid size    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2147483647, 65535, 65535&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 3 copy engine&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Run &lt;span class=&quot;nb&quot;&gt;time &lt;/span&gt;limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;UVA&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:      Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 132 / 0
  Compute Mode:
     &amp;lt; Default &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;multiple host threads can use ::cudaSetDevice&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; with device simultaneously&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;

Device 4: &lt;span class=&quot;s2&quot;&gt;&quot;NVIDIA GeForce GTX 1650&quot;&lt;/span&gt;
  CUDA Driver Version / Runtime Version          12.2 / 12.2
  CUDA Capability Major/Minor version number:    7.5
  Total amount of global memory:                 3904 MBytes &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;4093509632 bytes&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;14&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; Multiprocessors, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; CUDA Cores/MP:     896 CUDA Cores
  GPU Max Clock rate:                            1590 MHz &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1.59 GHz&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Memory Clock rate:                             6001 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;         &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;131072, 65536&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;nv&quot;&gt;3D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;16384, 16384, 16384&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum Layered 1D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;1D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Maximum Layered 2D Texture Size, &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;num&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; layers  &lt;span class=&quot;nv&quot;&gt;2D&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;32768, 32768&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  Maximum number of threads per block:           1024
  Max dimension size of a thread block &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1024, 1024, 64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Max dimension size of a grid size    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x,y,z&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2147483647, 65535, 65535&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 3 copy engine&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  Run &lt;span class=&quot;nb&quot;&gt;time &lt;/span&gt;limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;UVA&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:      Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 133 / 0
  Compute Mode:

deviceQuery, CUDA Driver &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; CUDART, CUDA Driver Version &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 12.2, CUDA Runtime Version &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 12.2, NumDevs &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 5, Device0 &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; NVIDIA GeForce GTX 1650, Device1 &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; NVIDIA GeForce GTX 1650, Device2 &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; NVIDIA GeForce GTX 1650, Device3 &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; NVIDIA GeForce GTX 1650, Device4 &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; NVIDIA GeForce GTX 1650
Result &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; PASS
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;nvtop&quot;&gt;NVTOP&lt;/h3&gt;

&lt;p&gt;I also installed &lt;a href=&quot;https://github.com/Syllo/nvtop&quot;&gt;NVTOP&lt;/a&gt; which is available on Kali Linux as the package &lt;code class=&quot;highlighter-rouge&quot;&gt;nvtop&lt;/code&gt; or you can install the latest from &lt;a href=&quot;https://github.com/Syllo/nvtop&quot;&gt;Github&lt;/a&gt;. Running this shows the usage of the GPUs when you run the &lt;code class=&quot;highlighter-rouge&quot;&gt;hashcat&lt;/code&gt; benchmark below.&lt;/p&gt;

&lt;h3 id=&quot;hashcat&quot;&gt;HASHCAT&lt;/h3&gt;

&lt;p&gt;Install the package &lt;code class=&quot;highlighter-rouge&quot;&gt;hashcat&lt;/code&gt; and run the benchmark as below, and you can view my system’s performance in the attached logs.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;hashcat &lt;span class=&quot;nt&quot;&gt;-b&lt;/span&gt;
hashcat &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;v6.2.6&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; starting &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;benchmark mode

Benchmarking uses hand-optimized kernel code by default.
You can use it &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;your cracking session by setting the &lt;span class=&quot;nt&quot;&gt;-O&lt;/span&gt; option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;benchmark mode, use the &lt;span class=&quot;nt&quot;&gt;-w&lt;/span&gt; option.

&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#1: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#2: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#3: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#4: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#5: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#6: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#7: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#8: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#9: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#10: WARNING! Kernel exec timeout is not disabled.&lt;/span&gt;
             This may cause &lt;span class=&quot;s2&quot;&gt;&quot;CL_OUT_OF_RESOURCES&quot;&lt;/span&gt; or related errors.
             To disable the &lt;span class=&quot;nb&quot;&gt;timeout&lt;/span&gt;, see: https://hashcat.net/q/timeoutpatch
CUDA API &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;CUDA 12.2&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;====================&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#1: NVIDIA GeForce GTX 1650, 3845/3903 MB, 14MCU&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#2: NVIDIA GeForce GTX 1650, 3813/3901 MB, 14MCU&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#3: NVIDIA GeForce GTX 1650, 3845/3903 MB, 14MCU&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#4: NVIDIA GeForce GTX 1650, 3845/3903 MB, 14MCU&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#5: NVIDIA GeForce GTX 1650, 3845/3903 MB, 14MCU&lt;/span&gt;

OpenCL API &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;OpenCL 3.0 CUDA 12.2.135&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; - Platform &lt;span class=&quot;c&quot;&gt;#1 [NVIDIA Corporation]&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;========================================================================&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#6: NVIDIA GeForce GTX 1650, skipped&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#7: NVIDIA GeForce GTX 1650, skipped&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#8: NVIDIA GeForce GTX 1650, skipped&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#9: NVIDIA GeForce GTX 1650, skipped&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#10: NVIDIA GeForce GTX 1650, skipped&lt;/span&gt;

OpenCL API &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;OpenCL 3.0 PoCL 4.0+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.7, SLEEF, DISTRO, POCL_DEBUG&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; - Platform &lt;span class=&quot;c&quot;&gt;#2 [The pocl project]&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;==================================================================================================================================================&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Device &lt;span class=&quot;c&quot;&gt;#11: cpu-haswell-Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz, skipped&lt;/span&gt;

Benchmark relevant options:
&lt;span class=&quot;o&quot;&gt;===========================&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--optimized-kernel-enable&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;-------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 0 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;MD5&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;-------------------&lt;/span&gt;

Speed.#1.........: 11808.7 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;78.33ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:1024 Loops:1024 Thr:64 Vec:8
Speed.#2.........: 11813.5 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;78.31ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:1024 Loops:1024 Thr:64 Vec:8
Speed.#3.........: 11552.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;80.09ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:1024 Loops:1024 Thr:64 Vec:8
Speed.#4.........: 11421.3 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;80.83ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:1024 Loops:1024 Thr:64 Vec:8
Speed.#5.........: 11804.3 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;78.38ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:1024 Loops:1024 Thr:64 Vec:8
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........: 58399.9 MH/s

&lt;span class=&quot;nt&quot;&gt;----------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 100 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;SHA1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;----------------------&lt;/span&gt;

Speed.#1.........:  3749.9 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;62.10ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:32 Vec:1
Speed.#2.........:  3751.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;62.12ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:32 Vec:1
Speed.#3.........:  3681.0 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;63.25ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:32 Vec:1
Speed.#4.........:  3633.8 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;63.93ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:32 Vec:1
Speed.#5.........:  3739.0 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;62.21ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:32 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........: 18554.8 MH/s

&lt;span class=&quot;nt&quot;&gt;---------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 1400 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;SHA2-256&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;---------------------------&lt;/span&gt;

Speed.#1.........:  1614.7 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.23ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:512 Vec:1
Speed.#2.........:  1610.3 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.33ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:512 Vec:1
Speed.#3.........:  1583.4 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;73.66ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:512 Vec:1
Speed.#4.........:  1570.4 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;74.30ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:512 Vec:1
Speed.#5.........:  1611.5 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.38ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:512 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  7990.3 MH/s

&lt;span class=&quot;nt&quot;&gt;---------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 1700 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;SHA2-512&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;---------------------------&lt;/span&gt;

Speed.#1.........:   538.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;54.10ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#2.........:   537.2 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;54.13ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#3.........:   527.9 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;55.21ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#4.........:   523.7 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;55.62ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#5.........:   537.5 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;54.21ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  2664.3 MH/s

&lt;span class=&quot;nt&quot;&gt;-------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 22000 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;WPA-PBKDF2-PMKID+EAPOL&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 4095]
&lt;span class=&quot;nt&quot;&gt;-------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:   189.2 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;74.58ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#2.........:   189.0 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;74.63ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#3.........:   185.9 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;75.92ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#4.........:   177.1 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;77.81ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#5.........:   188.4 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;74.92ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:   929.6 kH/s

&lt;span class=&quot;nt&quot;&gt;-----------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 1000 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;NTLM&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;-----------------------&lt;/span&gt;

Speed.#1.........: 20800.7 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;87.84ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:256 Vec:8
Speed.#2.........: 20805.9 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;87.82ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:256 Vec:8
Speed.#3.........: 20382.5 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;89.59ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:256 Vec:8
Speed.#4.........: 20180.9 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;90.34ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:256 Vec:8
Speed.#5.........: 20803.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;87.82ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:256 Vec:8
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:   103.0 GH/s

&lt;span class=&quot;nt&quot;&gt;---------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 3000 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;LM&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;---------------------&lt;/span&gt;

Speed.#1.........: 10825.9 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;85.43ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:128 Vec:1
Speed.#2.........: 10823.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;85.46ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:128 Vec:1
Speed.#3.........: 10616.0 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;86.96ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:128 Vec:1
Speed.#4.........: 10510.2 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;87.80ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:128 Vec:1
Speed.#5.........: 10826.2 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;85.42ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:1024 Thr:128 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........: 53601.4 MH/s

&lt;span class=&quot;nt&quot;&gt;--------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 5500 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;NetNTLMv1 / NetNTLMv1+ESS&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;--------------------------------------------&lt;/span&gt;

Speed.#1.........: 11111.5 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;82.20ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:512 Thr:256 Vec:2
Speed.#2.........: 11116.5 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;82.14ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:512 Thr:256 Vec:2
Speed.#3.........: 10913.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;83.61ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:512 Thr:256 Vec:2
Speed.#4.........: 10768.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;84.59ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:512 Thr:256 Vec:2
Speed.#5.........: 11112.8 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;82.20ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:512 Loops:512 Thr:256 Vec:2
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........: 55022.1 MH/s

&lt;span class=&quot;nt&quot;&gt;----------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 5600 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;NetNTLMv2&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;----------------------------&lt;/span&gt;

Speed.#1.........:   828.3 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;70.45ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#2.........:   828.0 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;70.49ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#3.........:   813.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;71.75ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#4.........:   804.0 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.44ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#5.........:   825.2 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;70.69ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  4098.5 MH/s

&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 1500 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;descrypt, DES &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Unix&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, Traditional DES&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------&lt;/span&gt;

Speed.#1.........:   440.7 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;66.17ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:128 Vec:1
Speed.#2.........:   440.4 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;66.23ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:128 Vec:1
Speed.#3.........:   432.9 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.35ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:128 Vec:1
Speed.#4.........:   428.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.97ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:128 Vec:1
Speed.#5.........:   439.6 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;66.35ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:1024 Thr:128 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  2181.7 MH/s

&lt;span class=&quot;nt&quot;&gt;------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 500 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;md5crypt, MD5 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Unix&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, Cisco-IOS &lt;span class=&quot;nv&quot;&gt;$1$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;MD5&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 1000]
&lt;span class=&quot;nt&quot;&gt;------------------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:  4093.2 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;87.68ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:1000 Thr:1024 Vec:1
Speed.#2.........:  3910.5 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;87.44ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:1000 Thr:1024 Vec:1
Speed.#3.........:  4043.0 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;88.95ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:1000 Thr:1024 Vec:1
Speed.#4.........:  3997.3 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;90.13ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:1000 Thr:1024 Vec:1
Speed.#5.........:  4089.5 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;87.87ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:1000 Thr:1024 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........: 20133.4 kH/s

&lt;span class=&quot;nt&quot;&gt;----------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 3200 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;bcrypt &lt;span class=&quot;nv&quot;&gt;$2&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$,&lt;/span&gt; Blowfish &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Unix&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 32]
&lt;span class=&quot;nt&quot;&gt;----------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:    12829 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.59ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4 Loops:32 Thr:16 Vec:1
Speed.#2.........:    12891 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.11ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4 Loops:32 Thr:16 Vec:1
Speed.#3.........:    11677 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;69.25ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4 Loops:32 Thr:16 Vec:1
Speed.#4.........:    12521 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;69.24ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4 Loops:32 Thr:16 Vec:1
Speed.#5.........:    12810 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.59ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4 Loops:32 Thr:16 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:    62728 H/s

&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 1800 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;sha512crypt &lt;span class=&quot;nv&quot;&gt;$6$,&lt;/span&gt; SHA512 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Unix&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 5000]
&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:    85690 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;75.06ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4096 Loops:128 Thr:64 Vec:1
Speed.#2.........:    85606 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;75.29ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4096 Loops:128 Thr:64 Vec:1
Speed.#3.........:    84640 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;76.16ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4096 Loops:128 Thr:64 Vec:1
Speed.#4.........:    83321 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;77.38ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4096 Loops:128 Thr:64 Vec:1
Speed.#5.........:    85921 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;75.00ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:4096 Loops:128 Thr:64 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:   425.2 kH/s

&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 7500 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Kerberos 5, etype 23, AS-REQ Pre-Auth&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------&lt;/span&gt;

Speed.#1.........:   208.8 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;69.80ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#2.........:   209.7 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;69.49ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#3.........:   204.2 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;71.37ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#4.........:   204.0 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;71.49ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#5.........:   209.4 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;69.60ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  1036.2 MH/s

&lt;span class=&quot;nt&quot;&gt;-------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 13100 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Kerberos 5, etype 23, TGS-REP&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;-------------------------------------------------&lt;/span&gt;

Speed.#1.........:   202.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.17ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#2.........:   202.4 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.08ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#3.........:   197.1 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;73.99ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#4.........:   197.2 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;73.94ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#5.........:   201.8 MH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.25ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:256 Loops:128 Thr:32 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  1000.6 MH/s

&lt;span class=&quot;nt&quot;&gt;---------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 15300 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;DPAPI masterkey file v1 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;context 1 and 2&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 23999]
&lt;span class=&quot;nt&quot;&gt;---------------------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:    31835 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;74.54ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#2.........:    31408 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;75.23ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#3.........:    31288 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;75.85ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#4.........:    30821 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;77.01ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#5.........:    31726 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;74.81ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:512 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:   157.1 kH/s

&lt;span class=&quot;nt&quot;&gt;---------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 15900 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;DPAPI masterkey file v2 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;context 1 and 2&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 12899]
&lt;span class=&quot;nt&quot;&gt;---------------------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:    17781 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;61.59ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:64 Loops:512 Thr:32 Vec:1
Speed.#2.........:    17709 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;61.85ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:64 Loops:512 Thr:32 Vec:1
Speed.#3.........:    17372 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;62.83ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:64 Loops:512 Thr:32 Vec:1
Speed.#4.........:    17105 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;63.62ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:64 Loops:512 Thr:32 Vec:1
Speed.#5.........:    17745 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;61.74ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:64 Loops:512 Thr:32 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:    87712 H/s

&lt;span class=&quot;nt&quot;&gt;------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 7100 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;macOS v10.8+ &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;PBKDF2-SHA512&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 1023]
&lt;span class=&quot;nt&quot;&gt;------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:   221.8 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;42.15ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:511 Thr:256 Vec:1
Speed.#2.........:   222.2 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;41.96ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:511 Thr:256 Vec:1
Speed.#3.........:   219.4 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;42.59ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:511 Thr:256 Vec:1
Speed.#4.........:   216.0 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;43.27ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:511 Thr:256 Vec:1
Speed.#5.........:   204.1 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;42.29ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:511 Thr:256 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  1083.5 kH/s

&lt;span class=&quot;nt&quot;&gt;---------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 11600 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;7-Zip&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 16384]
&lt;span class=&quot;nt&quot;&gt;---------------------------------------------&lt;/span&gt;

Speed.#1.........:   191.8 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;70.55ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:4096 Thr:128 Vec:1
Speed.#2.........:   194.5 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;70.53ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:4096 Thr:128 Vec:1
Speed.#3.........:   190.2 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;71.31ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:4096 Thr:128 Vec:1
Speed.#4.........:   184.1 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;72.41ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:4096 Thr:128 Vec:1
Speed.#5.........:   191.8 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;70.52ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:32 Loops:4096 Thr:128 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:   952.4 kH/s

&lt;span class=&quot;nt&quot;&gt;------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 12500 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;RAR3-hp&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 262144]
&lt;span class=&quot;nt&quot;&gt;------------------------------------------------&lt;/span&gt;

Speed.#1.........:    26507 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.10ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:16384 Thr:256 Vec:1
Speed.#2.........:    26506 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.10ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:16384 Thr:256 Vec:1
Speed.#3.........:    26034 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.97ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:16384 Thr:256 Vec:1
Speed.#4.........:    25599 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;68.89ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:16384 Thr:256 Vec:1
Speed.#5.........:    26429 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;67.35ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:16384 Thr:256 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:   131.1 kH/s

&lt;span class=&quot;nt&quot;&gt;--------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 13000 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;RAR5&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 32799]
&lt;span class=&quot;nt&quot;&gt;--------------------------------------------&lt;/span&gt;

Speed.#1.........:    19486 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;45.24ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:128 Loops:64 Thr:256 Vec:1
Speed.#2.........:    19522 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;45.22ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:128 Loops:64 Thr:256 Vec:1
Speed.#3.........:    19314 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;45.68ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:128 Loops:64 Thr:256 Vec:1
Speed.#4.........:    19022 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;46.29ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:128 Loops:64 Thr:256 Vec:1
Speed.#5.........:    19463 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;45.36ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:128 Loops:64 Thr:256 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:    96805 H/s

&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 6211 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;TrueCrypt RIPEMD160 + XTS 512 bit &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;legacy&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 1999]
&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:   141.0 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;46.38ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:128 Thr:512 Vec:1
Speed.#2.........:   137.7 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;46.81ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:128 Thr:512 Vec:1
Speed.#3.........:   138.7 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;47.16ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:128 Thr:512 Vec:1
Speed.#4.........:   138.0 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;47.43ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:128 Thr:512 Vec:1
Speed.#5.........:   140.6 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;46.47ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:128 Thr:512 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:   695.9 kH/s

&lt;span class=&quot;nt&quot;&gt;-----------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 13400 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;KeePass 1 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;AES/Twofish&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; and KeePass 2 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;AES&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 24569]
&lt;span class=&quot;nt&quot;&gt;-----------------------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:    12017 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;49.40ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:2 Loops:1024 Thr:512 Vec:1
Speed.#2.........:    12113 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;49.00ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:2 Loops:1024 Thr:512 Vec:1
Speed.#3.........:    11750 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;50.25ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:2 Loops:1024 Thr:512 Vec:1
Speed.#4.........:    11827 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;50.20ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:2 Loops:1024 Thr:512 Vec:1
Speed.#5.........:    12016 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;49.41ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:2 Loops:1024 Thr:512 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:    59723 H/s

&lt;span class=&quot;nt&quot;&gt;----------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 6800 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;LastPass + LastPass sniffed&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 499]
&lt;span class=&quot;nt&quot;&gt;----------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:  1214.1 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;42.63ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:499 Thr:256 Vec:1
Speed.#2.........:  1202.6 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;42.94ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:499 Thr:256 Vec:1
Speed.#3.........:  1195.4 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;43.31ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:499 Thr:256 Vec:1
Speed.#4.........:  1014.7 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;43.91ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:499 Thr:256 Vec:1
Speed.#5.........:  1207.9 kH/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;42.88ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:16 Loops:499 Thr:256 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:  5834.8 kH/s

&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Hash-Mode 11300 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Bitcoin/Litecoin wallet.dat&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Iterations: 200459]
&lt;span class=&quot;nt&quot;&gt;--------------------------------------------------------------------&lt;/span&gt;

Speed.#1.........:     2417 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;60.33ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#2.........:     2404 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;60.66ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#3.........:     2377 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;61.33ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#4.........:     2340 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;62.18ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#5.........:     2410 H/s &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;60.52ms&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; @ Accel:8 Loops:1024 Thr:256 Vec:1
Speed.#&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.........:    11947 H/s

Started: Sun Jan 14 19:46:24 2024
Stopped: Sun Jan 14 19:51:23 2024
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As you can see that the &lt;code class=&quot;highlighter-rouge&quot;&gt;hashcat&lt;/code&gt; benchmark for MD5 is pretty good for a budget GPU cluster. We get about 58000 MH/s for this cluster and for a similar but more modern GPU you get about &lt;a href=&quot;https://hashcat.net/forum/thread-11394.html&quot;&gt;57000 MH/s&lt;/a&gt; - &lt;a href=&quot;https://hashcat.net/forum/thread-11362.html&quot;&gt;67000 MH/s&lt;/a&gt; but for several hundreds of dollars more in expenses. Anyway, the way I see it for my use case, the budget way using multi-GPUs is the way to go.&lt;/p&gt;

&lt;p&gt;An &lt;a href=&quot;https://gist.github.com/Chick3nman/bb22b28ec4ddec0cb5f59df97c994db4&quot;&gt;RTX 3080&lt;/a&gt; benchmarks around 54000 MH/s for MD5.
An &lt;a href=&quot;https://gist.github.com/Chick3nman/e4fcee00cb6d82874dace72106d73fef&quot;&gt;RTX 3090&lt;/a&gt; benchmarks around 65000 MH/s for MD5.
An &lt;a href=&quot;https://gist.github.com/Chick3nman/32e662a5bb63bc4f51b847bb422222fd&quot;&gt;RTX 4090&lt;/a&gt; benchmarks around 164.1 GH/s for MD5, which is just &lt;strong&gt;phenomenal&lt;/strong&gt; and can be probably worth buying if you can afford it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: I have not run any benchmarks on the more expensive GPUs myself, they are all referencing benchmarks run by others on the internet, who may have different server hardware or different OSes or NVIDIA driver versions.&lt;/p&gt;
</description>
        <pubDate>Sun, 14 Jan 2024 00:00:00 -0500</pubDate>
        <link>https://www.vikaskumar.org/2024/01/14/hashcat-gpu-cluster-linux-setup.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2024/01/14/hashcat-gpu-cluster-linux-setup.html</guid>
        
        
        <category>tools</category>
        
        <category>amd64</category>
        
        <category>games</category>
        
      </item>
    
      <item>
        <title>UPGRADE SSD AND INSTALL LINUX ON INTEL MACBOOK AIR (mid-2011)</title>
        <description>&lt;p&gt;I purchased a MacBook Air in 2011, and it is the model A1370 with a 11-inch screen, Intel 64-bit i5 CPU 1.6GHz, 64GB NVMe solid state drive (SSD) and 2GB RAM.&lt;/p&gt;

&lt;p&gt;Apple has stopped supporting older Intel-based laptops with newer versions of Mac OSX for a few years now. However, soon browsers like Firefox will also stop supporting such old systems. You have two choices, either dispose of the device or install Linux on it.&lt;/p&gt;

&lt;p&gt;Since my device is working really well so far and is still a really thin laptop, it can continue to be a great travel companion. But it is old, so one of the options is to install Linux on it.&lt;/p&gt;

&lt;p&gt;The EFI support has come a long way that you can completely replace the old OSX with a Linux that supports EFI install out of the box. I chose &lt;a href=&quot;https://www.kali.org/&quot;&gt;Kali Linux&lt;/a&gt; but you may choose &lt;a href=&quot;https://www.ubuntu.com&quot;&gt;Ubuntu&lt;/a&gt; and the process is the same.&lt;/p&gt;

&lt;p&gt;But 64GB seems small and fills up quickly with today’s Linux operating systems, so I decided to upgrade the NVMe SSD to 250GB. This post describes how to perform the upgrade of the SSD and install Linux on the MacBook Air. This upgrade process will work on any Intel-based MacBook Airs that are from the 2010-2012 era, as far as I know.&lt;/p&gt;

&lt;p&gt;This can also be a way to create a burner laptop for traveling to various hacker conferences like DEFCON, although nothing beats a Live CD Linux in that scenario, sometimes you just want something that does not require a USB drive sticking out of the laptop.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2 id=&quot;requirements&quot;&gt;REQUIREMENTS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;2010-2012 MacBook Air in bootable condition. You can buy several of these on eBay for less than $100 nowadays.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3OgnosF&quot;&gt;Pentalobe screwdriver set and trim tool for Apple devices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/44iF5Nu&quot;&gt;256GB New SSD for 2010-2011 MacBook Air&lt;/a&gt;. You can buy an appropriate model SSD for your version of MacBook Air if it is 2012 or 2013 model.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3pO61Wp&quot;&gt;4GB or larger USB Stick&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3PJbMPS&quot;&gt;Compressed Air Can&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/47ywoAN&quot;&gt;Alfa AWUS036ACS USB WiFi card&lt;/a&gt;. This is optional, but recommended since Broadcom drivers on Linux are bad.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3KLIo8d&quot;&gt;TPLink USB-to-ethernet dongle&lt;/a&gt;. This is optional if you want to use ethernet, and do not have ethernet (RJ45) ports.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;checking-your-macbook-air&quot;&gt;CHECKING YOUR MACBOOK AIR&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Make sure you backup your data.&lt;/li&gt;
  &lt;li&gt;If you have setup a &lt;em&gt;firmware lock&lt;/em&gt; or &lt;em&gt;firmware password&lt;/em&gt; on the MacBook Air, you need to either know that password or reset it or change it as described &lt;a href=&quot;https://support.apple.com/en-us/HT204455&quot;&gt;in one of the sections here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;replacing-the-ssd&quot;&gt;REPLACING THE SSD&lt;/h2&gt;

&lt;p&gt;Our first task is to replace the 64GB SSD with a 256GB SSD (&lt;em&gt;Figure 1&lt;/em&gt;) so that we have more space available.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/001_ssd.jpeg&quot; alt=&quot;Figure 1. 256GB NVMe SSD for MacBook Air 2010-2011&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 1. 256GB NVMe SSD for MacBook Air 2010-2011&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Shutdown the MacBook Air, disconnect power from the laptop, and turn it upside down. Using the correct &lt;a href=&quot;https://amzn.to/3OgnosF&quot;&gt;pentalobe screwdriver bit&lt;/a&gt; from the kit locate the 10 screws that need to be opened, circled in red in &lt;em&gt;Figure 2a&lt;/em&gt;. Carefully open each screw and keep it safely.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/002_upsidedown_locate_screws.jpeg&quot; alt=&quot;Figure 2a. Locate the 10 screws under the laptop&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2a. Locate the 10 screws under the laptop&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;There will be 2 long screws (circled in red) and 8 small ones as seen in &lt;em&gt;Figure 2b&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/003_remove_screws.jpeg&quot; alt=&quot;Figure 2b. Screws have been removed&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2b. Screws have been removed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Now pull the cover off the base of the laptop exposing the motherboard, the solid state drive (SSD) and battery pack as seen in &lt;em&gt;Figure 3a&lt;/em&gt;. Circled in &lt;em&gt;Figure 3a&lt;/em&gt; and with a closeup in &lt;em&gt;Figure 3b&lt;/em&gt;, we can see the connector for the battery pack, which will be disconnected in the next step.
&lt;em&gt;Figure 3c&lt;/em&gt; shows the connector for the SSD from which we will be disconnecting the SSD in a later step.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/004_locate_battery_ssd.jpeg&quot; alt=&quot;Figure 3a. Locate the battery pack connector and SSD&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3a. Locate the battery pack connector and SSD&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/004_closeup_battery.jpeg&quot; alt=&quot;Figure 3b. Battery pack connector closeup&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3b. Battery pack connector closeup&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/004_closeup_ssd_connector.jpeg&quot; alt=&quot;Figure 3c. SSD connector&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3c. SSD connector&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Using a trim tool from the &lt;a href=&quot;https://amzn.to/3OgnosF&quot;&gt;pentalobe screwdriver set&lt;/a&gt;, lift the battery connector delicately up from both the sides marked &lt;code class=&quot;highlighter-rouge&quot;&gt;+&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;-&lt;/code&gt; and it will pop up. Make sure the whole connector is popped up. It should not be touching the motherboard. &lt;strong&gt;Be gentle&lt;/strong&gt;. &lt;em&gt;Figures 4a and 4b&lt;/em&gt; show the trim tool being used to lift the battery connector and also a closeup of the connector lifted up.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/005_disconnect_battery_2.jpeg&quot; alt=&quot;Figure 4a. Battery disconnected using trim tool&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 4a. Battery disconnected using trim tool&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/005_disconnect_battery.jpeg&quot; alt=&quot;Figure 4b. Closeup of the battery disconnected&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 4b. Closeup of the battery disconnected&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Now we need to locate the screw in &lt;em&gt;Figure 3a&lt;/em&gt;, and using the T5 torx screw bit from the &lt;a href=&quot;https://amzn.to/3OgnosF&quot;&gt;pentalobe screwdriver kit&lt;/a&gt;, take out that screw. You should see it look like &lt;em&gt;Figure 5a&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/006_remove_ssd_screw.jpeg&quot; alt=&quot;Figure 5a. Remove screw holding SSD in place&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5a. Remove screw holding SSD in place&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;This screw holds the SSD in place and once it has been removed, delicately lift up the SSD and pull it out slowly from the connector. You should see it come out like in &lt;em&gt;Figure 5b&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/007_unplug_ssd.jpeg&quot; alt=&quot;Figure 5b. SSD unplugged&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5b. SSD unplugged&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Using &lt;a href=&quot;https://amzn.to/3PJbMPS&quot;&gt;compressed air&lt;/a&gt; you can clean up all the dust from the connectors and the rest of the motherboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;: Now it is time to install the new SSD (&lt;em&gt;Figure 6a&lt;/em&gt;). Insert the pins of the SSD in the right direction and push it in till it fits (&lt;em&gt;Figure 6b&lt;/em&gt;) and is tight. Then tighten the screw that you had removed in the previous step.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/008_new_ssd.jpeg&quot; alt=&quot;Figure 6a. View of the new SSD&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6a. View of the new SSD&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/008_new_ssd_installed.jpeg&quot; alt=&quot;Figure 6b. New SSD installed along with the screw&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6b. New SSD installed along with the screw&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: Now push the battery connector back in place as seen in &lt;em&gt;Figure 7&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/009_connect_battery.jpeg&quot; alt=&quot;Figure 7. Battery connected and new SSD visible&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 7. Battery connected and new SSD visible&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;: Now place the cover back on, and screw in the 10 screws that you took out in Step 2. Make sure the 2 long screws go in the right spot near the edge of the screen.&lt;/p&gt;

&lt;p&gt;This completes the SSD replacement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Do not throw the old SSD away. Keep it as you may want to copy the contents back to this drive if you just wanted to expand the disk space and not install Linux, or if you wanted to dual boot Linux with Mac OSX. Describing backing up and restoring the SSD is out of scope for this post, and you can find various blog posts on the internet for this.&lt;/p&gt;

&lt;h2 id=&quot;installing-linux&quot;&gt;INSTALLING LINUX&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;: Download the 64-bit Linux version that you want to install that supports booting from EFI, such as Kali Linux or Ubuntu Linux. I chose to install Kali Linux and &lt;a href=&quot;https://www.kali.org/docs/installation/hard-disk-install-on-mac/&quot;&gt;they have a good documentation on how to do this&lt;/a&gt; which I followed.&lt;/p&gt;

&lt;p&gt;You can install the &lt;code class=&quot;highlighter-rouge&quot;&gt;netinst&lt;/code&gt; (or network install) ISO and burn it to a USB stick as described &lt;a href=&quot;https://www.kali.org/docs/usb/live-usb-install-with-windows/&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;https://www.kali.org/docs/usb/live-usb-install-with-linux/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then plugin the USB stick into the USB port of the MacBook Air as shown in &lt;em&gt;Figure 8&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/010_plugin_usb_stick.jpeg&quot; alt=&quot;Figure 8. Plugin the USB stick with Linux installer image&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 8. Plugin the USB stick with the Linux installer image&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;: Now we need the laptop to boot from the USB drive, so we &lt;strong&gt;press and hold&lt;/strong&gt; the &lt;code class=&quot;highlighter-rouge&quot;&gt;Alt/Option&lt;/code&gt; button, and then hit the power button. Keep holding the &lt;code class=&quot;highlighter-rouge&quot;&gt;Alt/Option&lt;/code&gt; button until you see the Linux Grub boot menu as seein in &lt;em&gt;Figure 9&lt;/em&gt;. This is the installer booting from the plugged in USB drive. &lt;a href=&quot;https://support.apple.com/en-us/HT201255&quot;&gt;Here is a link from Apple&lt;/a&gt; describing the various boot keys that you can press, if you are curious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: If you had setup a firmware password on the MacBook Air, then you will need it here.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/011_boot_into_kali_linux.jpeg&quot; alt=&quot;Figure 9. Kali Linux installer booting on the MacBook Air&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 9. Kali Linux installer booting on the MacBook Air&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10&lt;/strong&gt;: Start the installation and follow instructions as desired, or refer to the installation manual for your choice of Linux. Shown below in &lt;em&gt;Figure 10&lt;/em&gt; is the SSD being detected by the installer.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/011_note_ssd_size.jpeg&quot; alt=&quot;Figure 10. New SSD is detected by the Linux installer&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 10. New SSD is detected by the Linux installer&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;During the install I did receive a few error messages saying that the partitions could not be written or they were written but the kernel could not detect them. I rebooted and tried twice and the partitions were detected, but the main thing I think worked was making sure that the EFI partition had the &lt;code class=&quot;highlighter-rouge&quot;&gt;Name&lt;/code&gt; field set. I was able to do this by changing the partition type to FAT32 and then changing it back to EFI.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you have ethernet available via a USB-to-ethernet adapter, I would use that to perform the install since the WiFi drivers may not work as expected or cause hangs/freezes.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 11&lt;/strong&gt;: Once you complete the installation reboot the laptop and see if it works. Shown in &lt;em&gt;Figure 11&lt;/em&gt; is the login screen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/macbookairlinux/012_kali_linux_installed_on_macbookair.jpeg&quot; alt=&quot;Figure 11. Kali Linux installed on the MacBook Air&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 11. Kali Linux installed on the MacBook Air&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12&lt;/strong&gt;: If your MacBook Air has low RAM, like mine has 2GB, then you will see a lot of freezes/hangs since it runs out of memory quickly. So there are two things you can do:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Install the Broadcom firmware for your WiFi since it is not installed by default and reboot.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;firmware-b43-installer
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;If you are still seeing random hangs, it is due to the Broadcom drivers and your best bet is to use an &lt;a href=&quot;https://amzn.to/47ywoAN&quot;&gt;Alfa AWUS036AC or similar&lt;/a&gt; ethernet card supported by Kali Linux. In that case, you will need to blacklist the Broadcom drivers on the Macbook Air, so that they do not load up and crash the system randomly. Place a file with the below content in the below path and reboot the system. Remember to make sure you have a WiFi dongle available to connect to the internet.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; /etc/modprobe.d/broadcom-blacklist.conf
&lt;span class=&quot;c&quot;&gt;#### blacklisting broadcom drivers for wifi&lt;/span&gt;
blacklist bcma
blacklist brcmsmac
blacklist b43
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;A &lt;a href=&quot;https://amzn.to/3KLIo8d&quot;&gt;USB-to-ethernet dongle&lt;/a&gt; can also be used if you want to use ethernet instead of WiFi.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Set the login mode to not boot up a GUI by default, and instead boot into commandline. This is what I have done.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;### get the default startup setting&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl get-default
graphical.target
&lt;span class=&quot;c&quot;&gt;### change the startup setting to be commandline&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl set-default multi-user.target
&lt;span class=&quot;c&quot;&gt;### verify the setting&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl get-default
multi-user.target
&lt;span class=&quot;c&quot;&gt;### reboot and test&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Increase the &lt;code class=&quot;highlighter-rouge&quot;&gt;swap&lt;/code&gt; space from &lt;code class=&quot;highlighter-rouge&quot;&gt;1 GB&lt;/code&gt; to &lt;code class=&quot;highlighter-rouge&quot;&gt;8 GB&lt;/code&gt;, which is also what I did. This will move a lot of the memory to swap. This may not be recommended for SSDs but is a necessity for your old device with low RAM.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;### show the existing swap space&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;swapon &lt;span class=&quot;nt&quot;&gt;--show&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;### check the free space being used&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;free &lt;span class=&quot;nt&quot;&gt;-h&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;### create a large enough swapfile&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;fallocate &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt; 6G /swapfile

&lt;span class=&quot;c&quot;&gt;### check it is 7GB in size&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-lh&lt;/span&gt; /swapfile

&lt;span class=&quot;c&quot;&gt;### change the swap file permissions&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo chmod &lt;/span&gt;0600 /swapfile

&lt;span class=&quot;c&quot;&gt;### make the filesystem on it&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;mkswap /swapfile

&lt;span class=&quot;c&quot;&gt;### enable the swap file&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;swapon /swapfile

&lt;span class=&quot;c&quot;&gt;### verify that it worked&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;swapon &lt;span class=&quot;nt&quot;&gt;--show&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;free &lt;span class=&quot;nt&quot;&gt;-h&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;### add it to /etc/fstab to enable this on boot everytime&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo cp&lt;/span&gt; /etc/fstab /etc/fstab.bak
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'/swapfile none swap sw 0 0'&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; /etc/fstab

&lt;span class=&quot;c&quot;&gt;### reboot and test&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The above commands were taken from &lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Sat, 08 Jul 2023 00:00:00 -0400</pubDate>
        <link>https://www.vikaskumar.org/2023/07/08/macbook-air-install-linux.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2023/07/08/macbook-air-install-linux.html</guid>
        
        
        <category>tools</category>
        
        <category>amd64</category>
        
      </item>
    
      <item>
        <title>SETUP SQUID WEB PROXY SERVER ON LINUX</title>
        <description>&lt;p&gt;Sometimes you need to setup a proxy server so that you can mask your IP address for making web requests using your browser. In some situations, you may want to intercept every web request and reject some requests such as rejecting social media websites at work. Sometimes you want only authorized users to access the internet at your workplace and want to monitor their web access. One may also need to cache web requests to build their own content delivery network. In such scenarios, you can install a web proxy like &lt;a href=&quot;http://www.squid-cache.org/Doc/&quot;&gt;Squid&lt;/a&gt; on Linux.&lt;/p&gt;

&lt;p&gt;Setting it up on a Debian or Ubuntu system is very easy and this post will show you how. However, this post is limited to setting up the Squid proxy server only as a HTTP/FTP proxy and not for caching. That would be a different post for the future.&lt;/p&gt;

&lt;!-- more --&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+================+                                        +==============+                           
|                |                                        |              |                           
|    BROWSER     |&amp;lt;=====&amp;gt;|||| HTTP/FTP PACKETS ||||&amp;lt;=====&amp;gt;| PROXY SERVER |&amp;lt;=====&amp;gt;|||| INTERNET WEBSITE
|                |                                        |              |                           
+================+                                        +==============+                             
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;installation&quot;&gt;INSTALLATION&lt;/h2&gt;

&lt;p&gt;If you want to run a web proxy, you need a server that is publicly visible on the internet. So for this example, you can use a &lt;a href=&quot;https://www.linode.com/&quot;&gt;Linode&lt;/a&gt; &lt;em&gt;nanode&lt;/em&gt; which is $5 per month or a &lt;a href=&quot;https://www.digitalocean.com/&quot;&gt;DigitalOcean&lt;/a&gt; VM.&lt;/p&gt;

&lt;p&gt;Once you have setup the latest Debian (Buster as of this writing) or Ubuntu (2022.01 as of this writing) you can install the &lt;code class=&quot;highlighter-rouge&quot;&gt;squid&lt;/code&gt; software. Once it installs it starts up, but we need to configure it so we shut it down.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;su - root
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;apt update &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;squid
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;systemctl stop squid
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;configuration&quot;&gt;CONFIGURATION&lt;/h2&gt;

&lt;p&gt;Now let’s configure the software. Edit the &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/squid/squid.conf&lt;/code&gt; file that has been setup by the operating system during installation. Most of the defaults are fine. In our case we only want to support HTTP, HTTPS and FTP protocols so the ports that we want to allow are 80, 443 and 21, respectively.&lt;/p&gt;

&lt;p&gt;So your &lt;em&gt;access control list&lt;/em&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;acl&lt;/code&gt;) should look like below, where you comment out every other port that you do not want to support.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
#acl Safe_ports port 70     # gopher
#acl Safe_ports port 210        # wais
#acl Safe_ports port 1025-65535 # unregistered ports
#acl Safe_ports port 280        # http-mgmt
#acl Safe_ports port 488        # gss-http
#acl Safe_ports port 591        # filemaker
#acl Safe_ports port 777        # multiling http
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now let’s create a custom file for our usage and place it in &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/squid/conf.d/&lt;/code&gt; and let’s call it &lt;code class=&quot;highlighter-rouge&quot;&gt;local.conf&lt;/code&gt; and add the following to it. Below is the content of &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/squid/conf.d/local.conf&lt;/code&gt;. Replace the &lt;code class=&quot;highlighter-rouge&quot;&gt;MY_EXTERNAL_IP_ADDRESS&lt;/code&gt; with your network’s external IP address, if you want to restrict access to Squid to
just your network. This is &lt;strong&gt;important&lt;/strong&gt; for security. If you want to add several IP addresses, you must create one new line for each IP address and have the same &lt;code class=&quot;highlighter-rouge&quot;&gt;acl&lt;/code&gt; name so that the &lt;code class=&quot;highlighter-rouge&quot;&gt;http_access allow&lt;/code&gt; will work on that name.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;## digest authentication - dumb but password is encrypted
auth_param digest program /usr/lib/squid/digest_file_auth -c /etc/squid/private/digest_authentication
auth_param digest children 32 startup=0 idle=1
## use any realm name here but it will be needed to generate the authentication token
auth_param digest realm MySquid Digest Authentication
auth_param digest nonce_garbage_interval 5 minutes
auth_param digest nonce_max_duration 30 minutes
auth_param digest nonce_max_count 50
acl authenticatedusers proxy_auth REQUIRED
# deny anyone who has not authenticated
http_access deny !authenticatedusers
### setup IP based access
http_access allow localhost
acl mybrowser src MY_EXTERNAL_IP_ADDRESS
http_access allow mybrowser

## change this to the hostname you want to use in the error messages
visible_hostname squid01
via off
forwarded_for off
request_header_access Allow allow all 
request_header_access Authorization allow all 
request_header_access WWW-Authenticate allow all 
request_header_access Proxy-Authorization allow all 
request_header_access Proxy-Authenticate allow all 
request_header_access Cache-Control allow all 
request_header_access Content-Encoding allow all 
request_header_access Content-Length allow all 
request_header_access Content-Type allow all 
request_header_access Date allow all 
request_header_access Expires allow all 
request_header_access Host allow all 
request_header_access If-Modified-Since allow all 
request_header_access Last-Modified allow all 
request_header_access Location allow all 
request_header_access Pragma allow all 
request_header_access Accept allow all 
request_header_access Accept-Charset allow all 
request_header_access Accept-Encoding allow all 
request_header_access Accept-Language allow all 
request_header_access Content-Language allow all 
request_header_access Mime-Version allow all 
request_header_access Retry-After allow all 
request_header_access Title allow all 
request_header_access Connection allow all 
request_header_access Proxy-Connection allow all 
request_header_access User-Agent allow all 
request_header_access Cookie allow all 
request_header_access All deny all
cache deny all
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now that you have saved this file as &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/squid/conf.d/local.conf&lt;/code&gt; we need to create the authentication file &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/squid/private/digest_authentication&lt;/code&gt; for Squid to use as a list of username and passwords.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /etc/squid/private/
&lt;span class=&quot;c&quot;&gt;## setup the password and choose a username&lt;/span&gt;
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;htdigest &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; /etc/squid/private/digest_authentication &lt;span class=&quot;s1&quot;&gt;'MySquid Digest Authentication'&lt;/span&gt; &amp;lt;username&amp;gt;
Adding password &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &amp;lt;username&amp;gt; &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;realm MySquid Digest Authentication
New password:
Re-type new password:
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;chown&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; proxy:proxy /etc/squid/private/
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;chmod &lt;/span&gt;go-rwx /etc/squid/private/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now you can restart the server:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;systemctl start squid
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;netstat &lt;span class=&quot;nt&quot;&gt;-vnatp&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;squid | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;LISTEN
tcp6       0      0 :::3128                 :::&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;                    LISTEN      11111/&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;squid-1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;security&quot;&gt;SECURITY&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;To secure the connection, it makes sense to setup a firewall such as &lt;code class=&quot;highlighter-rouge&quot;&gt;ufw&lt;/code&gt; or use Linode’s cloud firewall setup to allow only connections from known IP addresses. If you want to allow global access, you must use a very strong password and keep your server up to date since you will see bot attacks. In my case, I have restricted access to the Squid server to my home IP and manually adjust the firewall when the IP changes.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You can also add the IP address to the &lt;code class=&quot;highlighter-rouge&quot;&gt;acl&lt;/code&gt; in the &lt;code class=&quot;highlighter-rouge&quot;&gt;local.conf&lt;/code&gt; file and let Squid reject other IP addresses.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Using username/password authentication you can allow multiple users to access Squid and restrict access.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You can look at the logs present in &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/squid/access.log&lt;/code&gt; to see which websites were accessed by which user and from which IP address.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;connecting-to-the-web-proxy&quot;&gt;CONNECTING TO THE WEB PROXY&lt;/h2&gt;

&lt;p&gt;We can use &lt;code class=&quot;highlighter-rouge&quot;&gt;curl&lt;/code&gt; to test the proxy access first.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;curl &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--proxy-digest&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-U&lt;/span&gt; &amp;lt;username&amp;gt;:&amp;lt;password&amp;gt; &lt;span class=&quot;nt&quot;&gt;-x&lt;/span&gt; http://&amp;lt;IP ADDRESS&amp;gt;:3128 https://www.vikaskumar.org/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Here the &lt;code class=&quot;highlighter-rouge&quot;&gt;username&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;password&lt;/code&gt; are the ones you had setup using the &lt;code class=&quot;highlighter-rouge&quot;&gt;htdigest&lt;/code&gt; command above.&lt;/p&gt;

&lt;p&gt;The IP address is the external IP address of the server on which you are running the Squid proxy and 3128 is the default port.&lt;/p&gt;

&lt;p&gt;You can then try to reach a website like &lt;a href=&quot;https://www.ipinfo.io&quot;&gt;https://www.ipinfo.io&lt;/a&gt; to verify that you are  pretending to send your request from the Squid proxy server’s IP address.&lt;/p&gt;

&lt;h3 id=&quot;browser-settings&quot;&gt;BROWSER SETTINGS&lt;/h3&gt;

&lt;p&gt;On Firefox you must setup the proxy settings by following &lt;a href=&quot;https://support.mozilla.org/en-US/kb/connection-settings-firefox&quot;&gt;instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can select the &lt;code class=&quot;highlighter-rouge&quot;&gt;Manual Proxy Configuration&lt;/code&gt; and setup the same IP address for the HTTP(s) and FTP fields, and port 3128 for the port. Then when you try to access a website it will prompt you for a username and password, and you can enter the credentials you had setup earlier.&lt;/p&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;CONCLUSION&lt;/h3&gt;

&lt;p&gt;With this we come to the end of setting up an external web proxy server that allows you to have applications hide their IP address when they make HTTP(s) requests.&lt;/p&gt;
</description>
        <pubDate>Thu, 22 Sep 2022 00:00:00 -0400</pubDate>
        <link>https://www.vikaskumar.org/2022/09/22/setup-squid-web-proxy-server.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2022/09/22/setup-squid-web-proxy-server.html</guid>
        
        
        <category>tools</category>
        
      </item>
    
      <item>
        <title>SETUP SOCKS PROXY SERVER ON LINUX</title>
        <description>&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/SOCKS&quot;&gt;SOCKS&lt;/a&gt; proxy server is useful to mask your IP address especially when you want to connect to TCP/UDP ports that are not running on ports 80 and 443, such as IRC or SSH or a cryptocurrency node such as Bitcoin, Ethereum or Dogecoin node.&lt;/p&gt;

&lt;p&gt;Setting it up on a Debian  or Ubuntu system is very easy and this post will show you how.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+================+       +===============+                                       +==============+ 
|                |       |               |                                       |              |
|  APPLICATION   |&amp;lt;=====&amp;gt;|  SOCKS CLIENT |&amp;lt;=====&amp;gt; || ENCRYPTED PACKETS || &amp;lt;=====&amp;gt;| SOCKS SERVER |&amp;lt;=====&amp;gt;|||| INTERNET
|                |       |               |                                       |              |
+================+       +===============+                                       +==============+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;installation&quot;&gt;INSTALLATION&lt;/h2&gt;

&lt;p&gt;If you want to run a SOCKS proxy, you need a server that is publicly visible on the internet. So for this example, you can use a &lt;a href=&quot;https://www.linode.com/&quot;&gt;Linode&lt;/a&gt; &lt;em&gt;nanode&lt;/em&gt; which is $5 per month or a &lt;a href=&quot;https://www.digitalocean.com/&quot;&gt;DigitalOcean&lt;/a&gt; VM.&lt;/p&gt;

&lt;p&gt;Once you have setup the latest Debian (Buster as of this writing) or Ubuntu (2022.01 as of this writing) you can install the &lt;code class=&quot;highlighter-rouge&quot;&gt;shadowsocks-libev&lt;/code&gt; software. Once it installs it starts up, but we need to configure it so we shut it down.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;su - root
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;apt update &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;shadowsocks-libev
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;systemctl stop shadowsocks-libev.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;configuration&quot;&gt;CONFIGURATION&lt;/h2&gt;

&lt;p&gt;Now let’s configure the software. Edit the &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/shadowsocks-libev/config.json&lt;/code&gt; file that has been auto-generated:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;0.0.0.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;::&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;::1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;mode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tcp_and_udp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;server_port&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8388&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;local_port&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1080&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ENTER_LONG_PASSWORD_HERE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;timeout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;fast_open&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;method&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;chacha20-ietf-poly1305&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;server_port&lt;/code&gt; is the port that the proxy server is listening on for inbound external connections for applications connecting to the proxy server from different networks.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;local_port&lt;/code&gt; is the port that the proxy server is listening on for inbound connections for applications running on the same server that need to use the proxy server. This is for the &lt;code class=&quot;highlighter-rouge&quot;&gt;ss-local&lt;/code&gt; program that will be described later.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;password&lt;/code&gt; should be something long and difficult to crack, so that external connections can authenticate against it and only allowed applications that have the password can connect to the server.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;server&lt;/code&gt; is the list of interfaces, IPv4 and IPv6, that the proxy server should be listening on for external connections on the &lt;code class=&quot;highlighter-rouge&quot;&gt;server_port&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The rest of the configuration is selected as the best possible defaults as described in the &lt;a href=&quot;http://shadowsocks.org/guide/configs.html&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you are done configuring the JSON file, change the permissions. We make the file read-write by &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt; user and read-only by the &lt;code class=&quot;highlighter-rouge&quot;&gt;shadowsocks-libev&lt;/code&gt; user under which Debian/Ubuntu run the server.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;chmod &lt;/span&gt;0640 /etc/shadowsocks-libev/config.json
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;chown &lt;/span&gt;root:shadowsocks-libev /etc/shadowsocks-libev/config.json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On Debian and Ubuntu servers, there is another configuration file that &lt;code class=&quot;highlighter-rouge&quot;&gt;systemd&lt;/code&gt; uses which is &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/default/shadowsocks-libev&lt;/code&gt;. The only change I suggest is to add &lt;code class=&quot;highlighter-rouge&quot;&gt;-v&lt;/code&gt; to the &lt;code class=&quot;highlighter-rouge&quot;&gt;DAEMON_ARGS&lt;/code&gt; so that you can see the connections come and go in the &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/syslog&lt;/code&gt; file.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; /etc/default/shadowsocks-libev
&lt;span class=&quot;c&quot;&gt;# Defaults for shadowsocks initscript&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# sourced by /etc/init.d/shadowsocks-libev&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# installed at /etc/default/shadowsocks-libev by the maintainer scripts&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# This is a POSIX shell fragment&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Note: `START', `GROUP' and `MAXFD' options are not recognized by systemd.&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Please change those settings in the corresponding systemd unit file.&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Configuration file&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;CONFFILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/etc/shadowsocks-libev/config.json&quot;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Extra command line arguments&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;DAEMON_ARGS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# User and group to run the server as&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nobody
&lt;span class=&quot;nv&quot;&gt;GROUP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nogroup

&lt;span class=&quot;c&quot;&gt;# Number of maximum file descriptors&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;MAXFD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;32768
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now we need to enable &lt;code class=&quot;highlighter-rouge&quot;&gt;fast_open&lt;/code&gt; in the kernel network stack using &lt;code class=&quot;highlighter-rouge&quot;&gt;sysctl&lt;/code&gt; as described &lt;a href=&quot;http://shadowsocks.org/guide/advanced.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Add the following lines to &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/sysctl.conf&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fs.file-max = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Add the following lines to &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/security/limits.conf&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;* soft nofile 51200
* hard nofile 51200

# for server running in root:
root soft nofile 51200
root hard nofile 51200
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once that is done run the following to get the kernel to reload the configuration:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sysctl &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt;
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;ulimit&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-n&lt;/span&gt; 51200
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now you can restart the server:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;systemctl start shadowsocks-libev.service
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;netstat &lt;span class=&quot;nt&quot;&gt;-vnatp&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;ss-server | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;LISTEN
tcp        0      0 0.0.0.0:8388            0.0.0.0:&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;               LISTEN      11111/ss-server
tcp6       0      0 :::8388                 :::&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;                    LISTEN      11111/ss-server
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;connecting-to-the-socks-proxy&quot;&gt;CONNECTING TO THE SOCKS PROXY&lt;/h3&gt;

&lt;p&gt;Now we have the SOCKS server running on a Linode VM. Let’s note its IP address and let’s call it &lt;code class=&quot;highlighter-rouge&quot;&gt;$IP_EXTERNAL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let’s say we are now in our personal LAN in our home, and are running a Bitcoin node that needs to connect to the rest of the network, but you do not want to reveal your home IP address.&lt;/p&gt;

&lt;p&gt;You then use the SOCKS server running on &lt;code class=&quot;highlighter-rouge&quot;&gt;$IP_EXTERNAL&lt;/code&gt; and get the Bitcoin daemon to connect to that SOCKS proxy.&lt;/p&gt;

&lt;p&gt;For that to work, let’s assume your Bitcoin node is also running on Debian/Ubuntu system. You need to install the &lt;code class=&quot;highlighter-rouge&quot;&gt;shadowsocks-libev&lt;/code&gt; package and shutdown the service, and also disable it.&lt;/p&gt;

&lt;p&gt;We do not need the server  module on this system, which is the client system, and only need to use the client application &lt;code class=&quot;highlighter-rouge&quot;&gt;ss-local&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;su - root
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;apt update &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;shadowsocks-libev
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;systemctl stop shadowsocks-libev.service
root&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;systemctl disable shadowsocks-libev.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Run the local client application that now will connect to your SOCKS server using the password that was setup above. This can be run as your regular user and does not need root privileges.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;nohup&lt;/span&gt; /usr/bin/ss-local &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$IP_EXTERNAL&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; 8388 &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt; 1080 &lt;span class=&quot;nt&quot;&gt;-b&lt;/span&gt; 127.0.0.1 &lt;span class=&quot;nt&quot;&gt;-k&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'ENTER_LONG_PASSWORD_HERE'&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'chacha20-ietf-poly1305'&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--reuse-port&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--fast-open&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; /tmp/shadowsocks.log 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;netstat &lt;span class=&quot;nt&quot;&gt;-vnat&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;1080 | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;LISTEN
tcp        0      0 127.0.0.1:1080          0.0.0.0:&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;               LISTEN      -
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can see the &lt;code class=&quot;highlighter-rouge&quot;&gt;ss-local&lt;/code&gt; application listening on port 1080 on the localhost IP address &lt;code class=&quot;highlighter-rouge&quot;&gt;127.0.0.1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;:If you do not want to use the commandline you can setup the &lt;code class=&quot;highlighter-rouge&quot;&gt;config.json&lt;/code&gt; above in the client machine as well and follow the &lt;code class=&quot;highlighter-rouge&quot;&gt;CONFIG SECTION&lt;/code&gt; in the &lt;code class=&quot;highlighter-rouge&quot;&gt;man shadowsocks-libev&lt;/code&gt; page.&lt;/p&gt;

&lt;p&gt;Now we can run the Bitcoin node and make it connect via the SOCKS proxy to the broader worldwide network.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;bitcoind &lt;span class=&quot;nt&quot;&gt;-proxy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'127.0.0.1:1080'&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-datadir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;HOME&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/.bitcoin &lt;span class=&quot;nt&quot;&gt;-server&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-daemon&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-par&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Or if you are running a Dogecoin node you can do the following:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;dogecoind &lt;span class=&quot;nt&quot;&gt;-proxy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'127.0.0.1:1080'&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-par&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-1&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-server&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-daemon&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you want to use the SOCKS server to make web requests, you can do the following:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;curl &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--socks5&lt;/span&gt; 127.0.0.1:1080 https://www.vikaskumar.org/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;security&quot;&gt;SECURITY&lt;/h4&gt;

&lt;p&gt;To secure the connection, it makes sense to setup a firewall such as &lt;code class=&quot;highlighter-rouge&quot;&gt;ufw&lt;/code&gt; or use Linode’s cloud firewall setup to allow only connections from known IP addresses. If you want to allow global access, you must use a very strong password and keep your server up to date since you will see bot attacks. In my case, I have restricted access to the SOCKS server to my home IP and manually adjust the firewall when the IP changes.&lt;/p&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;CONCLUSION&lt;/h3&gt;

&lt;p&gt;With this we come to the end of setting up an external SOCKS proxy server that allows you to have applications hide their IP address.&lt;/p&gt;
</description>
        <pubDate>Wed, 21 Sep 2022 00:00:00 -0400</pubDate>
        <link>https://www.vikaskumar.org/2022/09/21/setup-socks-proxy-server.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2022/09/21/setup-socks-proxy-server.html</guid>
        
        
        <category>tools</category>
        
      </item>
    
      <item>
        <title>SCREEN REPAIR OF SAMSUNG GALAXY S4</title>
        <description>&lt;p&gt;A Samsung Galaxy S4 (and also S5) is a fantastic device to use as a &lt;em&gt;cheap&lt;/em&gt; burner phone for one simple reason — a &lt;span class=&quot;warning&quot;&gt;removable battery&lt;/span&gt;. It is also well supported with a &lt;a href=&quot;https://download.lineageos.org/jfltevzw&quot;&gt;LineageOS&lt;/a&gt; port. Someone gave me an old Samsung Galaxy S4 a few years back that had a damaged display, and I kept it thinking that one day
I may need it. A few days ago I decided I wanted to fix that display so I could build a burner phone from scratch with a single messenger app like &lt;a href=&quot;https://getsession.org/download&quot;&gt;Session&lt;/a&gt;, which has a custom APK file that you can download on to your Android without a Google Play Store or even an F-Droid store. This
can be very useful if you do not want Google apps or any other app besides a default browser on your device.&lt;/p&gt;

&lt;p&gt;This post outlines how I went about repairing the screen of the S4 first, so that I can have a device that works which is step 1. These devices are really cheap to procure on eBay but nothing is cheaper than free. I will also demonstrate how to disable or remove the selfie camera.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Almost all these steps are available on &lt;a href=&quot;https://www.ifixit.com/Guide/Samsung+Galaxy+S4+Display+Assembly+Replacement/16540&quot;&gt;iFixit&lt;/a&gt; but nothing beats having your own custom manual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Procure a Samsung Galaxy S4 that has a cracked display.
&lt;img src=&quot;/images/samsungs4/screen_repair/00_cracked_display.jpeg&quot; alt=&quot;Cracked Samsung Galaxy S4 display&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 0. Phone with cracked screen&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Procure the tools you will need for this process. I used the base electronics kit from &lt;a href=&quot;https://www.ifixit.com/Store/Tools/Essential-Electronics-Toolkit/IF145-348?o=5&quot;&gt;iFixit&lt;/a&gt; or you can use a cheaper &lt;a href=&quot;https://amzn.to/3HoJd2I&quot;&gt;Amazon version&lt;/a&gt; of the same. The main thing to have is the
&lt;a href=&quot;https://amzn.to/3EETxSs&quot;&gt;spudger&lt;/a&gt;, a &lt;a href=&quot;https://amzn.to/34dwLVk&quot;&gt;screwdriver&lt;/a&gt; with &lt;code class=&quot;highlighter-rouge&quot;&gt;#PH-00&lt;/code&gt; bit, &lt;a href=&quot;https://amzn.to/31fu18E&quot;&gt;tweezers&lt;/a&gt; and the &lt;a href=&quot;https://amzn.to/32GvYvE&quot;&gt;trim opening tool&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You must use an &lt;a href=&quot;https://amzn.to/3pGCCL4&quot;&gt;anti-static wrist strap&lt;/a&gt; (&lt;em&gt;Figure 2&lt;/em&gt;) if you have carpeted flooring or if you are wearing woollen clothing.&lt;/p&gt;

&lt;p&gt;You will also need the correct model for the replacement display LCD screen. My model number of the device was &lt;code class=&quot;highlighter-rouge&quot;&gt;SCH-I545&lt;/code&gt; and I purchased a screen for that from &lt;a href=&quot;https://www.ebay.com/itm/185195594296&quot;&gt;eBay&lt;/a&gt;, or you can get it on &lt;a href=&quot;https://amzn.to/3pKHNty&quot;&gt;Amazon&lt;/a&gt;. This model is also called the &lt;code class=&quot;highlighter-rouge&quot;&gt;jfltevzw&lt;/code&gt; if you have a Verizon phone or &lt;code class=&quot;highlighter-rouge&quot;&gt;jflte&lt;/code&gt; if generic.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/01_tools_parts_required.jpeg&quot; alt=&quot;Tools for mobile repair&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 1. Tools required for this job&lt;/em&gt;&lt;/small&gt;
&lt;img src=&quot;/images/samsungs4/screen_repair/02_antistatic_watch.jpeg&quot; alt=&quot;Anti-static wrist strap&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2. An anti-static wrist strap&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Remove the back cover of the device to expose the battery. Remove any micro-SD card and SIM cards that may be present in the device and take out the battery.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/03_remove_backcover.jpeg&quot; alt=&quot;Remove back cover&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3. Remove the back cover of the device to expose the battery&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Using a &lt;code class=&quot;highlighter-rouge&quot;&gt;#PH-00&lt;/code&gt; &lt;a href=&quot;https://amzn.to/34dwLVk&quot;&gt;screwdriver&lt;/a&gt; open the 8 screws and keep them aside.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/04_remove_battery.jpeg&quot; alt=&quot;Remove the 8 screws circled in red&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 4. Remove the 8 screws circled in red&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/05_remove_screws.jpeg&quot; alt=&quot;Screws removed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5. Screws have been removed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;: Now using the blue trim opening tool, start loosening the clips on the greyish white trim by separating it from the front of the device as shown in &lt;em&gt;Figure 6&lt;/em&gt;. &lt;em&gt;Figure 7&lt;/em&gt; shows the trim has been removed. &lt;span class=&quot;warning&quot;&gt;Carefully open the trim without breaking any clips. Patience is a virtue !&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/06_remove_back_trim.jpeg&quot; alt=&quot;Open the rear trim&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6. Open the rear trim with the blue trim opening tool&lt;/em&gt;&lt;/small&gt;
&lt;img src=&quot;/images/samsungs4/screen_repair/07_back_trim_removed.jpeg&quot; alt=&quot;Rear trim removed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 7. The trim has been removed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: As seen in &lt;em&gt;Figure 8&lt;/em&gt; with the red circles, using the plastic black spudger or tweezers, detach the various clips from the motherboard. You will be detaching the clips for the USB charging module, selfie camera, speaker, headphone jack, the display LCD (yellow circle), the mobile antenna and home button
μSMA connectors, and two other screws that hold the headphone jack and motherboard to the display LCD. &lt;em&gt;Figure 9&lt;/em&gt; shows the result of the clips being detached.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/08_detach_clips.jpeg&quot; alt=&quot;Clips on motherboard to be opened&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 8. Open the clips and remove the screws to free up the motherboard&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/09_clips_detached.jpeg&quot; alt=&quot;Clips have been detached&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 9. Clips have been detached from the motherboard&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;: Carefully lift up the motherboard out of the device and keep it aside. Now you need to open the screw shown by the red circle in &lt;em&gt;Figure 10&lt;/em&gt;. This will enable you to remove the selfie camera and speaker.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/10_mobo_removed.jpeg&quot; alt=&quot;Motherboard has been removed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 10. Motherboard has been removed. Notice the screw that needs to be taken out&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;: Once the screw has been removed, using the spudger or a tweezer lift the metallic (or plastic) boot out of its position as shown in &lt;em&gt;Figure 11&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/11_remove_boot.jpeg&quot; alt=&quot;Protective Boot has been removed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 11. Remove the protective boot or cover off the speaker and selfie camera&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;: Now take out the selfie camera with a tweezer. If you are &lt;strong&gt;serious&lt;/strong&gt; about making a burner phone, you would not install a selfie camera back in place. In my case, the camera was already damaged as the ribbon was slit. So it was a non-functioning camera anyway, which is why I put it back in place but after
cutting out the ribbon completely as shown in &lt;em&gt;Figure 12b&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/12_selfie_camera.jpeg&quot; alt=&quot;Damaged selfie camera&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 12a. Damaged selfie or front facing camera&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/26_selfie_camera_ribbon_cut.jpeg&quot; alt=&quot;Camera connection ribbon is cut&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 12b. Camera connection Ribbon has been cut&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10&lt;/strong&gt;: Now remove the speaker assembly as shown in &lt;em&gt;figure 13&lt;/em&gt;. If you want your burner phone to only have text messaging capabilities, I would not put the speaker back in place either, since you will never need to listen to anything unless you are expecting audio/video messages. You can detect the arrival of messages
just by keeping the device in vibrate mode, if all you want is text messages. Even then, you could technically listen to audio/video messages using the headphone jack.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/13_remove_speaker.jpeg&quot; alt=&quot;Remove the speaker assembly&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 13. Remove the speaker assembly&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11&lt;/strong&gt;: Using a heat gun heat the vibrate motor (black circular piece in &lt;em&gt;Figure 14&lt;/em&gt;) till the spudger can delicately move it out of position as seen in &lt;em&gt;Figure 15&lt;/em&gt;. This can take about 1 or 2 minutes on low heat. Lift it out while maintaining the adhesive on the motor itself, so that it can be reused later (&lt;em&gt;Figure 16&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/14_remove_vibrate_motor_heat.jpeg&quot; alt=&quot;Heat the vibrate motor&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 14. Using a heat gun heat the vibrate motor&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/15_heat_adhesive_lift.jpeg&quot; alt=&quot;Lift the motor out of its position&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 15. Lift the motor out of its position&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/16_vibrate_motor_removed.jpeg&quot; alt=&quot;Vibrate motor has been removed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 16. Vibrate motor has been removed. Notice the adhesive on the motor is intact&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12&lt;/strong&gt;: Next we remove the home button cable connecting the motherboard to the USB charging module. We had removed the μSMA connector earlier from the motherboard in &lt;strong&gt;Step 6&lt;/strong&gt;. Now we remove a μSMA connector from the USB charging module too and pull it out safely without breaking it. If you break it,
you have to replace the whole cable! You cannot solder your way out of it unless you have a μSMA crimping tool.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/17_remove_home_button_cable.jpeg&quot; alt=&quot;Remove the home button cable&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 17. Remove the home button cable&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 13&lt;/strong&gt;: We need to remove the USB charging module which is glued on to the base of the display. To do this first remove the USB charging port cover using a spudger. It may require some effort but be gentle. We need to reuse all of these parts, so try not to break them.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/18_remove_usb_chargeport_clip.jpeg&quot; alt=&quot;Remove the USB charging port cover using a spudger&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 18. Remove the USB charging port cover using a spudger&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 14&lt;/strong&gt;: Since our device is a Verizon CDMA version of the Samsung Galaxy S4, it has a pink μSMA connector cable connecting the antenna to the USB charging module as shown by the red circle in &lt;em&gt;Figure 19&lt;/em&gt;. Unfortunately, the other end of the cable got damaged while removing it so in my case the &lt;strong&gt;phone&lt;/strong&gt; feature
will not work on this burner phone and may be a good thing. However, that means the device will need to rely on WiFi for internet access. That has its own disadvantages in rural areas with poor free WiFi availability, but may be great for cities. It is even better for use in protests since you will not be caught up in
dragnets setup by law enforcement or other adversaries, where they use &lt;a href=&quot;https://www.eff.org/pages/cell-site-simulatorsimsi-catchers&quot;&gt;cell site simulators&lt;/a&gt; and force your device to connect to their malicious network. However, you will need to connect to a WiFi network at that point which is easier to do in cities due to
free coffee shop WiFi availability.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/19_detach_cable.jpeg&quot; alt=&quot;Detach antenna cable connector&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 19. Detach antenna cable connector&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 15&lt;/strong&gt;: Using a heat gun again lightly heat up the whole USB charging module and start lifting it out of its place using a spudger. Start from the left of the charging module (&lt;em&gt;Figure 20&lt;/em&gt;) and you should find success as you can see in &lt;em&gt;Figure 21&lt;/em&gt;. If your USB charging port is damaged, this would be the time to
replace it with a new USB charging module.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/20_lift_cable_up_heatgun.jpeg&quot; alt=&quot;Using a heat gun heat the left of the USB charging module&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 20. Using a heat gun start heating the left of the USB charging module&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/21_usb_charging_module.jpeg&quot; alt=&quot;USB charging module removed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 21. USB charging module removed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 16&lt;/strong&gt;: Now take out the new display module you procured from eBay in &lt;strong&gt;Step 1&lt;/strong&gt; from its packaging. It should look like &lt;em&gt;Figure 22&lt;/em&gt;. Note that the display module includes both the LCD module and the glass that protects the module.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/22_new_display_module.jpeg&quot; alt=&quot;New display module&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 22. New display module&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: This is where we document the rest of the process of installing the display and bringing the device back to near new condition, which the iFixit modules don’t always describe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 17&lt;/strong&gt;: Install the USB charging module back in place and using a heat gun melt the adhesive and lightly press the module in place.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/23_usb_module_fixed.jpeg&quot; alt=&quot;USB charging module installed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 23. USB charging module installed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 18&lt;/strong&gt;: Install the USB charging port clip back into place (&lt;em&gt;Figure 24&lt;/em&gt;) and using a spudger make sure that the clip fits tightly enough. In my case, it was loose but good enough.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/24_usb_clip_placed.jpeg&quot; alt=&quot;Install the USB charging port clip&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 24. Install the USB charging port clip&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 19&lt;/strong&gt;: Place the speaker back in place (&lt;em&gt;Figure 25&lt;/em&gt;) and optionally place the selfie camera back in place (&lt;em&gt;Figure 26&lt;/em&gt;). In my case, since I had cut out the selfie camera ribbon connector (&lt;em&gt;Figure 12b&lt;/em&gt;), I placed it back in place to allow for the device to close nicely and also to appear to have a camera.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/25_place_speaker.jpeg&quot; alt=&quot;Place speaker in position&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 25. Place speaker back in position&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/27_place_selfie_camera.jpeg&quot; alt=&quot;Place selfie camera in position&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 26. Place selfie camera back in position&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 20&lt;/strong&gt;: Screw the protective boot back into place that you had removed in &lt;strong&gt;Step 11&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/28_boot_screwed_in.jpeg&quot; alt=&quot;Screw the protective boot back in place&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 27. Screw the protective boot back in place&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 21&lt;/strong&gt;: Place the vibrate motor back in position and using a heat gun melt the adhesive and push it down so it sticks.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/29_place_vibrate_motor.jpeg&quot; alt=&quot;Place vibrate motor in position&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 28. Place the vibrate motor in position and heat the adhesive&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 22&lt;/strong&gt;: Now install the headphone jack back in place along with its screw.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/30_place_headphone_jack.jpeg&quot; alt=&quot;Screw the headphone jack back in place&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 29. Screw the headphone jack back in place&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 23&lt;/strong&gt;: Connect the μSMA connector of one end of the home button cable, removed in &lt;strong&gt;Step 12&lt;/strong&gt;, to the USB charging module first. Run the rest of the cable along the side of the display carefully.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/31_connect_home_button_cable_usb_module.jpeg&quot; alt=&quot;Connect home button cable to USB charging module&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 30. Connect home button cable to USB charging module&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 24&lt;/strong&gt;: Install the motherboard in place (&lt;em&gt;Figure 31&lt;/em&gt;) and make sure all the clips and μSMA connectors are above the motherboard. Then clip them in place as shown in &lt;em&gt;Figure 32&lt;/em&gt;. Do not forget to install the &lt;em&gt;black&lt;/em&gt; screw to hold the motherboard to the display frame. I do not recommend removing the rear
facing camera since that can be useful for a burner phone, unlike a front facing or selfie camera which can leak info of the device user, if turned on remotely by a malicious entity. For my broken selfie camera, I installed the broken clip into its socket even though it is not attached to the camera itself.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/32_place_motherboard.jpeg&quot; alt=&quot;Install the motherboard&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 31. Install the motherboard and screw it to the display frame using the black screw&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/33_connect_all_clips.jpeg&quot; alt=&quot;Clip all accessories back&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 32. Clip all the accessories back into their sockets&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 25&lt;/strong&gt;: Now connect the battery to the device as shown in &lt;em&gt;Figure 33&lt;/em&gt; and test that it boots up by pressing the power button to turn on the device. As seen in &lt;em&gt;Figure 34&lt;/em&gt;, I can now see the Samsung logo when the device starts. So at least we now know that the motherboard has been connected correctly.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/34_add_battery_testing.jpeg&quot; alt=&quot;Connect the battery&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 33. Connect the battery&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/35_boots_up.jpeg&quot; alt=&quot;Phone boots up&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 34. Phone boots up&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 26&lt;/strong&gt;: Now take out the battery again. Re-install the back trim cover that you had removed in &lt;strong&gt;Step 5&lt;/strong&gt;. Remember to screw it back to the rest of the device body using the 8 screws that were removed earlier. Install the battery back in place as shown in &lt;em&gt;Figure 35&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/36_place_back_cover.jpeg&quot; alt=&quot;Re-install the back trim cover&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 35. Re-install the back trim cover&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 27&lt;/strong&gt;: Press the power button and boot the phone all the way until it starts loading the operating system. &lt;em&gt;Figure 36&lt;/em&gt; shows us that the phone has the Verizon splash screen and &lt;em&gt;Figure 37&lt;/em&gt; shows the Android operating system boot up. Next to it is the damaged display module.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/37_test_bootup.jpeg&quot; alt=&quot;Boot the phone into the operating system&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 36. Boot the phone into the operating system&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/38_working_phone_broken_display.jpeg&quot; alt=&quot;Working phone with new display module and the damaged display module to its right&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 37. Working phone with new display module. Also seen is the damaged display module&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 28&lt;/strong&gt;: Now connect the device to your computer using a USB cable. Turn on Android USB debugging by following &lt;a href=&quot;https://developer.android.com/studio/debug/dev-options&quot;&gt;instructions&lt;/a&gt;. You should then be able to see this device listed under the &lt;a href=&quot;https://developer.android.com/studio/command-line/adb&quot;&gt;Android Debug Bridge (&lt;code class=&quot;highlighter-rouge&quot;&gt;adb&lt;/code&gt;)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/samsungs4/screen_repair/39_allow_usb_debugging.jpeg&quot; alt=&quot;Enable USB Debugging&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 38. USB debugging is enabled&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Next step would be to root the phone by installing a custom bootloader called &lt;a href=&quot;https://twrp.me/&quot;&gt;TWRP&lt;/a&gt;, by compiling it from scratch, which is going to be described in a future blog post. Once the phone is rooted, you can then install a &lt;a href=&quot;https://download.lineageos.org/jfltevzw&quot;&gt;LineageOS ROM&lt;/a&gt; on to the device without Google tracking. Following that you can install the &lt;a href=&quot;https://getsession.org/download&quot;&gt;Session App&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 21 Dec 2021 00:00:00 -0500</pubDate>
        <link>https://www.vikaskumar.org/2021/12/21/samsung-galaxy-s4-screen-repair.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2021/12/21/samsung-galaxy-s4-screen-repair.html</guid>
        
        
        <category>android</category>
        
        <category>voip</category>
        
      </item>
    
      <item>
        <title>DELL PERC 6/i VIRTUAL DISK SETUP FOR RAID</title>
        <description>&lt;p&gt;There are almost zero manuals online on how to setup the Dell PowerEdge Expandable RAID Controller version 6/i (PERC 6/i) to add additional virtual disks to an existing configuration, so I decided to write a quick instruction manual here. Even Dell’s website either has dead links or does not have enough information on the steps. These steps are identical if this is the first time you are setting up the RAID on the server, and not just for adding a new set of drives.&lt;/p&gt;

&lt;p&gt;In my scenario, I have several Dell R710 PowerEdge servers that required additional disk drives. I am running RAID-1 on the existing server with 4 &lt;strong&gt;physical drives&lt;/strong&gt; (Samsung EVO SSDs) pretending to be 2 &lt;em&gt;virtual drives&lt;/em&gt; to the operating system. I wanted to add 2 more SSDs and hence create another &lt;em&gt;virtual drive&lt;/em&gt; for the Linux operating system to be able to access it.&lt;/p&gt;

&lt;p&gt;The process is very simple and takes about 5 to 10 minutes. Read below for the instructions described using images.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Shutdown your server, if running. It is advisable to do a cold start rather than a reboot. Wait for the BIOS to boot up fully. If your BIOS is old and not the latest version, first update the BIOS by following the instructions on Dell’s website for your server.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;warning&quot;&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;/span&gt;Remember to first add the new physical drives into their respective slots before booting the server up.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/001_bios_booting.jpeg&quot; alt=&quot;PowerEdge R710 BIOS booting&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 1. Perform a cold boot on the server&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Wait for the controller prompt to show up as in &lt;em&gt;Figure 2a&lt;/em&gt; and press the &lt;code class=&quot;highlighter-rouge&quot;&gt;Ctrl R&lt;/code&gt; keys. The PERC controller will now go into configuration mode as shown in &lt;em&gt;Figure 2b and 2c&lt;/em&gt;. This may take about 10-30 seconds, so be patient. The configuration utility will detect the current number of virtual disks first and that’s why it takes a slight amount of time.&lt;/p&gt;

&lt;p&gt;Once the utility has loaded you can navigate to the controller screen shown in &lt;em&gt;Figure 2d&lt;/em&gt; to compare settings as in the image.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/002_perc_controller_prompt.jpeg&quot; alt=&quot;Press Ctrl R on prompt&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2a. Press Ctrl R when prompted&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/002_perc_prompt.jpeg&quot; alt=&quot;Configuration utility detecting number of disks&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2b. The configuration utility detects the number of virtual disks&lt;/em&gt;&lt;/small&gt;
&lt;img src=&quot;/images/dellperc6i/002_perc_prompt2.jpeg&quot; alt=&quot;Configuration utility ready to load&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2c. Finally the configuration utility is loading&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/002_perc_controller.jpeg&quot; alt=&quot;Configuration utility Controller screen&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 2d. Configuration utility controller screen&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Navigate to the &lt;code class=&quot;highlighter-rouge&quot;&gt;VD Mgmt&lt;/code&gt; option in the configuration utility. In our server, we have one PERC Controller, denoted by &lt;code class=&quot;highlighter-rouge&quot;&gt;Controller 0&lt;/code&gt; in &lt;em&gt;Figure 3a&lt;/em&gt;. Since we already have two virtual drives setup, we can see two disk groups each with their own virtual disks as in &lt;em&gt;Figure 3b and 3c&lt;/em&gt;. In our configuration, each virtual drive has 2 500GB SSDs in a RAID-1 configuration working effectively as a single 500GB, which is shown as 465.250GiB (Gibibyte not Gigabyte) in the images.&lt;/p&gt;

&lt;p&gt;You must use the keyboard arrow keys to navigate the tree view. I do not recommend using a mouse even if the mouse works.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/003_perc_console_ctrl0.jpeg&quot; alt=&quot;Controller 0&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3a. &lt;code class=&quot;highlighter-rouge&quot;&gt;Controller 0&lt;/code&gt;&lt;/em&gt;&lt;/small&gt;
&lt;img src=&quot;/images/dellperc6i/003_perc_console_vd0.jpeg&quot; alt=&quot;Virtual Disk 0&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3b. &lt;code class=&quot;highlighter-rouge&quot;&gt;Virtual Disk 0&lt;/code&gt;&lt;/em&gt;&lt;/small&gt;
&lt;img src=&quot;/images/dellperc6i/003_perc_console_vd1.jpeg&quot; alt=&quot;Virtual Disk 1&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 3c. &lt;code class=&quot;highlighter-rouge&quot;&gt;Virtual Disk 1&lt;/code&gt;&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: In &lt;strong&gt;Step 1&lt;/strong&gt;, we reminded you to add the new physical drives that you want to add to the existing controller. Navigate to the &lt;code class=&quot;highlighter-rouge&quot;&gt;PD Mgmt&lt;/code&gt; (physical disk management) screen. We assume you have done that as shown in &lt;em&gt;Figure 4&lt;/em&gt;, where you can see additional two disks that &lt;em&gt;do not&lt;/em&gt; have a &lt;code class=&quot;highlighter-rouge&quot;&gt;DG&lt;/code&gt; (disk group) column value. This means they have not been setup yet and that’s what we are going to do next. This is also a positive sign that you have installed the physical disks correctly in the server.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/004_check_physical_disks.jpeg&quot; alt=&quot;Check the physical disks&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 4. Check the physical disks in the &lt;code class=&quot;highlighter-rouge&quot;&gt;PD Mgmt&lt;/code&gt; view&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5a&lt;/strong&gt;: Navigate back to the &lt;code class=&quot;highlighter-rouge&quot;&gt;VD Mgmt&lt;/code&gt; (virtual disk management) screen, highlight &lt;code class=&quot;highlighter-rouge&quot;&gt;Controller 0&lt;/code&gt; and hit &lt;code class=&quot;highlighter-rouge&quot;&gt;F2&lt;/code&gt; to get the &lt;code class=&quot;highlighter-rouge&quot;&gt;Create New VD&lt;/code&gt; menu option as shown in &lt;em&gt;Figure 5a&lt;/em&gt;. Press the &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; key.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/005_create_new_vd.jpeg&quot; alt=&quot;Create New VD&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5a. Create New VD menu option&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5b&lt;/strong&gt;: When you press the &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; key a new screen appears. This screen lists the physical drives that are not part of any disk group and allows you to select the RAID configuration you want. In my case I wanted the &lt;code class=&quot;highlighter-rouge&quot;&gt;RAID-1&lt;/code&gt; configuration as shown in &lt;em&gt;Figure 5b&lt;/em&gt;. However, maybe you just want to use &lt;code class=&quot;highlighter-rouge&quot;&gt;RAID-0&lt;/code&gt; to maximize the disk space available to you. If that’s the case, you should select &lt;code class=&quot;highlighter-rouge&quot;&gt;RAID-0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/005_select_raid-1.jpeg&quot; alt=&quot;Select RAID-1&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5b. Select &lt;code class=&quot;highlighter-rouge&quot;&gt;RAID-1&lt;/code&gt; Option&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5c&lt;/strong&gt;: If you are using &lt;code class=&quot;highlighter-rouge&quot;&gt;RAID-1&lt;/code&gt;, select two physical disks to be part of this virtual disk that you are creating. If you are using &lt;code class=&quot;highlighter-rouge&quot;&gt;RAID-0&lt;/code&gt; select one physical disk. You may use the &lt;code class=&quot;highlighter-rouge&quot;&gt;Tab&lt;/code&gt; key to navigate and press the &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; key to select a disk.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/005_select_raid_disks.jpeg&quot; alt=&quot;Select physical disks&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5c. Select physical disks&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5d&lt;/strong&gt;: Now that you have selected your physical disks, navigate to the &lt;code class=&quot;highlighter-rouge&quot;&gt;OK&lt;/code&gt; button on the far right of the screen (as shown in &lt;em&gt;Figure 5d&lt;/em&gt;) and press &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt;. You will then see a prompt as in &lt;em&gt;Figure 5e&lt;/em&gt; and you must press &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; again. That will bring you back to the &lt;code class=&quot;highlighter-rouge&quot;&gt;VD Mgmt&lt;/code&gt; screen and you should see a new &lt;em&gt;virtual disk&lt;/em&gt; created. In our case, in &lt;em&gt;Figure 5f&lt;/em&gt;, you can see &lt;code class=&quot;highlighter-rouge&quot;&gt;Virtual Disk 2&lt;/code&gt; has been created. You can see the properties of the disk on the right hand side column.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/005_complete_selection_hit_ok.jpeg&quot; alt=&quot;Navigate to the OK button&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5d. Navigate to the &lt;code class=&quot;highlighter-rouge&quot;&gt;OK&lt;/code&gt; button&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/005_hit_ok_on_prompt.jpeg&quot; alt=&quot;Press Enter when prompted&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5e. Press &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; when prompted&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/005_perc_console_vd2.jpeg&quot; alt=&quot;New virtual disk created&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 5f. New virtual disk has been created&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6a&lt;/strong&gt;: Now we need to initialize the virtual disk. Press &lt;code class=&quot;highlighter-rouge&quot;&gt;F2&lt;/code&gt; and access the initialization menu as shown in &lt;em&gt;Figure 6a&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/006_vd2_initialization.jpeg&quot; alt=&quot;Initialization menu for the new virtual disk&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6a. Initialization menu for the new virtual disk&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6b&lt;/strong&gt;: You can choose to perform slow initialization, but since these are new drives a &lt;em&gt;fast initialization&lt;/em&gt; is good enough. You can then update the file system from within the operating system of the server directly and that will save time. Fast initialization takes a few seconds whereas slow initialization can take hours. We select the &lt;code class=&quot;highlighter-rouge&quot;&gt;Fast Init.&lt;/code&gt; option as shown in &lt;em&gt;Figure 6b&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/006_vd2_fast_init.jpeg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6b. Select &lt;code class=&quot;highlighter-rouge&quot;&gt;Fast Init.&lt;/code&gt; option&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6c&lt;/strong&gt;: The utility then displays a prompt as shown in &lt;em&gt;Figure 6c&lt;/em&gt;, and you should select &lt;code class=&quot;highlighter-rouge&quot;&gt;Yes&lt;/code&gt; and press &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt;. &lt;em&gt;Figures 6d and 6e&lt;/em&gt; show the progress of the initialization till it completes. Once completed, press &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; on the prompt and you should arrive at &lt;em&gt;Figure 6f&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/006_vd2_init_prompt_yes.jpeg&quot; alt=&quot;Select Yes on the prompt&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6c. Select &lt;code class=&quot;highlighter-rouge&quot;&gt;Yes&lt;/code&gt; on the prompt&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/006_vd2_init_processing_49.jpeg&quot; alt=&quot;Initialization in Progress&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6d. Initialization is in progress&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/006_vd2_init_processing_completed.jpeg&quot; alt=&quot;Initialization has completed&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6e. Initialization has completed&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/006_vd2_menu.jpeg&quot; alt=&quot;Back to VD Mgmt menu&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 6f. Back to &lt;code class=&quot;highlighter-rouge&quot;&gt;VD Mgmt&lt;/code&gt; menu&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;: Press &lt;code class=&quot;highlighter-rouge&quot;&gt;Esc&lt;/code&gt; or &lt;code class=&quot;highlighter-rouge&quot;&gt;F12&lt;/code&gt; to exit the configuration utility and press &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; on the &lt;code class=&quot;highlighter-rouge&quot;&gt;OK&lt;/code&gt; prompt as shown in &lt;code class=&quot;highlighter-rouge&quot;&gt;Figure 7&lt;/code&gt;.
&lt;img src=&quot;/images/dellperc6i/007_menu_exit.jpeg&quot; alt=&quot;Press Enter to Exit the menu&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 7. Exit the configuration utility&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;: Once you exit the configuration utility, you are presented with the screen in &lt;em&gt;Figure 8&lt;/em&gt; asking you to press &lt;code class=&quot;highlighter-rouge&quot;&gt;Ctrl Alt Del&lt;/code&gt; to reboot the server.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/dellperc6i/008_reboot_message.jpeg&quot; alt=&quot;Press Ctrl Alt Del to reboot&quot; loading=&quot;lazy&quot; /&gt;
&lt;small&gt;&lt;em&gt;Figure 8. Press &lt;code class=&quot;highlighter-rouge&quot;&gt;Ctrl Alt Del&lt;/code&gt; to reboot&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;: Once your server boots up into your operating system you must add the newly created virtual drive to the OS for use.
If you are using Windows, you are on your own. If you are using a form of Debian/Ubuntu Linux, below are some helpful instructions. The output of each instruction is not shown here, but it is assumed you will &lt;a href=&quot;https://en.wikipedia.org/wiki/RTFM&quot;&gt;RTFM&lt;/a&gt;. This assumes you are running &lt;code class=&quot;highlighter-rouge&quot;&gt;LVM&lt;/code&gt; which if you are not, then ask yourself &lt;strong&gt;why&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;### login as root ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;su - root
&lt;span class=&quot;c&quot;&gt;### scan for disks to verify that newly created disks show up###&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### a virtual drive will appear as a single physical disk ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;pvscan
&lt;span class=&quot;c&quot;&gt;### find the new drive device number ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;fdisk &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### let us assume the new virtual drive is /dev/sdc since we already have 2 others installed before ###&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### create a new physical volume ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;pvcreate &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; /dev/sdc
&lt;span class=&quot;c&quot;&gt;### scan for LVM virtual drive groups and find the virtual group name ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;vgscan
&lt;span class=&quot;c&quot;&gt;### add the physical volume to the existing virtual group named &quot;server-vg&quot; in our case. ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;vgextend server-vg /dev/sdc
&lt;span class=&quot;c&quot;&gt;### verify that the physical volume got added to the virtual group ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;vgscan
&lt;span class=&quot;c&quot;&gt;### note the current size of disk drives in the logical volume ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;lvscan
&lt;span class=&quot;c&quot;&gt;### now extend the logical volume to the newly added physical drive ###&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### in your case the logical volume path must be taken from the output of lvscan or vgscan ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;lvextend &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt; +100%FREE /dev/server-vg/root
&lt;span class=&quot;c&quot;&gt;### verify that the logical volume has the correct size of disk ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;lvscan
&lt;span class=&quot;c&quot;&gt;### resize the file system to the newly added disk space ###&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### the name of the device here could be found in the output of lvscan or df ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;resize2fs &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /dev/mapper/server--vg-root
&lt;span class=&quot;c&quot;&gt;### verify the sizes&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;df&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-h&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### you are done, and can optionally reboot ###&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Once your server boots into the operating system that is installed, follow instructions for your operating system of choice to add the newly created virtual drive to your system and start using it.&lt;/p&gt;
</description>
        <pubDate>Wed, 20 Oct 2021 00:00:00 -0400</pubDate>
        <link>https://www.vikaskumar.org/2021/10/20/dell-perc6i-virtual-disk-raid-setup.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2021/10/20/dell-perc6i-virtual-disk-raid-setup.html</guid>
        
        
        <category>tools</category>
        
      </item>
    
      <item>
        <title>MINIMIZING RISK WHEN CHOOSING A RESEARCH LAB FOR PhD</title>
        <description>&lt;p&gt;Applying to universities with good PhD programs is only a third of the application process. Most students end up ignoring what is considered a “good” advisor and assume their achievements (&lt;em&gt;GPA, publications, winning your March Madness bracket, blah blah blah, what have you&lt;/em&gt;) will automatically garner them that baller PhD advisor. As PhD Comics often states, selecting the right advisor is like being in a long-term relationship. If you ask me, it is more like arranged marriage – find the word on the block about your future spouse’s family, and then meet and question your future spouse.&lt;/p&gt;

&lt;p&gt;Ending up with a well-funded advisor is not a draw of luck but about doing your homework smartly on the advisor and the PhD program. How do you end up with a good advisor (&lt;em&gt;I didn’t want to be stuck taking care of their dog while they are in Magens Bay for some conference. True Story.&lt;/em&gt;) and in a good research lab (&lt;em&gt;Not doing support/maintenance/code-monkey IT work but doing actual research, the entire reason I am there for&lt;/em&gt;)?&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;When I decided to pursue a PhD while working as a software engineer for a year at a major corporation, I didn’t want to get off on the wrong foot in my PhD program, be in a bad situation, and end up bitching (&lt;em&gt;nicely, of course&lt;/em&gt;) about my disastrous PhD experience on some forum or blog. Instead, I opted to do research – research on the programs I was interested in – the professors, their peers, their funding, their citations, and their graduate students. I wanted to minimize risk and avoid bad situations that plague some PhD students. I have split this blog post into two sections (&lt;em&gt;like an engineering publication&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;The first section details the process involved in finding the &lt;code class=&quot;highlighter-rouge&quot;&gt;rich&lt;/code&gt; advisor. The second section is about interviewing your prospective advisor when they invite you for a campus visit at their university. A lot of these thoughts and questions are logical but I have come across too many prospective PhD students who fail to do their research and homework on their advisor, their funding situation, and the PhD program. Then, they complain about how life is hard because they didn’t do their due diligence and got duped.&lt;/p&gt;

&lt;h2 id=&quot;word-on-the-block&quot;&gt;WORD ON THE BLOCK&lt;/h2&gt;

&lt;p&gt;Finding a university program and a professor whose interest matched mine wasn’t difficult, US News College Rankings list is a decent place to start, though some schools are known for X field more than A-Z fields and this doesn’t get reflected in those rankings. I will go over my process of finding a good professor (&lt;em&gt;with funding&lt;/em&gt;) in my field and contacting them. Funding was the top priority for me as a PhD student (&lt;em&gt;should be everyone’s&lt;/em&gt;). My process might be skewed towards the engineering discipline.&lt;/p&gt;

&lt;h3 id=&quot;citations&quot;&gt;CITATIONS&lt;/h3&gt;

&lt;p&gt;This is obvious, I quickly searched a professor’s name on Google Scholar to see how well they have been cited and what they are known for. I stayed away from advisors that published in mediocre to bad journals and conferences or are one hit wonders. If they are well cited and publish in top peer-reviewed journals/conferences frequently, they are more likely to have some kind of funding.&lt;/p&gt;

&lt;h3 id=&quot;funding&quot;&gt;FUNDING&lt;/h3&gt;

&lt;p&gt;NIH and NSF make it easy to find out the funding situation of a professor. NIH’s Project Reporter reveals how much funding a professor has and the duration of their project. NSF has a similar tool called Award Search. I used these tools exhaustively to find out funding track records of the professor I was interested in. I didn’t want to be a TA forever because my advisor had no money, which would be indicative that they aren’t producing anything novel in their research field.&lt;/p&gt;

&lt;p&gt;Another great way to find out about a professor’s funding is to read the &lt;code class=&quot;highlighter-rouge&quot;&gt;Acknowledgements&lt;/code&gt; section in their most recent publication. Not only it helped me skim through a professor’s most-recent publication but it also hinted at their funding sources, and then I used Google (&lt;em&gt;I’ve learned a lot by using Google and Wikipedia, and stopped assuming how the world works&lt;/em&gt;). It is amazing how many prospective students I meet that do not research their future advisors and are choosing to do research in their prime (&lt;em&gt;Research Fail&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;The offer letters I received, generally after being admitted into a PhD program and before the university visit, told me precisely if funding for all my PhD years were guaranteed as a combination of Research Assistantship or Teacher’s Assistantship (&lt;em&gt;TA&lt;/em&gt;). One school asked me to pay tuition for the first semester so I could “settle in” and then find a research group to fund me (&lt;em&gt;What a joke, no one in the right mind should even consider this trap&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;PhD dissertations available on ProQuest or other free library sources from the professor’s lab can be helpful in understanding the direction of their research lab and possibly, what will be the next set of funding related to.&lt;/p&gt;

&lt;h3 id=&quot;collaborators&quot;&gt;COLLABORATORS&lt;/h3&gt;

&lt;p&gt;When looking at research labs, I put an emphasis on finding that research lab’s professor’s collaborators. The more collaborators an advisor has, the more outgoing, organized, courteous, and respected they are amongst their colleagues. Outgoing is very important as holding editorial positions, getting funding (&lt;em&gt;someone who you networked with might review your grant submission or critique your publication&lt;/em&gt;), and recognition works purely on networking. Also, if the advisor runs out of funding or can’t fund me, then I could piggyback on their collaborator’s projects and still get a stipend. (&lt;em&gt;Wow, this is how it exactly happened and I ended up with two advisors&lt;/em&gt;). I searched a professor’s name in social-networking sites such as Biomed Experts (&lt;em&gt;Research Gate, Academia.edu, Zotero, and Mendeley are the newer ones&lt;/em&gt;) to get an idea of whom they are collaborating with. Google Scholar also helped me find a professor’s co-authors/collaborators.&lt;/p&gt;

&lt;h3 id=&quot;acclaims&quot;&gt;ACCLAIMS&lt;/h3&gt;

&lt;p&gt;Advisors that are renowned tend to have funding as well. An easy way to find out if the professor is well regarded in their respective fields is to look for their title in societies such as IEEE and ACM. The title is indicative of how their peers view the professor’s work. This may not be valid for young professors. Professor’s CV (&lt;em&gt;found on their website or Google&lt;/em&gt;) also discloses their funding and if they are reviewers/editors of prominent journals and conferences. This means they are acclaimed.&lt;/p&gt;

&lt;p&gt;I searched for the titles of professors in societies such as IEEE and ACM to figure out if they are well regarded in their field. The title indicated how their peers viewed their work. Though, I did realize that this might not be valid for young professors who are not tenured yet.&lt;/p&gt;

&lt;h3 id=&quot;contact&quot;&gt;CONTACT&lt;/h3&gt;

&lt;p&gt;After doing my homework on a prospective advisor, I had to email them to find out if they are looking for any students to join their research labs. I didn’t want to join a PhD program just to find out that the advisor I want to work with has a full lab or is going on sabbatical or even worse, has no funding next year. I threaded a polite and succinct email that could be read on a smartphone i.e. all text, no random PDFs of my CV attached to the email or zip files of my project (&lt;em&gt;lol, who does that?&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;My email to an advisor was simple:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;quick introduction of myself including my name, my degree at the university I attended, and my interest in their university’s program,&lt;/li&gt;
  &lt;li&gt;my goal for PhD such as “specialize in computer vision techniques,”&lt;/li&gt;
  &lt;li&gt;a listing of two my most relevant projects and courses,&lt;/li&gt;
  &lt;li&gt;mention that I was seeking admission into their program and asked if they were accepting new PhD students in their group,&lt;/li&gt;
  &lt;li&gt;a link to my website showcasing all my projects in undergrad/Masters,&lt;/li&gt;
  &lt;li&gt;signed off the email sincerely and inserted a 10-line text form of my concise CV, which ended with a link to my website.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With this type of email format, I got a 65% response rate from all the professors I contacted at different universities and I had two phone interviews before I applied to their programs, despite having no publications to my name.&lt;/p&gt;

&lt;p&gt;(&lt;strong&gt;There could be a better format&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;In my statement of purpose for a university’s application, I mentioned all the professors that were taking new students (&lt;em&gt;Obviously, I wouldn’t apply to Prof. Cuervo’s lab at University of Margaritaville if he isn’t taking any students this year. Applications are expensive. GRE scores are sent to a university on a disc by the ETS. Each disc contains 100s of student scores and yet, they charge $20 per student for sending their scores to 1 university. It’s a rip-off.&lt;/em&gt;). Once I applied to their PhD program, I wrote another concise email asking them to follow up on my application.&lt;/p&gt;

&lt;h2 id=&quot;casual-waterboarding&quot;&gt;CASUAL WATERBOARDING&lt;/h2&gt;

&lt;p&gt;I treated this as the most important part of the process of selecting my advisor. Once I got invited to visit a university, the chances are I was already admitted. Some schools had already sent me my admissions/offer letter for PhD. During these visits, I met with several possible professors and they all tried recruiting me into their research labs (&lt;em&gt;yay!&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Well, there were a couple of professors who ignored me, and I ignored them too. (&lt;em&gt;Mutual ignorance breeds mutual distrust – Andrew Carnegie, Wealth, 1889&lt;/em&gt;). Contrary to popular belief, the ball was in my court and not in the professor’s. I didn’t have to impress them (&lt;em&gt;I am already visiting!&lt;/em&gt;), but they had to impress me. It was time to find out the word on the block about these professors and question their operations. It’s always surprising to meet prospective PhD students who do not ask these seemingly logical questions (&lt;em&gt;because they are nervous or scared to ask their future advisor and start their PhD by being a goat&lt;/em&gt;) and risk getting screwed over in their PhD.&lt;/p&gt;

&lt;p&gt;During my visit, I interrogated the professors with these questions listed below (&lt;em&gt;by no means this list is exhaustive&lt;/em&gt;). I figured professors who are disciplined will answer all my questions really well and this is a great sign of the ideal advisor. It is evident that research requires discipline – solving a problem for years, publishing, collaborating, writing grants, networking, logistics, and managing graduate students. Any professor that tried to circle around my question I became skeptical of (&lt;em&gt;and believe me, there were a few of them&lt;/em&gt;).&lt;/p&gt;

&lt;h3 id=&quot;questions-to-ask-your-future-advisor&quot;&gt;QUESTIONS TO ASK YOUR FUTURE ADVISOR&lt;/h3&gt;

&lt;p&gt;I asked these questions casually with a smile on my face, while I interspersed them with related questions about the professor’s research. It has to be salt-and-pepper, can’t just outright interrogate your future advisor (&lt;em&gt;not pulling nails – insert clip of best movie interrogation scene – Syriana&lt;/em&gt;). Professors I met gave me a little glimpse into their research and current projects, which helped me ask more questions about their research. This helped me with the salt-and-pepper process. Professors are not going to eat me for asking these questions. Actually, they are genuinely nice.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What is the attrition rate? How many graduate students join this university’s PhD program and how many leave with a PhD degree?&lt;/em&gt; Almost most professors I talked with gave me different answers but I understood if the PhD program is survivable.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What journals and conferences do you publish in?&lt;/em&gt; Look out for top names and match them with Google Scholar. One of the professors I met with lied.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What is the publication rate for PhD students?&lt;/em&gt; A good/disciplined advisor will say something to the effect of “I’d like it if they could publish at least once a year, but sometimes they end up publishing 2 in one year and nothing in another. It’s logistics at times.”&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Is there funding for your PhD students to attend national/international conferences if they get a paper accepted in? Can they still go to the conference if they don’t submit anything to it?&lt;/em&gt; This question told me if the advisor likes sending their students to attend conferences regardless if they had papers or not. If they send their students to conferences who don’t have any papers, then they care about their student’s research development. Jackpot.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Does this PhD program hold any seminar series or does your group hold any journal clubs?&lt;/em&gt; If the program I am looking at holds seminar series and has professors from other schools giving talks, then the program is well regarded. If the research lab holds a journal club, then the professor has enough time to be up to date on new research breakthroughs. I didn’t want to end up with a professor who uses techniques from the 80s-90s, its bad for developing novel techniques – the entire point of doing research in the first place.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What is the time-to-degree for a PhD student in your research lab?&lt;/em&gt; This was the most important question I asked, and I carefully watched the professor’s reaction to it. Some professors gave me a straight answer, “usually my students take 4-5 years.” This means the professor is disciplined making sure you graduate with all your requirements in time, and will not make you solve something practically impossible like invent a pokéball. One of the professors I met with answered with “it depends on the student and their research.” Surely this is true, but it also means that this professor will never be happy with you even if you do catch ‘em all. Tsk, tsk, bad sign.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Have any of your students left your research lab without a PhD?&lt;/em&gt; This is a killer question and professors hate it, probably because it brings back irreconcilable differences with one (&lt;em&gt;or many&lt;/em&gt;) of their students. It’s a behavioral question. Look out for sighs or an angry/nervous face for asking that question. One of the professors sighed, “this is a good question… sometimes I have funding issues.” Bam!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What are the major grants you received?&lt;/em&gt; I wanted to know if the professor is applying for new grants or renewing old ones. I already know if they have money based on NSF/NIH grant search tools. This question also gave me an idea of what I could possible be working on for my dissertation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;How many students do you advise? How are they financed? Do your advisees get the TA if you don’t have funding?&lt;/em&gt; I asked this question to find out if I would still get a stipend when research funding ran out. One professor said that the department assigned the TA for their class – bad sign. I didn’t want to starve or behave like this (&lt;em&gt;Simpsons gif&lt;/em&gt;). If the professor has too many students, they will be super-busy – I would most likely be on my own when solving research problems and the advisor won’t care for obstacles/limitations of my solution. They might only care to publish. After all, I am entering a “publish or perish” world.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Where do students go after getting their PhD from your research lab? How do they find this job placement?&lt;/em&gt; I wanted to know if the professor had any industry connections. If the professor says that most of their students end up doing post-doc, then either they have no connections or their students really want to be in academia. A quality research lab will have students placed in all types of industries.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;How do I join your research lab? Do I have to take your class or do an independent project?&lt;/em&gt; I got a variety of different answers from professors because they all do things differently. I tried to minimize risk here. Here are some answers I got and my skeptical thoughts on them. “You need to get an A in my class” – what if you are a bad professor or hate my guts and give me an A-, can I still join because I have research potential? “You need to do an independent project with me” – so I work for you for free and then you can reject me unless I get you a publication out of this independent project (&lt;em&gt;International students fall prey to this one&lt;/em&gt;). “You can start out as a TA, work on an independent project that we can decide on, and then based on your interest you can sign onto a research project” – what a brilliant answer, gives me hope that this advisor is willing to reconcile any differences with me.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;cross-checking-with-other-graduate-students&quot;&gt;CROSS CHECKING WITH OTHER GRADUATE STUDENTS&lt;/h3&gt;

&lt;p&gt;This was an eye opening process for me. Asking similar questions to the graduate students of a professor’s lab brought out inconsistencies in the professor’s answers. Obviously, I believed the graduate students more so than the professor – how can you ever beat first-hand experience? I always met with the graduate students of the professor that I was interested in, typically, over lunch or dinner. They also told me about how the department is run, which can be important sometimes. I am surprised how much the administrative assistant helps me with my paperwork for conferences or the PhD program. Looking back, I can see that a department was disorganized based on how they organized the visit for prospective PhD students to their program. The graduate students that I met during my visit were always candid about their answers.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What is this city/town (_where the university is located&lt;/em&gt;) like? Do you socialize with other graduate students?_ I asked this question to find out if these graduate students of the professor that I am interested in stay in lab all day and night. If they know places around the city/town, they are more likely to do other things on the weekend besides research work. I’ve had blank responses and enthusiastic responses such as “downtown is lively, rock climbing is fun on the weekends, and we go to happy hours sometimes.” Happy hours are during the weekdays – most of the graduate students in that lab leave at a good time such as 6pm.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;If you hit roadblocks in your research, who rescues you?&lt;/em&gt; Presumably, it will be your advisor but I got answers similar to “sometimes the professor will help you.” This gave me an idea how closely the professor works with their graduate students. One graduate student complained about how their advisor didn’t have any advice for them because they are too busy trying to grab funding and/or build their networks or they seem out of touch with newer techniques.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What is the worst part about this department and the research lab? Which professors should I stay away from?&lt;/em&gt; I processed any answer I got from the graduate students. A few of them complained about lack of socials. Surprisingly, a couple of graduate students said that the professor I was interested in was kind of a jerk. Obviously, I didn’t join that lab.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Does your advisor prefer you to figure out solutions and then present to them? Or do they want you to discuss possible approaches with them first and then come up with a solution? Or do they just want you to follow their idea and solution?&lt;/em&gt; Working with different professors in undergrad and during my Masters, I wanted to know the working style of the professor and find out if it matched my style. Also, I didn’t want to be in a lab where the professor made me follow his solution and wasn’t open to any new suggestions. I experienced this in my Masters, where the professor’s solution failed and he had no way to backtrack on it, and I ended up wasting 4 months on something that didn’t work (&lt;em&gt;Hurray!&lt;/em&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Would you have picked a different school or a different advisor?&lt;/em&gt; Most graduate students said they wouldn’t pick a different school and highlighted the strengths of the program or their advisor’s research. Some students had mentioned how they switched advisors and this was good for me to know that it was possible.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;How often do you publish? Do you go to conferences even if you don’t have a paper submitted?&lt;/em&gt; I asked this question to figure out if the professor’s answer was consistent with what their graduate students said.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Has anyone quit PhD out of your research lab?&lt;/em&gt; Again, trying to figure out inconsistencies with the professor’s answer, plus, the graduate students gave me more information as to why someone left their lab.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;What is the funding like? How many times did you have to be a TA so far?&lt;/em&gt; For one program, the graduate students gave me different answers than what their professor gave me – “I’ve been a TA 3 times in 4 semesters because the professor’s grant application was rejected.” Usually, their answers matched.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Is your advisor up to date on techniques in their field?&lt;/em&gt; I figured all graduate students would unanimously say “yes.” On the contrary, almost everyone said “no.” Most advisors tend to be busy and they rely on their graduate students to keep up to date. In my experience, young advisors are up to date with new techniques. This is important because publishing in top -journals requires some novelty factor to the methods.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;How did you join your research lab? Did you take your advisor’s class or do an independent project to prove to them that you wanted to be part of their lab?&lt;/em&gt; Again, looking for consistencies and possible cover-ups.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Where do students go after getting their PhD from this research lab?&lt;/em&gt; I wanted to see if the alumni of the research lab do post-doc because they have no industry offers (&lt;em&gt;speaks poorly of the program and the advisor’s industry connections&lt;/em&gt;) or if they are genuinely interested in academia.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;How long, on average, does it take for a graduate student to graduate from your research lab?&lt;/em&gt; There were a lot of inconsistent answers here. Some graduate students said that it took a few students 7 years to graduate, while their professor told me 5 years (&lt;em&gt;probably quoting the minimum number of years, lol&lt;/em&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Do you co-author any papers?&lt;/em&gt; I think if you co-author papers, you do have more papers but they are still not first-author, which is worth more for your PhD success. Co-authoring papers could take up unnecessary time and prolonging graduation time. If the graduate students all were required to co-author papers, I correlated that with their lab’s time-to-degree statistic.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;How long do advisors take to review your manuscript for a conference/journal or does it collect dust on their desk?&lt;/em&gt; I wish I asked this question because this scenario bit me in the ass. I wrote a journal paper that collected dust for 10 months, it finally got published after a lot of pestering (&lt;em&gt;my advisor’s name wasn’t on that project’s grant so he didn’t care for the manuscript&lt;/em&gt;). Also, if an advisor replies with their comments for a conference paper that has a deadline the next day, then I’d be pulling all-nighters. All-nighters are unhealthy, totally doable, and give a fake sense of progress.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;Do they respond to your email?&lt;/em&gt; I have worked with some professors who did not understand the concept of replying to emails. What a waste of time working for them, not replying to work-related emails is negative productivity for all parties involved. I have had professors say to me “I got your email” (&lt;em&gt;and, that’s
it? I don’t need an acknowledgement from you telling me that Gmail worked&lt;/em&gt;). It was easy for me to know which professor was on top of their inbox based on their response to my initial contact email prior to applying to their PhD program (see &lt;a href=&quot;#contact&quot;&gt;Section&lt;/a&gt;). Responding to emails can set up meetings in which progress can be made!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;How often do you have status meetings?&lt;/em&gt; I wanted to work with a professor who had regular status meetings. These meetings would allow active discussions about research solutions, show them that I am not slacking off (&lt;em&gt;gain their trust&lt;/em&gt;), keeps the advisor in the loop, and above all, help with my PhD progress.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;discussion--conclusions&quot;&gt;DISCUSSION &amp;amp; CONCLUSIONS&lt;/h2&gt;

&lt;p&gt;Every publication has an end discussing possible limitations of the presented methods and future research directions. Doing my research when selecting a PhD research group helped me avoid some bad situations in my PhD experience that could’ve dried out all my enthusiasm for research.&lt;/p&gt;

&lt;p&gt;Hope this has been useful to the reader in figuring out how to select a good advisor for their PhD and good luck!&lt;/p&gt;

</description>
        <pubDate>Thu, 07 Oct 2021 00:00:00 -0400</pubDate>
        <link>https://www.vikaskumar.org/2021/10/07/phd-minimizing-risk-research-lab.html</link>
        <guid isPermaLink="true">https://www.vikaskumar.org/2021/10/07/phd-minimizing-risk-research-lab.html</guid>
        
        
        <category>advice</category>
        
      </item>
    
  </channel>
</rss>
