<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5676800651702180760</atom:id><lastBuildDate>Wed, 06 Nov 2024 02:43:26 +0000</lastBuildDate><category>Tutorials</category><category>DRM</category><category>Homelab</category><category>Blogger</category><category>Calibre</category><category>Apple</category><category>eBooks</category><category>iTools</category><category>iPhone</category><category>CSS</category><category>iPad</category><category>AirDrop</category><category>Linux</category><category>iPod</category><category>Amazon</category><category>Android</category><category>Cydia</category><category>ERP</category><category>Jailbreak</category><category>Odoo</category><category>eReaders</category><category>Affiliate</category><category>Blogging</category><category>GitHub</category><category>Jekyll</category><category>Make-Money-Online</category><category>OpenWrt</category><category>Pi-Hole</category><category>Raspberry-Pi</category><category>Requiem</category><category>SEO</category><category>VPN</category><category>pfSense</category><category>Adsense</category><category>Debian</category><category>HTML</category><category>JavaScript</category><category>JekySimple</category><category>Kindle Fire</category><category>SMO</category><category>Technology</category><category>iTunes</category><title>iSmooth Blog</title><description>We spread, broadcast and share technical knowledge.</description><link>http://www.ismoothblog.com/</link><managingEditor>noreply@blogger.com (Saleem Almajed)</managingEditor><generator>Blogger</generator><openSearch:totalResults>73</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-6746786836222034219</guid><pubDate>Thu, 10 Jun 2021 17:12:00 +0000</pubDate><atom:updated>2021-06-10T13:47:43.963-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>Generate Root Certificates Compliant with Apple Requirements</title><description>&lt;p&gt;To be honest, I recently digged into my &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot; target=&quot;_blank&quot;&gt;Homelab&lt;/a&gt; and I repurposed my good old &lt;a href=&quot;https://wiki.odroid.com/odroid-xu4/odroid-xu4&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;ODROID-XU4&lt;/a&gt; with &lt;code class=&quot;micro&quot;&gt;Ubuntu 20.04&lt;/code&gt; and configured it as a &lt;b&gt;Bitwarden&lt;/b&gt; server on some Docker containers to provide a secure password management service for my network devices.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyBVPSEnFisyCRtYfJmUiiWjpUhfHumN3sU0eG7ShqLGKPGGX55CNRzvq7Kl8imvcFeH01SwLkgfMBpry7m3_LmdlEV3WqrqLQg431d4P1LB6A3g1hFkUVsFPz9p4UdzmCwdFjTNGJroE/s640/digital-ssl-certificates.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;427&quot; data-original-width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyBVPSEnFisyCRtYfJmUiiWjpUhfHumN3sU0eG7ShqLGKPGGX55CNRzvq7Kl8imvcFeH01SwLkgfMBpry7m3_LmdlEV3WqrqLQg431d4P1LB6A3g1hFkUVsFPz9p4UdzmCwdFjTNGJroE/s320/digital-ssl-certificates.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Today, we&#39;re going to learn how to properly generate self-signed &lt;b&gt;Trusted Root Certificates&lt;/b&gt; with &lt;b&gt;OpenSSL&lt;/b&gt; meeting the &lt;a href=&quot;https://support.apple.com/en-us/HT210176&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;requirements of Apple&lt;/a&gt; for iOS 13 or macOS 10.15 and newer versions, including the upcoming &lt;b&gt;iOS 15&lt;/b&gt; and so on.&lt;/p&gt;
&lt;p&gt;Apparently, one of my client devices happens to be an &lt;b&gt;Apple iPhone 7&lt;/b&gt; running on &lt;b&gt;iOS 14&lt;/b&gt; which is actually requiring strict standards for &lt;b&gt;Downloaded Certificate Profiles&lt;/b&gt; in order to be installed properly as a &lt;code class=&quot;micro&quot;&gt;Trusted Root Certificate&lt;/code&gt; and that&#39;s when I had to figure it all out.&lt;/p&gt;
&lt;h2&gt;Create OpenSSL Configuration File&lt;/h2&gt;
&lt;p&gt;That&#39;s like the magic touch for this particular tutorial, please note that I am running &lt;b&gt;Ubuntu 20.04&lt;/b&gt; on my micro server but it really doesn&#39;t matter which &lt;b&gt;Linux/Unix&lt;/b&gt; distribution you are running on your end.&lt;/p&gt;
&lt;p&gt;You can SSH into the terminal of your server on any device, enter the commands below.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;cd ~/&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;nano bitwarden.cnf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Change &quot;bitwarden&quot; to the name of your project, that&#39;s going to create a configuration file needed for certificate generation as a result please input the following.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[ req ]
default_bits           = 4096
default_md             = sha512
prompt                 = no
encrypt_key            = no
distinguished_name     = req_distinguished_name
x509_extensions        = usr_cert

[ req_distinguished_name ]
countryName            = &quot;US&quot;                        # Two Digit Country Code
stateOrProvinceName    = &quot;California&quot;                # State or Province Name
organizationName       = &quot;Perpetual Technologies&quot;    # Organization Name
commonName             = &quot;Bitwarden&quot;                 # Project or Domain Name (FQDN)
emailAddress           = &quot;your-name@gmail.com&quot;       # Any Email Address

[ usr_cert ]
basicConstraints       = critical, CA:true, pathlen:0
nsCertType             = sslCA
keyUsage               = digitalSignature, keyEncipherment
extendedKeyUsage       = serverAuth, clientAuth
nsComment              = &quot;OpenSSL CA Certificate&quot;
subjectAltName         = @alt_names

[alt_names]
DNS.1                  = localhost    # Local Hostname or Public Domain Name
IP.1                   = 127.0.0.1    # Local or Public IP Address&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here comes the important part, you have to adapt with the parameters commented above according to your preferences and requirements.&lt;/p&gt;
&lt;p&gt;If you are going to use this certificate on a server that has an actual local hostname or public domain name please change &lt;code class=&quot;micro&quot;&gt;localhost&lt;/code&gt; to match your case.&lt;/p&gt;
&lt;p&gt;Otherwise, if your server is lacking a domain name and you are going to work on either a local or public IP address, in this case please change &lt;code class=&quot;micro&quot;&gt;127.0.0.1&lt;/code&gt; to match the IP address of your server, it can work with both LAN or WAN networks. For example, in my case I set this to &lt;code class=&quot;micro&quot;&gt;192.168.1.100&lt;/code&gt; the IP address of my own &lt;a href=&quot;https://hub.docker.com/r/vaultwarden/server&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Bitwarden&lt;/a&gt; server.&lt;/p&gt;
&lt;p&gt;Once finished, you can save the file by using the &lt;code class=&quot;micro&quot;&gt;CTRL + O&lt;/code&gt; keystrokes on your keyboard.&lt;/p&gt;
&lt;h2&gt;Generate TLS/SSL CA Certificate with OpenSSL&lt;/h2&gt;
&lt;p&gt;Now, we can steadily generate self-signed certificates configured exactly as we wanted, you can proceed with the &lt;code class=&quot;micro&quot;&gt;openssl&lt;/code&gt; command on terminal of your server.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo openssl req -x509 -keyout /etc/ssl/private/bitwarden.key -out /etc/ssl/certs/bitwarden.crt -config ~/bitwarden.cnf -days 365&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Of course, you don&#39;t have to keep using &quot;bitwarden&quot; as a name of such files, you can use your own.&lt;/p&gt;
&lt;p&gt;Okay, you should have a certificate now generated as &lt;code class=&quot;micro&quot;&gt;/etc/ssl/certs/bitwarden.crt&lt;/code&gt; just examine it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;cat /etc/ssl/certs/bitwarden.crt&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Either, create a file with the same content or find a way to copy this file into your desired client Apple device, you can then send it by email, Google Drive, AirDrop or whatever as you wish.&lt;/p&gt;
&lt;h2&gt;Install Trusted Root Certificate on Apple iOS&lt;/h2&gt;
&lt;p&gt;The process is going to consist of two stages, the downloaded file is treated as a profile that&#39;s used to install and configure the certificate on Apple iOS client devices.&lt;/p&gt;
&lt;h3&gt;Install Certificate Configuration Profile&lt;/h3&gt;
&lt;p&gt;Once you receive the certificate file at your end client device which is &lt;b&gt;Apple iPhone 7&lt;/b&gt; running &lt;b&gt;iOS 14&lt;/b&gt; in my case, just click it and there will be a configuration profile automatically downloaded into your device.&lt;/p&gt;
&lt;p&gt;In order to install the profile, navigate to &lt;code class=&quot;micro&quot;&gt;Settings &gt; General &gt; Profiles&lt;/code&gt; where under “DOWNLOADED PROFILE” click on the target and press the &lt;code class=&quot;micro&quot;&gt;install&lt;/code&gt; button then confirm the dialog and be done with it.&lt;/p&gt;
&lt;h3&gt;Enable Full Trust for Root Certificates&lt;/h3&gt;
&lt;p&gt;Similarly, once you have successfully installed the downloaded certificate profile, navigate to &lt;code class=&quot;micro&quot;&gt;Settings &gt; General &gt; Aboout &gt; Certificate Trust Settings&lt;/code&gt; where under &quot;ENABLE FULL TRUST FOR ROOT CERTIFICATES&quot; click on the target and toggle the switch on.&lt;/p&gt;
&lt;h2&gt;Install Trusted Root Certificate on Apple macOS&lt;/h2&gt;
&lt;p&gt;When it comes to &lt;b&gt;macOS&lt;/b&gt; a simple &lt;code class=&quot;micro&quot;&gt;Double-click&lt;/code&gt; on the certificate file will do. Then, you can install it in your login keychain. Once clicked, just make sure to specify “Always Trust” from the scroll down menu when using the certificate.&lt;/p&gt;
&lt;p&gt;Finally! We&#39;re done, if you have any questions or issues do not hesitate to discuss in the comment section right below.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2021/06/generate-trusted-root-certificates-with-openssl.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyBVPSEnFisyCRtYfJmUiiWjpUhfHumN3sU0eG7ShqLGKPGGX55CNRzvq7Kl8imvcFeH01SwLkgfMBpry7m3_LmdlEV3WqrqLQg431d4P1LB6A3g1hFkUVsFPz9p4UdzmCwdFjTNGJroE/s72-c/digital-ssl-certificates.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-2753548518249049347</guid><pubDate>Wed, 09 Jun 2021 09:43:00 +0000</pubDate><atom:updated>2021-06-09T02:43:48.515-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">OpenWrt</category><category domain="http://www.blogger.com/atom/ns#">Pi-Hole</category><title>How to Use Pi Hole on your OpenWrt Router</title><description>&lt;p&gt;Back then, I published a tutorial on how to &lt;a href=&quot;https://www.ismoothblog.com/2019/06/configure-pi-hole-on-pfsense-router.html&quot; target=&quot;_blank&quot;&gt;configure Pi Hole on pfSense&lt;/a&gt;, it did actually attract a good amount of traffic from the web to this blog. Well, since I started using my old &lt;a href=&quot;https://www.ismoothblog.com/search/label/OpenWrt?&amp;amp;max-results=5&quot; target=&quot;_blank&quot;&gt;OpenWrt&lt;/a&gt; equipment in my &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot; target=&quot;_blank&quot;&gt;Homelab&lt;/a&gt; again there&#39;s going to be a new post.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtJrbJ83NWjpg8u-DvQDXmJtZh8FstiuRtkZP2R16HFGUVG8yOCwg3fvyEKBf8XgqdyAu0SEV8KVSsKZ5eRr9eugRPPJ46heZgaAk0sm1oY2_IYcZXhgFXN85OODxW6k1r8dwiqVNstU/s1920/pi-hole.jpeg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;1080&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtJrbJ83NWjpg8u-DvQDXmJtZh8FstiuRtkZP2R16HFGUVG8yOCwg3fvyEKBf8XgqdyAu0SEV8KVSsKZ5eRr9eugRPPJ46heZgaAk0sm1oY2_IYcZXhgFXN85OODxW6k1r8dwiqVNstU/s320/pi-hole.jpeg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;I decided to write this article to help beginners who have installed &lt;b&gt;Pi Hole&lt;/b&gt; on a VM or maybe some other network device and don&#39;t really know how to configure thier &lt;b&gt;OpenWrt&lt;/b&gt; router properly with Pi Hole as the primary DNS server.&lt;/p&gt;
&lt;p&gt;The big idea is simple, once we are finished, any client device on your network that connects to your OpenWrt router device with DHCP is automatically assigned with the Pi Hole address as DNS.&lt;/p&gt;
&lt;h2&gt;Determine IP Address Information&lt;/h2&gt;
&lt;p&gt;Now, I suppose you have to determine the IP addresses of both:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenWrt Router&lt;/li&gt;
&lt;li&gt;Pi Hole VM or Network Device&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please make sure you have assigned a static IP address for the Pi Hole server.&lt;/p&gt;
&lt;h2&gt;Configure OpenWrt Router with Pi Hole&lt;/h2&gt;
&lt;p&gt;From your OpenWrt web control panel which happens to be on this address &lt;code class=&quot;micro&quot;&gt;https://192.168.1.1&lt;/code&gt; in my case. Please proceed from the menu above to &lt;code class=&quot;micro&quot;&gt;Network &gt; Interfaces&lt;/code&gt; where you should find this:&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; border: 1px solid #d3d3d3;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8TGnELumvwIMC22GB32X8gjBvBDejI0hZ6Aa0PZSwHt8l0gViRgklu71acWfliCM0jF_7zM3BsRz4X6ZahI1OjoO3_uCnpNPQaqAway-S6lSdeEBtDDwOqH8sl07XVRczt_v37VIJ0Ls/s0/openwrt-interfaces.PNG&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;285&quot; data-original-width=&quot;728&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8TGnELumvwIMC22GB32X8gjBvBDejI0hZ6Aa0PZSwHt8l0gViRgklu71acWfliCM0jF_7zM3BsRz4X6ZahI1OjoO3_uCnpNPQaqAway-S6lSdeEBtDDwOqH8sl07XVRczt_v37VIJ0Ls/s0/openwrt-interfaces.PNG&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Our target for this implementation is the &lt;b&gt;LAN&lt;/b&gt; interface, go ahead and click on &quot;Edit&quot; the blue button where you will arrive at the following window as a result.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; border: 1px solid #d3d3d3;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyyqkfHiWKaPQcDvm2b3qqDrXrmgtMsS275HongHpeup4gRySdxBoVDxRMKdIygluz6lv6ONWZvJoBNpDj41QvoIjIXUMuYGhA7f_-NqjczMrBEFI-rOjngSHXsPtx1W7_j-cNRe81Jmc/s0/openwrt-dhcp-settings.PNG&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;492&quot; data-original-width=&quot;897&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyyqkfHiWKaPQcDvm2b3qqDrXrmgtMsS275HongHpeup4gRySdxBoVDxRMKdIygluz6lv6ONWZvJoBNpDj41QvoIjIXUMuYGhA7f_-NqjczMrBEFI-rOjngSHXsPtx1W7_j-cNRe81Jmc/s0/openwrt-dhcp-settings.PNG&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Please refer to the image above and make sure you navigate to &lt;code class=&quot;micro&quot;&gt;DHCP Server &gt; Advanced Settings&lt;/code&gt; then just add the Pi Hole IP address which is &lt;code class=&quot;micro&quot;&gt;192.168.1.10&lt;/code&gt; in my case right into the DHCP-Options but make sure it&#39;s in the this shape &lt;code class=&quot;micro&quot;&gt;6,192.168.1.10&lt;/code&gt; instead. After that, simply click on &quot;Save&quot; the green button.&lt;/p&gt;
&lt;p&gt;Okay, from the interfaces page find the &quot;Save &amp; Apply&quot; the blue button down below and click on it, now that everything is saved I recommend that you restar your OpenWrt router just in case. You can do that from &lt;code class=&quot;micro&quot;&gt;System &gt; Reboot&lt;/code&gt; in the menu above.&lt;p/&gt;
&lt;p&gt;That&#39;s it, now you can proceed to the final step which is confirming everything is working as intended.&lt;/p&gt;
&lt;h2&gt;Ensure Pi Hole is Working&lt;/h2&gt;
&lt;p&gt;Go to your Pi Hole admin panel which is in my case hosted on this address &lt;code class=&quot;micro&quot;&gt;http://192.168.1.10/admin/&lt;/code&gt; then you should open a web browser on any of your OpenWrt router client devices, try visiting any website and observe what&#39;s happening on the Pi Hole admin panel overview.&lt;/p&gt;
&lt;p&gt;If you can see live information about the DNS queries that Pi Hole server is receiving while surfing the web on your client devices, that indicates everything is configured properly.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2021/06/configure-pi-hole-on-openwrt-router.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtJrbJ83NWjpg8u-DvQDXmJtZh8FstiuRtkZP2R16HFGUVG8yOCwg3fvyEKBf8XgqdyAu0SEV8KVSsKZ5eRr9eugRPPJ46heZgaAk0sm1oY2_IYcZXhgFXN85OODxW6k1r8dwiqVNstU/s72-c/pi-hole.jpeg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-783246443182105617</guid><pubDate>Mon, 31 May 2021 07:27:00 +0000</pubDate><atom:updated>2021-06-27T06:13:33.076-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">OpenWrt</category><title>How to Use OpenWrt Router as a Wi-Fi Receiver</title><description>&lt;p&gt;Well, so I returned back for using &lt;b&gt;OpenWrt&lt;/b&gt; equipment devices which had already been a part of my humble &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot; target=&quot;_blank&quot;&gt;Homelab&lt;/a&gt; for many years. The idea we&#39;re going to discuss here in this tutorial is how to convert your &lt;a href=&quot;https://www.ismoothblog.com/search/label/OpenWrt?&amp;amp;max-results=5&quot; target=&quot;_blank&quot;&gt;OpenWrt&lt;/a&gt; router to a Wi-Fi signal receiver.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaoRPSM0CeMDDLG_3gmGbwUJhUowTvObOMENwiT_PaJu8anTn9AGlJmKAwdCcqmlsF98Vpyf6fF_ZdiXqH4HdAbtiKG7h9TPci8Sl0VwiOcWk7GjT0842VqknYT_zASLJpps6Q54yxQ3o/s640/openwrt-wireless-receiver.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;434&quot; data-original-width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaoRPSM0CeMDDLG_3gmGbwUJhUowTvObOMENwiT_PaJu8anTn9AGlJmKAwdCcqmlsF98Vpyf6fF_ZdiXqH4HdAbtiKG7h9TPci8Sl0VwiOcWk7GjT0842VqknYT_zASLJpps6Q54yxQ3o/s320/openwrt-wireless-receiver.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The benefit of such a setup is acquiring an internet connection for your OpenWrt client devices that are connected to the router, they simply get to access the Wi-Fi network we&#39;re connecting that router device into.&lt;/p&gt;
&lt;p&gt;Okay, start by navigating from your browser to your OpenWrt &quot;Luci&quot; web control panel which happens to be on address &lt;code class=&quot;micro&quot;&gt;192.168.1.1&lt;/code&gt; by default.&lt;/p&gt;
&lt;h2&gt;Connect to a Wireless Network in Client Mode&lt;/h2&gt;
&lt;p&gt;You should find the option to do so right the from the Menu above &lt;code class=&quot;micro&quot;&gt;Network &gt; Wireless&lt;/code&gt; so please note that you could either go with 2.4 GHz or 5GHz bands. I would recommend to use 2.4 GHz  since it tends to be more stable from a long distance.&lt;/p&gt;
&lt;p&gt;Once you have decided, click on &lt;code class=&quot;micro&quot;&gt;Scan&lt;/code&gt; to search for networks, find your target wireless network and click on &lt;code class=&quot;micro&quot;&gt;Join Network&lt;/code&gt; correspondingly, refer to the example from the image below.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; border: 1px solid #d3d3d3;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0F6jdmT3VfvsGojEsrkC-MbH6WedVASznO_RWMW0yySnDrboJ5PH1F6zpqyTi4m5MBFqdewQikz4GwDk4i-kZBQYMiqL6v5-BAS2Nvt6vIgHRWbHj2OYUWmoV2J-GB4tRfMrA6ELM_tY/s0/openwrt-wireless-scan.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;453&quot; data-original-width=&quot;898&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0F6jdmT3VfvsGojEsrkC-MbH6WedVASznO_RWMW0yySnDrboJ5PH1F6zpqyTi4m5MBFqdewQikz4GwDk4i-kZBQYMiqL6v5-BAS2Nvt6vIgHRWbHj2OYUWmoV2J-GB4tRfMrA6ELM_tY/s0/openwrt-wireless-scan.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Alright, just make sure to set &quot;Name of the new network&quot; to &lt;code class=&quot;micro&quot;&gt;wwan&lt;/code&gt; then assign the firewall zone to &lt;code class=&quot;micro&quot;&gt;wan&lt;/code&gt; and save it. Now, finalize your configuration from the main page click on the &lt;code class=&quot;micro&quot;&gt;Save &amp; Apply&lt;/code&gt; blue button down there.&lt;/p&gt;
&lt;h2&gt;Configure OpenWrt Firewall to Allow Forwarding&lt;/h2&gt;
&lt;p&gt;Here we go the final magical step, navigate to &lt;code class=&quot;micro&quot;&gt;Network &gt; Firewall&lt;/code&gt; from the menu above to access the firewall &quot;General Settings&quot; and make sure it looks like this.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; border: 1px solid #d3d3d3;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDM6GcgeZuQVWBQGTMtMEK3F3qG5hBYhLp5F9raYAI3UhiDTB22paN0JTh7DMOjY4D4J6QdKt8B2MA4K6QGpj6HxFRIV7SVSIG_97xmWjsg231R8IvCj0GPSrU9Q5YDsjqzzG1zbEWpss/s0/openwrt-firewall-settings.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;281&quot; data-original-width=&quot;528&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDM6GcgeZuQVWBQGTMtMEK3F3qG5hBYhLp5F9raYAI3UhiDTB22paN0JTh7DMOjY4D4J6QdKt8B2MA4K6QGpj6HxFRIV7SVSIG_97xmWjsg231R8IvCj0GPSrU9Q5YDsjqzzG1zbEWpss/s0/openwrt-firewall-settings.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;What is important is having &quot;Foward&quot; set to &lt;code class=&quot;micro&quot;&gt;accept&lt;/code&gt; and similarly click on &lt;code class=&quot;micro&quot;&gt;Edit&lt;/code&gt; the blue button from &quot;Zones&quot; to configure the &quot;lan&quot; firewall zone like below.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; border: 1px solid #d3d3d3;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHNSJkNSChDCeSKKAMh2dn6eMSk9DSIsofHeOShU8lO8PW_59xvCqtFbDtCHBEImsabsTWnQdakvu0m3aCmEK_qs6xOFniwa7ogFvse0Dhxl8lFqQ8E3I66RjLXm7JROI66h5YnVy2sBs/s0/openwrt-firewall-lan.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;294&quot; data-original-width=&quot;470&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHNSJkNSChDCeSKKAMh2dn6eMSk9DSIsofHeOShU8lO8PW_59xvCqtFbDtCHBEImsabsTWnQdakvu0m3aCmEK_qs6xOFniwa7ogFvse0Dhxl8lFqQ8E3I66RjLXm7JROI66h5YnVy2sBs/s0/openwrt-firewall-lan.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Additionally, it&#39;s also very important to make sure that both &quot;Masquerading&quot; and &quot;MSS clamping&quot; options are ticked on the &quot;lan&quot; firewall zone settings.&lt;/p&gt;
&lt;p&gt;By now, I suppose all clients that are connected to your OpenWrt router device can access the said network, and thus able to access the internet. It really doesn&#39;t matter whether you have your client devices connected to OpenWrt by a wired ethernet connection or wireless.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2021/05/set-up-openwrt-device-as-wireless-receiver.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaoRPSM0CeMDDLG_3gmGbwUJhUowTvObOMENwiT_PaJu8anTn9AGlJmKAwdCcqmlsF98Vpyf6fF_ZdiXqH4HdAbtiKG7h9TPci8Sl0VwiOcWk7GjT0842VqknYT_zASLJpps6Q54yxQ3o/s72-c/openwrt-wireless-receiver.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-8348182760903064167</guid><pubDate>Sat, 20 Feb 2021 05:56:00 +0000</pubDate><atom:updated>2021-02-20T05:35:04.185-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">pfSense</category><title>How to Install Best Realtek Network Drivers for pfSense</title><description>&lt;p&gt;Apparently, there&#39;s no need anymore to bother and maually compile network interface drivers for your &lt;b&gt;pfSense&lt;/b&gt; router which happens to have Network Interface Chips by &lt;b&gt;Realtek&lt;/b&gt;.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzTH6Kqi6z64r7_fPlQHamJ9RB7I-pTO-45YOty-rmbjsQ2Nr-HianfqPimrOAw81IvoPdWxARgyRBQQboZSUdwUeG9u7mlTMqwIuqod6VUkPKfQ78rAv6TQ8xPfrrSI3xiVyjs74BkgE/s412/FreeBSD.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;258&quot; data-original-width=&quot;412&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzTH6Kqi6z64r7_fPlQHamJ9RB7I-pTO-45YOty-rmbjsQ2Nr-HianfqPimrOAw81IvoPdWxARgyRBQQboZSUdwUeG9u7mlTMqwIuqod6VUkPKfQ78rAv6TQ8xPfrrSI3xiVyjs74BkgE/s320/FreeBSD.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;If you haven&#39;t updated yet to the latest &lt;code class=&quot;micro&quot;&gt;pfSense 2.5.0&lt;/code&gt; stable version, please do so . In fact, the drivers are now officially included in a package of &lt;b&gt;FreeBSD&lt;/b&gt; which is the operating system that &lt;b&gt;pfSense&lt;/b&gt; is built on.&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;From my experience while running my own &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot; target=&quot;_blank&quot;&gt;Homelab&lt;/a&gt; and still being involved in the &lt;b&gt;Reddit&lt;/b&gt; community for many years on that particular topic.&lt;/p&gt;
&lt;p&gt;People have always suffered from Realtek Network Interface Chips because of the poor kernel driver support provided by default on the &lt;b&gt;FreeBSD&lt;/b&gt; operating system. Thus, everyone was facing stability issues, and at worst it&#39;s leading the ethernet link to be completely out of commission, it&#39;s basically unreal.&lt;/p&gt;
&lt;p&gt;Meanwhile, the &lt;a href=&quot;https://www.reddit.com/r/homelab/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Homelab Community&lt;/a&gt; has always been trying to fix the issue, mostly by telling users to &lt;a href=&quot;https://gist.github.com/jovimon/524e116471f249626fd2ccd141f3fe05&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;manually compile Realtek Drivers&lt;/a&gt; which replaces the default buggy and instable ones.&lt;/p&gt;
&lt;p&gt;Alright, so the &lt;b&gt;FreeBSD&lt;/b&gt; distribution maintainers now provide that solution by default on the system, that&#39;s making it much more convenient for users to install a simple package including the compiled drivers, and we can now count them responsible for updates, maintainance and combatibility.&lt;/p&gt;
&lt;h2&gt;FreeBSD Realtek Network Driver Stability Issueus&lt;/h2&gt;
&lt;p&gt;Indeed, the default Realtek Network Drivers that are provided by default on the FreeBSD kernel space is a living hell that&#39;s causing all sorts of issues! Let me state the some points showing how broken they are:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;When the ethernet link is under load, it doesn’t respond to the software watchdog in time, and thus it resets with a timeout.&lt;/li&gt;
  &lt;li&gt;Ethernet interfaces go down and up in a sudden for no reason.&lt;/li&gt;
  &lt;li&gt;You cannot get maximum speed out of the Gigibit link bus.&lt;/li&gt;
  &lt;li&gt;Realtek Network Chips by default are difinitely unusable on pfSense.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&#39;s it! Feel free to contribute more in the comment section. Basically, in this tutorial we&#39;re going to shift the driver all the way from &lt;b&gt;Kernel Space&lt;/b&gt; to be replaced with an &lt;b&gt;User Space&lt;/b&gt; module.&lt;/p&gt;
&lt;h2&gt;Install Official Realtek Network Interface Driver&lt;/h2&gt;
&lt;p&gt;Here we go, navigate to the command line of any client on the network, please make sure that you know the IP  address of the target &lt;b&gt;pfSense&lt;/b&gt; router device which is &lt;code class=&quot;micro&quot;&gt;172.16.1.1&lt;/code&gt; in my case.&lt;/p&gt;
&lt;p&gt;If you do not have any client that can run command line shell, you can use &lt;a href=&quot;https://www.putty.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Putty SSH Client for Windows&lt;/a&gt; instead.&lt;/p&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;Now, we need to &lt;b&gt;SSH&lt;/b&gt; into the &lt;b&gt;FreeBSD&lt;/b&gt; operating system that&#39;s running &lt;b&gt;pfSense&lt;/b&gt;, here&#39;s how.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;ssh admin@172.16.1.1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just enter the password that you use for pfSense web control panel, when authenticated successfully make sure to input number &lt;code class=&quot;micro&quot;&gt;8&lt;/code&gt; into the dialog so that we can access the shell.&lt;/p&gt;
&lt;p&gt;We can now tell the package manager on &lt;b&gt;FreeBSD&lt;/b&gt; to install the package for us.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;pkg install realtek-re-kmod&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just in case, when it asks for confirmation just input &lt;code class=&quot;micro&quot;&gt;y&lt;/code&gt; for &quot;yes&quot; and be done with it.&lt;/p&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Well, I am going to recommend using the web control panel of pfSense instead of the command line for this one, just because it&#39;s much easier to use the text editor on gui than command line.&lt;/p&gt;
&lt;p&gt;From the browser address bar, navigate to &lt;code class=&quot;micro&quot;&gt;172.168.1.1&lt;/code&gt; which is serving the web control panel for pfSense in my case.&lt;/p&gt;
&lt;p&gt;Okay, now just login and from the menu above navigate to &lt;code class=&quot;micro&quot;&gt;Diagnostics &gt; Edit File&lt;/code&gt; and enter &lt;code class=&quot;micro&quot;&gt;/boot/loader.conf.local&lt;/code&gt; as the path for the file and then click on &quot;Load&quot; so that we can work on it.&lt;/p&gt;
&lt;p&gt;There should be a square dialog below we&#39;re going to tell &lt;b&gt;pfSense&lt;/b&gt; to use the newly installed drivers instead, make sure to input the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if_re_load=&quot;YES&quot;
if_re_name=&quot;/boot/modules/if_re.ko&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The final step to finish the configuration process is through clicking on that &quot;Save&quot; button. Now, reboot your pfSense router device which can be done from the menu &lt;code class=&quot;micro&quot;&gt;Diagnostics &gt; Reboot &gt; Submit&lt;/code&gt; or the physical hardware button if you prefer.&lt;/p&gt;
&lt;h3&gt;Confirmation&lt;/h3&gt;
&lt;p&gt;After reboot, verify if module is installed through &lt;b&gt;SSH&lt;/b&gt; again with the &quot;kldstat&quot; command as shown below.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;kldstat&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Id Refs Address                Size Name
 1   10 0xffffffff80200000  3aea538 kernel
 2    1 0xffffffff83cec000   11e230 if_re.ko
 3    1 0xffffffff84111000     1000 cpuctl.ko
 4    1 0xffffffff84112000     8cd0 aesni.ko
 5    1 0xffffffff8411b000      b28 coretemp.ko&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Simply, if you can find &lt;code class=&quot;micro&quot;&gt;if_re.ko&lt;/code&gt; in the output, it means the newly released &lt;b&gt;Realtek Network Drivers&lt;/b&gt; for &lt;b&gt;FreeBSD&lt;/b&gt; are properly installed and working as intended.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2021/02/official-freebsd-realtek-network-interface-driver-for-pfsense.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzTH6Kqi6z64r7_fPlQHamJ9RB7I-pTO-45YOty-rmbjsQ2Nr-HianfqPimrOAw81IvoPdWxARgyRBQQboZSUdwUeG9u7mlTMqwIuqod6VUkPKfQ78rAv6TQ8xPfrrSI3xiVyjs74BkgE/s72-c/FreeBSD.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-4924160476317711545</guid><pubDate>Sun, 10 Jan 2021 11:46:00 +0000</pubDate><atom:updated>2021-01-10T23:30:09.636-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">VPN</category><title>How to Configure OpenVPN Client Perfectly on pfSense</title><description>&lt;p&gt;So, I started integrating the &lt;a href=&quot;https://www.ismoothblog.com/search/label/VPN?&amp;amp;max-results=5&quot;&gt;VPN&lt;/a&gt; category and its topics into my blog, you should find the section added to the main menu in the top while &lt;b&gt;pfSense&lt;/b&gt; is the backbone for routing on my own &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot;&gt;Homelab&lt;/a&gt; and that&#39;s why I have a lot of experience in this field&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr_RyxypmHMZ-UoYNSYDfWhm1SdP9QJqYLLyd4MAwcVjtV6YgpaoqfBRsst2xay5SvWudv4CCNU8z3y366-5Xa6XdlMSkIWxNkXWcmJ_NlBBF6lyMNStUlga5dOpny4txrmdpFHoA_j5Y/s640/firewall-vpn-client.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;413&quot; data-original-width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr_RyxypmHMZ-UoYNSYDfWhm1SdP9QJqYLLyd4MAwcVjtV6YgpaoqfBRsst2xay5SvWudv4CCNU8z3y366-5Xa6XdlMSkIWxNkXWcmJ_NlBBF6lyMNStUlga5dOpny4txrmdpFHoA_j5Y/s320/firewall-vpn-client.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Correspondingly, as an openning for the series we started with explaing &lt;a href=&quot;https://www.ismoothblog.com/2021/01/how-to-configure-openvpn-server-on-linux-with-vpn-client.html&quot;&gt;how to set up an OpenVPN server on Linux&lt;/a&gt; along with client configuration for different operating systems.&lt;/p&gt;
&lt;p&gt;This time around, we will go ahead and explain how to configure a &lt;a href=&quot;https://www.ismoothblog.com/search/label/pfSense?&amp;amp;max-results=5&quot;&gt;pfSense&lt;/a&gt; firewall as client for a server running &lt;b&gt;OpenVPN&lt;/b&gt; which is going to let every device connecting to the router to be a part of the VPN private network, thus having the same public IP as the hosting server instead. &lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Advantages of OpenVPN Client on pfSense&lt;/h2&gt;
&lt;p&gt;In fact, you can configure any device as an &lt;b&gt;OpenVPN&lt;/b&gt; cient for a VPN server, but if you already have all of your devices connected to a central &lt;b&gt;pfSense&lt;/b&gt; router, you can utilize that conveniently.&lt;/p&gt;
&lt;p&gt;It would definitely make sense to set the firewall itself to be configured as the sole OpenVPN client and let it handle session management to the server instead, here&#39;s a couple of advanatges for that setup.&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;You can assign a public static IP address to your pfSense router matching the VPN server.&lt;/li&gt;
  &lt;li&gt;You can bypass the Carrier Grade NAT (CGN or CGNAT) restrictions which enables you to host your own services from home.&lt;/li&gt;
  &lt;li&gt;You can connect multiple clients to an OpenVPN service and only use a single session, especially when the server has a limit on the number of sessions available.&lt;/li&gt;
  &lt;li&gt;You don&#39;t need to bother with OpenVPN configuration for each client but only configure the router once.&lt;/li&gt;
  &lt;li&gt;Some client devices may not have the ability to be configured as an OpenVPN client which is irrelevant in this case.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I don&#39;t even think the list ends here, many people will want to use VPN to hide and protect their identity. There&#39;s no limit for the possibilities, you can always define your own and find a purpose.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Configure OpenVPN Certificates on pfSense&lt;/h2&gt;
&lt;p&gt;On one hand, if you have previously followed our tutorial to set up your own &lt;b&gt;OpenVPN&lt;/b&gt; server then you should know by now that the end result for client configuration is an &quot;.ovpn&quot; file which contains all the certificates and authentication keys needed.&lt;/p&gt;
&lt;p&gt;In the other hand, if your are using a public VPN provider that&#39;s internally using OpenVPN to provide users with the service then again the result is the same, go ahead and refer to that &quot;.ovpn&quot; file, it doesn&#39;t matter.&lt;/p&gt;
&lt;p&gt;There&#39;s a section called &lt;b&gt;Certificate Manager&lt;/b&gt; on pfSense panel which you can find by navigating to &lt;code class=&quot;micro&quot;&gt;System &gt; Cert. Manager&lt;/code&gt; and you sould have your browser pointing to there by now to start.&lt;/p&gt;
&lt;h3&gt;Add CA Certificate&lt;/h3&gt;
&lt;p&gt;From the Certificate Manager, navigate to the &lt;code class=&quot;micro&quot;&gt;CAs&lt;/code&gt; tab and press on the green Add button to add a new CA certificate.&lt;/p&gt;
&lt;p&gt;Once clicked, you will find multiple input fields so just define your VPN service provider name in the &quot;Descriptive name&quot; field and change &quot;Method&quot; to &lt;code class=&quot;micro&quot;&gt;Import an existing Certificate Authority&lt;/code&gt; so we can insert the certificate data.&lt;/p&gt;
&lt;p&gt;Now, from the &quot;.ovpn&quot; file provided to you as client, copy everything in between the openning &lt;code class=&quot;micro&quot;&gt;&amp;lt;ca&amp;gt;&lt;/code&gt; and closing &lt;code class=&quot;micro&quot;&gt;&amp;lt;/ca&amp;gt;&lt;/code&gt; tags and paste that into the &quot;Certificate data&quot; field then just press on the blue Save button.&lt;/p&gt;
&lt;h3&gt;Add Client Certificate&lt;/h3&gt;
&lt;p&gt;The instructions are almost the same for this as well, but this time navigate to the &lt;code class=&quot;micro&quot;&gt;Certificates&lt;/code&gt; tab and from there press on the green Add button to add a new certificate.&lt;/p&gt;
&lt;p&gt;Then again, once clicked you will find multiple fields so just define your VPN service provider name in the &quot;Descriptive name&quot; field and change &quot;Method&quot; to &lt;code class=&quot;micro&quot;&gt;Import an existing Certificate&lt;/code&gt; so we can insert the certificate data and its private key data as well for this particular case.&lt;/p&gt;
&lt;p&gt;Now, from the &quot;.ovpn&quot; file provided to you as client, copy everything in between the openning &lt;code class=&quot;micro&quot;&gt;&amp;lt;cert&amp;gt;&lt;/code&gt; and closing &lt;code class=&quot;micro&quot;&gt;&amp;lt;/cert&amp;gt;&lt;/code&gt; tags and paste that into the &quot;Certificate data&quot; field.&lt;/p&gt;
&lt;p&gt;Additionally, copy everything in between the openning &lt;code class=&quot;micro&quot;&gt;&amp;lt;key&amp;gt;&lt;/code&gt; and closing &lt;code class=&quot;micro&quot;&gt;&amp;lt;/key&amp;gt;&lt;/code&gt; tags and paste that into the &quot;Private key data&quot; field, now you can safely press on the blue Save button to save the certificate.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Configure OpenVPN Client on pfSense&lt;/h2&gt;
&lt;p&gt;In order to successfully configure and authenticate an OpenVPN client on pfSense you must have all certificates correctly added and configured into the &lt;b&gt;Certificate Manager&lt;/b&gt; as expained above, so make sure everything is set to proceed.&lt;/p&gt;
&lt;h3&gt;Add Client&lt;/h3&gt;
&lt;p&gt;Apparently, it&#39;s simple to add and configure pfSense as an &lt;b&gt;OpenVPN&lt;/b&gt; client, from the main menu just naviage to &lt;code class=&quot;micro&quot;&gt;VPN &gt; OpenVPN &gt; Clients&lt;/code&gt; and once you arrive at &lt;code class=&quot;micro&quot;&gt;Clients&lt;/code&gt; tab, you have to press on the green Add button.&lt;/p&gt;
&lt;h3&gt;Configure Client&lt;/h3&gt;
&lt;p&gt;You should now be presented with a set of options to configure the OpenVPN client and those should match the configurtion on the server, if you have followed our tutorial it would be pretty much standard options otherwise you might have to slightly change some options to match the configuration given specifically by your VPN service provider.&lt;/p&gt;
&lt;div class=&quot;yellowbox&quot;&gt;
&lt;b style=&quot;font-size: 15px; color: #777;&quot;&gt;NOTE:&lt;/b&gt;
&lt;p&gt;You should keep all settings presented in their default values except for the ones that will be mentioned to be changed down below.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In fact, you don&#39;t have to worry much about it because once you acquire the &quot;.ovpn&quot; file it should contain all the information needed to do so, lets start.&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;b&gt;Server host or address:&lt;/b&gt;  Change this to the IP address or the hostname for the VPN service provider.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Description:&lt;/b&gt; You can change this to the name of the VPN service provider.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Automatically generate a TLS Key:&lt;/b&gt; Untick this option then find what&#39;s in between the openning &lt;code class=&quot;micro&quot;&gt;&amp;lt;tls-crypt&amp;gt;&lt;/code&gt; and closing &lt;code class=&quot;micro&quot;&gt;&amp;lt;/tls-crypt&amp;gt;&lt;/code&gt; tags and insert that key into the &lt;b&gt;TLS Key&lt;/b&gt; field.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;TLS Key Usage Mode:&lt;/b&gt; Change this to &quot;TLS Encryption and Authentication&quot; from the drop-down listed options.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;TLS keydir direction:&lt;/b&gt; Change this to &quot;Both directions&quot; from the drop-down listed options.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Peer Certificate Authority:&lt;/b&gt; Select the CA certificate that we previously configured right from the drop-down listed options.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Client Certificate:&lt;/b&gt; Select the Client certificate that we previously configured right from the drop-down listed options.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Encryption Algorithm:&lt;/b&gt; Select &quot;AES-256-CBC&quot; right from the drop-down listed options unless for some reason confiugred differently by your VPN service provider.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Enable Negotiable Cryptographic Parameters:&lt;/b&gt; Untick this option unless for some reason required by your VPN service provider.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Auth digest algorithm:&lt;/b&gt; Select &quot;SHA512&quot; right from the drop-down listed options unless configured differently by your VPN service provider.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Use fast I/O operations with UDP writes to tun/tap:&lt;/b&gt; I recommend ticking this option on.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Gateway creation:&lt;/b&gt; I recommend ticking &quot;Both&quot; from the options available.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Normally, these steps are everything you need to follow in order to fully configure &lt;b&gt;OpenVPN&lt;/b&gt; client for &lt;b&gt;pfSense&lt;/b&gt; especially if you have used an installation script on the server.&lt;/p&gt;
&lt;p&gt;You might need to do a little more or change few options in some cases, when required specifically by your VPN service provider.&lt;/p&gt;
&lt;h2&gt;Configure VPN Interface on pfSense&lt;/h2&gt;
&lt;p&gt;Assuming you have corretly configured the OpenVPN client on pfSense, we can now proceed to adding the VPN interface.&lt;/p&gt;
&lt;h3&gt;Add VPN Interface&lt;/h3&gt;
&lt;p&gt;Now, if you navigate to &lt;code class=&quot;micro&quot;&gt;Interfaces &gt; Assignments&lt;/code&gt; you should see that there&#39;s a new interface called &quot;ovpnc1&quot; available to be added.&lt;/p&gt;
&lt;p&gt;You have to go ahead and click &quot;Add Interface&quot; then just give it a name in the &quot;Description&quot; field, simply use &quot;VPN&quot; and save it.&lt;/p&gt;
&lt;h3&gt;Configure Outbound NAT&lt;/h3&gt;
&lt;p&gt;You have to allow mapping of the VPN interface through the firewall, so navigate to &lt;code class=&quot;micro&quot;&gt;Firewall &gt; NAT &gt; Outbound&lt;/code&gt; and follow instructions.&lt;/p&gt;
&lt;p&gt;Once your arrive at the &lt;code class=&quot;micro&quot;&gt;Outbound&lt;/code&gt; tab change &lt;b&gt;Mode&lt;/b&gt; to &quot;Manual Outbound NAT rule generation. (AON - Advanced Outbound NAT)&quot; from the options available.&lt;/p&gt;
&lt;p&gt;Now, if you look under &quot;Mappings&quot; you will find entries originally created for the WAN interface, you have to similarly re-create every entry but this time for the VPN interface we have just added.&lt;/p&gt;
&lt;p&gt;The easiest way is to use the second option beside every entry from &quot;Actions&quot; column, this will duplicate any entry you want, the only thing you have to change is the interface from &quot;WAN&quot; to &quot;VPN&quot; when duplicated.&lt;/p&gt;
&lt;h3&gt;Verify Connectivity&lt;/h3&gt;
&lt;p&gt;There&#39;re two methods, you can refer to the &quot;Interfaces&quot; widget available on the pfSense dashboard, if you can see that VPN interface is up and has acquired an IP address on the VPN private nework, that means everything is well.&lt;/p&gt;
&lt;p&gt;Alternatively, I think it&#39;s more convient by navigating to &lt;code class=&quot;micro&quot;&gt;Status &gt; OpenVPN&lt;/code&gt; then just check whether the service is alive with &lt;b&gt;Virtual Address&lt;/b&gt; and &lt;b&gt;Remote Host&lt;/b&gt; assigned correctly as you would expect matching the server.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2021/01/configure-openvpn-client-on-pfsense-router.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr_RyxypmHMZ-UoYNSYDfWhm1SdP9QJqYLLyd4MAwcVjtV6YgpaoqfBRsst2xay5SvWudv4CCNU8z3y366-5Xa6XdlMSkIWxNkXWcmJ_NlBBF6lyMNStUlga5dOpny4txrmdpFHoA_j5Y/s72-c/firewall-vpn-client.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-4864338239981685661</guid><pubDate>Tue, 05 Jan 2021 04:36:00 +0000</pubDate><atom:updated>2021-01-09T03:21:43.693-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">VPN</category><title>How to Install OpenVPN Server Ultimately on Ubuntu 20.04</title><description>&lt;p&gt;Here we going again diving into the &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot;&gt;Homelab&lt;/a&gt; world, I recently got my &lt;a href=&quot;https://www.ismoothblog.com/search/label/pfSense?&amp;amp;max-results=5&quot;&gt;pfSense&lt;/a&gt; router to act as a client for my &lt;b&gt;OpenVPN&lt;/b&gt; setup on a VPS instance that is specifically running &lt;code class=&quot;micro&quot;&gt;Ubuntu 20.04&lt;/code&gt; which has public static address for both &lt;b&gt;Internet Protocol&lt;/b&gt; standards namely IPv4/IPv6 versions.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCIflkN-3w0zIyPYR66c8DiBvx1ng0gszEfXN9FP38vtlxC5Ba2nN-7pXiybBMcS95K4XGmjNAcxJ7DX7YjP5bwjOTs3Pir0Ob4vvlgIlptS2qz1rXJFMH9EsKNZ-fGvS7QBFfP8Y12HA/s640/vpn.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;426&quot; data-original-width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCIflkN-3w0zIyPYR66c8DiBvx1ng0gszEfXN9FP38vtlxC5Ba2nN-7pXiybBMcS95K4XGmjNAcxJ7DX7YjP5bwjOTs3Pir0Ob4vvlgIlptS2qz1rXJFMH9EsKNZ-fGvS7QBFfP8Y12HA/s320/vpn.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The idea is allowing your home network to be a part of another network, which is in my case helping to bypass the &lt;b&gt;Carrier Grade NAT&lt;/b&gt; (CGN or CGNAT) that is restricting me from self hosting my own services, that is one benefit for &lt;a href=&quot;https://www.ismoothblog.com/search/label/VPN?&amp;amp;max-results=5&quot;&gt;VPN&lt;/a&gt; but many people will want to use it for privacy purposes especially hiding your own identity.&lt;/p&gt;
&lt;p&gt;However, anyone as a &lt;b&gt;Homelab&lt;/b&gt; enthusiast can definitely use this to benefit from the staic IP address provided on a VPS instance, and then you can host hour own services through &lt;b&gt;pfSense&lt;/b&gt; firewall from home in case your &lt;b&gt;Internet Service Povider&lt;/b&gt; (ISP) doesn&#39;t offer you a public IP address, which is awesome.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Install OpenVPN Server on Linux&lt;/h2&gt;
&lt;p&gt;To be precise, I will explain the easiest and most automated method you will ever find to configure and set up an &lt;b&gt;OpenVPN&lt;/b&gt; server in less than a minute on the following &lt;b&gt;Linux&lt;/b&gt; distributions:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Ubuntu&lt;/li&gt;
  &lt;li&gt;Debian&lt;/li&gt;
  &lt;li&gt;CentOS&lt;/li&gt;
  &lt;li&gt;Fedora&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will make use of a bash script in the process, I am running &lt;b&gt;Ubuntu 20.04 LTS&lt;/b&gt; on my end.&lt;/p&gt;
&lt;h3&gt;Download Installation Script&lt;/h3&gt;
&lt;p&gt;This bash script will automatically install and configure &lt;b&gt;OpenVPN&lt;/b&gt; and here&#39;s how you can pull it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;wget https://git.io/vpn -O openvpn-install.sh&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once downloaded into your home directory you should make it executable.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;chmod -v +x openvpn-install.sh&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are curious about its content do not hesitate to check it out.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;nano openvpn-install.sh&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Run Installation Script&lt;/h3&gt;
&lt;p&gt;Well, now we can run the script which is going to ask some information to input.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo ./openvpn-install.sh&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I recommend that you use defaults for all settings by pressing &lt;code class=&quot;micro&quot;&gt;Enter&lt;/code&gt; on your keyboard except for one, when it asks you to enter the first client certificate name which is preferably &lt;code class=&quot;micro&quot;&gt;pfSense&lt;/code&gt; in my case or any other descriptive name for your use case.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Customize OpenVPN Server Subnet&lt;/h2&gt;
&lt;p&gt;If you wish to change the default subnet on &lt;code class=&quot;micro&quot;&gt;10.8.0.0/24&lt;/code&gt; for IP addresses given to &lt;b&gt;OpenVPN&lt;/b&gt; clients by the server, then you can follow the instructions below, otherwise you can completely skip this section.&lt;/p&gt;
&lt;h3&gt;Modify OpenVPN Server Configuration&lt;/h3&gt;
&lt;p&gt;We&#39;ll configure &lt;code class=&quot;micro&quot;&gt;10.10.10.0/24&lt;/code&gt; subnet instead which looks fanatastic.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/openvpn/server/server.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look for &lt;code class=&quot;micro&quot;&gt;10.8.0.0&lt;/code&gt; and change it to &lt;code class=&quot;micro&quot;&gt;10.10.10.0&lt;/code&gt; or your own preferred private subnet IP address.&lt;/p&gt;
&lt;h3&gt;Fix OpenVPN Firewall Rule Configuration&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/systemd/system/openvpn-iptables.service&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will find four occurances of &lt;code class=&quot;micro&quot;&gt;10.8.0.0/24&lt;/code&gt; just change all of them to &lt;code class=&quot;micro&quot;&gt;10.10.10.0/24&lt;/code&gt; or your own preferred private subnet.&lt;/p&gt;
&lt;h3&gt;Restart OpenVPN Services&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service openvpn-iptables restart&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service openvpn-server@server restart&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will assure that all of our changes are taking effect.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;How to Add New OpenVPN Client&lt;/h2&gt;
&lt;p&gt;If you wish to add another client and produce a new client certificate, then you should run the installation script again on your OpenVPN server.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo ./openvpn-install.sh&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This time around, since it&#39;s already installed you should see the following displayed to you.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;OpenVPN is already installed.

Select an option:
   1) Add a new client
   2) Revoke an existing client
   3) Remove OpenVPN
   4) Exit
Option: &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Input &lt;code class=&quot;micro&quot;&gt;1&lt;/code&gt; as an option and press enter, then just follow the instructions.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Configure OpenVPN Client Device&lt;/h2&gt;
&lt;p&gt;Here&#39;s how you can connect any OpenVPN client running on Windows, Linux, Android or iOS with the server using the configuration file provided to you.&lt;/p&gt;
&lt;p&gt;The installation wizard should have automatically created an &quot;.ovpn&quot; configuration file in the path &lt;code class=&quot;micro&quot;&gt;/root/[Client Certificate Name].ovpn&lt;/code&gt; which you should save and copy to your client device to connect with the &lt;b&gt;OpenVPN&lt;/b&gt; server.&lt;/p&gt;
&lt;h3&gt;Save OpenVPN Client Configuration&lt;/h3&gt;
&lt;p&gt;In my case, it&#39;s actually &lt;code class=&quot;micro&quot;&gt;/root/pfSense.ovpn&lt;/code&gt; on the OpenVPN server since that&#39;s the name I set for my first client. Lets copy that configuration file to our current user home directory.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo cp /root/&lt;mark&gt;pfSense&lt;/mark&gt;.ovpn ~/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Okay, now that file will be used on the client device to connect with the server, just make sure to change &quot;pfSense&quot; marked in white to your own client certificate name that you have set during script installation.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;cat ~/&lt;mark&gt;pfSense&lt;/mark&gt;.ovpn&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This way you can view the content of that configuration file and then use on the client device, but I recommend that you copy the entire file instead, as an example I will copy that file from the OpenVPN server to my Linux desktop.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;scp ~/&lt;mark&gt;pfSense&lt;/mark&gt;.ovpn [user]@[Linux Desktop IP]:~/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I should be able to access that file on the home directory inside my Linux desktop now.&lt;/p&gt;
&lt;h3&gt;Enable OpenVPN Client on Linux Desktop&lt;/h3&gt;
&lt;p&gt;First of all, make sure you have OpenVPN software package installed on your target Linux desktop client device, for instance if you are running Ubutnu you can install it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo apt install openvpn&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Assuming we have the client configuration file on the home directory we can proceed and overwrite it with &lt;b&gt;OpenVPN&lt;/b&gt; client file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo cp ~/&lt;mark&gt;pfSense&lt;/mark&gt;.ovpn /etc/openvpn/client.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One again, remember to replace the &quot;pfSense&quot; client name marked in white with your own name, which you have set during script installatiion.&lt;/p&gt;
&lt;h3&gt;Test Connectivity&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo openvpn --client --config /etc/openvpn/client.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just start the OpenVPN client service on your Linux desktop, once connectivity is confirmed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo systemctl start openvpn@client&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s it.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Troubleshoot OpenVPN Issues&lt;/h2&gt;
&lt;p&gt;I will provide information on how to troubleshoot &lt;b&gt;OpenVPN&lt;/b&gt; issues on the server and client.&lt;/p&gt;
&lt;h3&gt;Check OpenVPN Services&lt;/h3&gt;
&lt;p&gt;The ideal approach to inspect issues is by exposing the logs of the services running on the OpenVPN server, let&#39;s start with the main process.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service openvpn-server@server status&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then, we also have the firewall service which is specifying rules for iptables.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service openvpn-iptables status&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make sure that they&#39;re both active and running well, otherwise check for logs displayed to indentify errors and solve them.&lt;/p&gt;
&lt;h3&gt;Check OpenVPN Logs&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo journalctl --identifier openvpn&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also use this as a general command to find all logs for OpenVPN server. You are welcome to post your issue and ask for help in the comment section below.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2021/01/how-to-configure-openvpn-server-on-linux-with-vpn-client.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCIflkN-3w0zIyPYR66c8DiBvx1ng0gszEfXN9FP38vtlxC5Ba2nN-7pXiybBMcS95K4XGmjNAcxJ7DX7YjP5bwjOTs3Pir0Ob4vvlgIlptS2qz1rXJFMH9EsKNZ-fGvS7QBFfP8Y12HA/s72-c/vpn.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-3959635192712546986</guid><pubDate>Mon, 28 Dec 2020 02:20:00 +0000</pubDate><atom:updated>2021-06-04T23:05:35.076-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>How to Install FTP Server for Apache or Nginx on Ubuntu 20.04</title><description>&lt;p&gt;Well, I have found many articles on the web which claim to explain the installation of an &lt;b&gt;FTP Server&lt;/b&gt; running specifically on &lt;code class=&quot;micro&quot;&gt;Ubuntu 20.04 LTS&lt;/code&gt; but none of them seem to actually deliver a clear working and feasible solution, and that means one thing, welcome to my &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot;&gt;Homelab&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVIMwGmWQpAHTsDIHkyqr3ZBd84STEAAUCabqj1SGxL7nrs6766_f40B-Hu2fBePH-fEZ634J5E4ViZQAxb2rUcC8DVNK49XdIOqC7jS5rxZEaADTWoRXhO2izNodRMBju0YqQRp1PkgQ/s480/ftp-server.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;340&quot; data-original-width=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVIMwGmWQpAHTsDIHkyqr3ZBd84STEAAUCabqj1SGxL7nrs6766_f40B-Hu2fBePH-fEZ634J5E4ViZQAxb2rUcC8DVNK49XdIOqC7jS5rxZEaADTWoRXhO2izNodRMBju0YqQRp1PkgQ/s320/ftp-server.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In this article, I  am going through all the steps necessary for anyone to install an FTP service using &lt;b&gt;VSFTPD&lt;/b&gt; on an instance with TLS/SSL and properly integrate it with the main web server directory for either Apache or Nginx, the way it should be done.&lt;/p&gt;
&lt;p&gt;The end result is going to be one system user that you can use to authenticate an FTP client like &lt;b&gt;FileZilla&lt;/b&gt; to any website root directory you have on &lt;code class=&quot;micro&quot;&gt;/var/www&lt;/code&gt; which is the path used for web services specifically on Ubuntu itself.&lt;/p&gt;
&lt;h2&gt;Getting Started on Linux Ubuntu&lt;/h2&gt;
&lt;p&gt;Get remote access to your instance with superuser credentials provided to you. Now, lets prepare this operating system environment with the software required for an FTP server running &lt;b&gt;VSFTPD&lt;/b&gt;.&lt;/p&gt;
&lt;h3&gt;Install Software Package&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo apt update&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo apt install vsftpd&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service vsftpd status&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should now see that &lt;b&gt;VSFTPD&lt;/b&gt; service is actually active and running without any issues.&lt;/p&gt;
&lt;h3&gt;Setting Permissions&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo chgrp -R www-data /var/www/*&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo find /var/www -type f -exec chmod 664 {} \;&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo find /var/www -type d -exec chmod 775 {} \;&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo find /var/www -type d -exec chmod g+s {} \;&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo chown root:root /var/www&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s like the magic touch for this particular tutorial, which is setting a proper directory permissions for our websites document root.&lt;/p&gt;
&lt;h3&gt;Configure UFW Firewall&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo ufw allow 20,21,22,990,40000:50000/tcp&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo ufw enable&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, you can confirm firewall status to observe whether firewall is truly enabled with the ports forwarded.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo ufw status&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will only need this if your are going to use the firewall on your Ubuntu instance, otherwise you can completely skip this step.&lt;/p&gt;
&lt;h3&gt;Create FTP System User&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo useradd sftp -d /var/www&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo passwd sftp&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo adduser sftp www-data&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo echo &quot;DenyUsers sftp&quot; &gt;&gt; /etc/ssh/sshd_config&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo systemctl reload sshd&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here we&#39;re creating the system user to authenticate an FTP client while restricting SSH access which means it&#39;s only going to be valid for use through the FTP protocol, just make sure to specify a password that you can remember.&lt;/p&gt;
&lt;h2&gt;Configure VSFTPD to Enable FTP Server&lt;/h2&gt;
&lt;p&gt;In order for &lt;b&gt;VSFTPD&lt;/b&gt; to work on your &lt;b&gt;Linux Ubuntu&lt;/b&gt; environment, it needs to be configured accordingly with special settings.&lt;/p&gt;
&lt;h3&gt;VSFTPD Configuration&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/vsftpd.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will create a backup for the original configuration file while defining new settings. So, insert the following inside the config file created:&lt;/p&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;# FTP
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
force_dot_files=YES
pasv_min_port=40000
pasv_max_port=50000
allow_writeable_chroot=YES

# SSL
ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s like everything typically needed for a perfect implementation of VSFTPD alongside a web server like Apache or Nginx running on Linux Ubuntu.&lt;/p&gt;
&lt;h3&gt;Enable SSL over TLS for VSFTPD&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, we will create an SSL certificate for FTP over TLS.&lt;/p&gt;
&lt;h3&gt;Verify FTP Server Implementation&lt;/h3&gt;
&lt;p&gt;You must restart the VSFTPD service for all changes to take effect.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo systemctl restart vsftpd&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There you go, navigate to your favourite FTP client which happens to be &lt;a href=&quot;https://filezilla-project.org/download.php?type=client&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;FileZilla&lt;/a&gt; for my own preference. In particular, you will need to specify your host address, username, password and port settings.&lt;/p&gt;
&lt;p&gt;As a result, you will use &lt;code class=&quot;micro&quot;&gt;sftp&lt;/code&gt; for username and &lt;code class=&quot;micro&quot;&gt;21&lt;/code&gt; for port, when successful you will be presented with a welcome dialog showing SSL over TLS certificate information, just confirm to complete authorization.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2020/12/how-to-install-ftp-server-on-ubuntu-with-vsftpd.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVIMwGmWQpAHTsDIHkyqr3ZBd84STEAAUCabqj1SGxL7nrs6766_f40B-Hu2fBePH-fEZ634J5E4ViZQAxb2rUcC8DVNK49XdIOqC7jS5rxZEaADTWoRXhO2izNodRMBju0YqQRp1PkgQ/s72-c/ftp-server.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-286999448683475229</guid><pubDate>Thu, 24 Dec 2020 01:52:00 +0000</pubDate><atom:updated>2020-12-24T03:30:56.492-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>Starting a Library for UFW Application Profiles</title><description>&lt;p&gt;Hooray, I  started experimenting with &lt;b&gt;UFW Firewall&lt;/b&gt; and thus I created some custom application profiles specifically for a &lt;code class=&quot;micro&quot;&gt;Linux Ubuntu 20.04&lt;/code&gt; instance runnin on my &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot;&gt;Homelab&lt;/a&gt; hypervisor.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtsQPramgeQUxXkkpLNL_enXat_IYKw-0_JXrOmQpSFJZ89DfvbQM4V2jU8eIkQouzwLX_QbLHsNIgFqpe865ew4nJE4f2DZ984Ctu4CzKCrIB484kyhoSr-OtYaHnU23lT8r3sjWl9LQ/s483/firewall-application-profiles.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;339&quot; data-original-width=&quot;483&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtsQPramgeQUxXkkpLNL_enXat_IYKw-0_JXrOmQpSFJZ89DfvbQM4V2jU8eIkQouzwLX_QbLHsNIgFqpe865ew4nJE4f2DZ984Ctu4CzKCrIB484kyhoSr-OtYaHnU23lT8r3sjWl9LQ/s320/firewall-application-profiles.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;So, I  decided to publish and maintain a library to contain any type of application which should enhance the overall firewall experience.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;Introduction for UFW Firewall on Linux Ubuntu&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Uncomplicated Firewall&lt;/b&gt; is an advanced front-end for iptables on &lt;a href=&quot;https://www.ismoothblog.com/search/label/Linux?&amp;amp;max-results=5&quot;&gt;Linux&lt;/a&gt; which is an awesome firewall at its core. One of its features is &lt;code class=&quot;micro&quot;&gt;Application Profiles&lt;/code&gt; which are INI-style files that contain profile information and numerous port settings.&lt;/p&gt;
&lt;p&gt;This allows packages to include their own firewall settings and make them available to &lt;b&gt;UFW&lt;/b&gt; when installed to use with simple commands.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;UFWApp Library for Application Profiles&lt;/h2&gt;
&lt;p&gt;Anyway, while experimenting with default application profiles that are normally provided for &lt;b&gt;UFW&lt;/b&gt; during software packages installation. I found that many of those settings are usually irrelevant and most of the time are very messy with bad description.&lt;/p&gt;
&lt;p&gt;In addition, you will find that one application is installing multiple profiles for a single purpose, which is hilarious. In fact, I  came up with my own implementation to sort this mess out for you, I call it the &lt;b&gt;UFWApp Library&lt;/b&gt; which should be available on &lt;b&gt;GitHub&lt;/b&gt; by the time I finish writing this article.&lt;/p&gt;
&lt;div class=&quot;download-button&quot;&gt;
&lt;a class=&quot;download-inner&quot; href=&quot;https://github.com/iSmoothBlog/UFWApp&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;br&gt;
&lt;div class=&quot;download-front&quot;&gt;
&lt;span class=&quot;icon fa fa-github-alt&quot;&gt;&lt;/span&gt; GitHub Repository&lt;br&gt;
&lt;/div&gt;
&lt;div class=&quot;download-backup&quot;&gt;
&lt;span class=&quot;icon fa fa-hdd-o&quot;&gt;&lt;/span&gt; Click Here!&lt;br&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;br&gt;
&lt;/div&gt;
&lt;h2 class=&quot;underline&quot;&gt;List of Available Applications&lt;/h2&gt;
Please note that application type (eg. Web Server, File Transfer, Secure Shell, ETC) is what actually matters when specifying settings for UFW firewall.
&lt;ul&gt;
&lt;li&gt;Apache (Web Server)&lt;/li&gt;
&lt;li&gt;NGINX (Web Server)&lt;/li&gt;
&lt;li&gt;OpenSSH (Secure Shell)&lt;/li&gt;
&lt;li&gt;Postfix (Mail Submission)&lt;/li&gt;
&lt;li&gt;Dovecot (Mail Management)&lt;/li&gt;
&lt;li&gt;VSFTPD (File Transfer)&lt;/li&gt;
&lt;li&gt;FileZilla (File Transfer)&lt;/li&gt;
&lt;li&gt;Odoo (Odoo Server)&lt;/li&gt;
&lt;li&gt;Jekyll (Jekyll Server)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These and many more, any other alternative for such applications should apply.&lt;/p&gt;
&lt;h2 class=&quot;underline&quot;&gt;How to Install UFWApp Library on Linux Ubuntu&lt;/h2&gt;
&lt;p&gt;Clone the repository provided above into your system and install the required files.&lt;/p&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;git clone https://github.com/iSmoothBlog/UFWApp.git
cd UFWApp
sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will find a backup for old profiles in &lt;code class=&quot;micro&quot;&gt;/etc/ufw/backup&lt;/code&gt; after installation.&lt;/p&gt;
&lt;div class=&quot;yellowbox&quot;&gt;
&lt;b style=&quot;font-size: 15px; color: #777;&quot;&gt;NOTE:&lt;/b&gt;
&lt;p&gt;This will swap messy profiles configured on your system to be replaced with UFWApp implementation instead.&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;Usage&lt;/h3&gt;
&lt;p&gt;Once installed, proceed to list all applications then exchange &lt;code class=&quot;micro&quot;&gt;*&lt;/code&gt; with a selected profile:&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;sudo ufw app list
sudo ufw allow &quot;*&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A profile selected will work for all applications in the same field. So, continue setting allow rules until you are satisfied.&lt;/p&gt;
&lt;p&gt;Finally, you must verify UFW firewall status then reboot your system accordingly.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;sudo ufw status
sudo reboot&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</description><link>http://www.ismoothblog.com/2020/12/ufw-firewall-application-profiles-library.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtsQPramgeQUxXkkpLNL_enXat_IYKw-0_JXrOmQpSFJZ89DfvbQM4V2jU8eIkQouzwLX_QbLHsNIgFqpe865ew4nJE4f2DZ984Ctu4CzKCrIB484kyhoSr-OtYaHnU23lT8r3sjWl9LQ/s72-c/firewall-application-profiles.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-4100065316017651504</guid><pubDate>Wed, 09 Dec 2020 13:26:00 +0000</pubDate><atom:updated>2020-12-28T17:27:51.146-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ERP</category><category domain="http://www.blogger.com/atom/ns#">Odoo</category><title>How to Configure Odoo on Reverse Proxy with SSL Certificate</title><description>If you are going to run your business with &lt;b&gt;Odoo ERP&lt;/b&gt; in a production environment, then there&#39;s no doubt that you need a software like &lt;b&gt;Nginx&lt;/b&gt; to act as an intermediary between the clients and the server.&lt;br /&gt;
&lt;br /&gt;
Moreover, this will allow you to acquire an &lt;b&gt;SSL Certificate&lt;/b&gt; from &lt;a href=&quot;https://letsencrypt.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Let&#39;s Encrypt&lt;/a&gt; for free with an efficient &lt;b&gt;Reverse Proxy&lt;/b&gt; to enable your setup. In  adition, you will be able to access your &lt;b&gt;Odoo&lt;/b&gt; web interface while using your naked domain.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwoS99m3L0TBTSTytZPCn6285BE83lFtUNaFErvYpDvnJFW8DtdJQaw0rO6XpoBwKN8W7kB_IkxjnOWysYiMP-okGXLzQJCMHNf_P43cmNxbKQ6NiRLz9y8UMWNq_8ZXtJz7EpZjuT8iY/s1920/web-ssl.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;1280&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwoS99m3L0TBTSTytZPCn6285BE83lFtUNaFErvYpDvnJFW8DtdJQaw0rO6XpoBwKN8W7kB_IkxjnOWysYiMP-okGXLzQJCMHNf_P43cmNxbKQ6NiRLz9y8UMWNq_8ZXtJz7EpZjuT8iY/s320/web-ssl.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
On one hand, a reverse proxy will direct the traffic driven through the common &lt;code class=&quot;micro&quot;&gt;80/443&lt;/code&gt; ports right into the port used by your &lt;a href=&quot;https://www.ismoothblog.com/2020/12/how-to-install-odoo-14-on-ubuntu-20-04.html&quot;&gt;Odoo Server&lt;/a&gt; configuration. On the other hand, it will run an encrypted SSL session on &lt;b&gt;Nginx&lt;/b&gt; to provide trusted and secure connection for all users.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Getting Started on Linux Ubuntu&lt;/h2&gt;
If you follow this tutorial it really doesn&#39;t matter what distribution of &lt;b&gt;Linux&lt;/b&gt; you are running. However, we initially started this series of articles with &lt;a href=&quot;https://www.ismoothblog.com/search/label/Odoo?&amp;amp;max-results=5&quot;&gt;Odoo ERP&lt;/a&gt; installed on &lt;code class=&quot;micro&quot;&gt;Ubuntu 20.04 LTS&lt;/code&gt; so that means the only difference will be the package manager for software installation.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Install Software Packages&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo apt install nginx certbot python3-certbot-nginx&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;Enable Proxy Mode on Odoo Server&lt;/h3&gt;
In fact, please make sure that you have entered the correct path of the config file for your particular case. Otherwise, if you are following our &lt;b&gt;Odoo ERP&lt;/b&gt; series then it should be exactly as stated below.
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/odoo-server.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Now, ensure that you uncomment &lt;code class=&quot;micro&quot;&gt;proxy_mode = True&lt;/code&gt; from the options available, or just input that line anywhere if it&#39;s not present. If you want to go next level with security measures. In addition, you can bind &lt;b&gt;Odoo Server&lt;/b&gt; with local connections only and let the &lt;b&gt;Revere Proxy&lt;/b&gt; handle the rest.
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;proxy_mode = True
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h2&gt;Enable Reverse Proxy with SSL on Nginx&lt;/h2&gt;
Hey, lets make it clear that we&#39;re going to teach you here how to set the perfect &lt;b&gt;Reverse Proxy&lt;/b&gt; with &lt;b&gt;SSL&lt;/b&gt; connection for &lt;b&gt;Odoo Server&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Prepare Nginx for SSL&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo mkdir -p /var/lib/letsencrypt/.well-known&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo chgrp www-data /var/lib/letsencrypt&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo chmod g+s /var/lib/letsencrypt&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;Create SSL Snippets&lt;/h3&gt;
We will start with &lt;b&gt;Let&#39;s Encrypt&lt;/b&gt; configuration snippets.
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/nginx/snippets/letsencrypt.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Given the above, please insert the following inside the config file created:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type &quot;text/plain&quot;;
  try_files $uri =404;
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
After that, we have the SSL session and stapling configuration snippets.
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/nginx/snippets/ssl.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
As a result, please insert the following inside the config file created:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security &quot;max-age=31536000; includeSubDomains&quot; always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
That sums it up as a whole for those snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Configure Odoo Website on Nginx&lt;/h3&gt;
Okay, please make sure right from now to change all occurrences of &lt;code class=&quot;micro&quot;&gt;example.com&lt;/code&gt; with your own domain.
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/nginx/sites-available/&lt;mark&gt;example.com&lt;/mark&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Given the above, please insert the following inside the config file created:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;server {
    listen 80;

    server_name &lt;mark&gt;example.com&lt;/mark&gt;;

    root /var/www/html;
    index index.nginx-debian.html;

    include snippets/letsencrypt.conf;

    location / {
        try_files $uri $uri/ =404;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Well, now lets create another server block for production purposes, that&#39;s because the first one will only be used to generate the &lt;b&gt;SSL Certificate&lt;/b&gt; and thus removed.
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/nginx/sites-available/&lt;mark&gt;example.com&lt;/mark&gt;.production&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
As a result, please insert the following inside the config file created:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;# Odoo Servers
upstream odoo {
 server 127.0.0.1:8069;
}

upstream longpolling {
 server 127.0.0.1:8072;
}

# HTTP -&gt; HTTPS
server {
    listen 80;
    server_name www.&lt;mark&gt;example.com&lt;/mark&gt; &lt;mark&gt;example.com&lt;/mark&gt;;

    include snippets/letsencrypt.conf;
    return 301 https://&lt;mark&gt;example.com&lt;/mark&gt;$request_uri;
}

# WWW -&gt; NON WWW
server {
    listen 443 ssl http2;
    server_name www.&lt;mark&gt;example.com&lt;/mark&gt;;

    ssl_certificate /etc/letsencrypt/live/&lt;mark&gt;example.com&lt;/mark&gt;/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/&lt;mark&gt;example.com&lt;/mark&gt;/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/&lt;mark&gt;example.com&lt;/mark&gt;/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://&lt;mark&gt;example.com&lt;/mark&gt;$request_uri;
}

server {
    listen 443 ssl http2;
    server_name &lt;mark&gt;example.com&lt;/mark&gt;;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    # Proxy headers
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/&lt;mark&gt;example.com&lt;/mark&gt;/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/&lt;mark&gt;example.com&lt;/mark&gt;/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/&lt;mark&gt;example.com&lt;/mark&gt;/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # log files
    access_log /var/log/nginx/odoo.access.log;
    error_log /var/log/nginx/odoo.error.log;

    # Handle longpoll requests
    location /longpolling {
        proxy_pass http://longpolling;
    }

    # Handle direct requests
    location / {
       proxy_redirect off;
       proxy_pass http://odoo;
    }

    # Cache static files
    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo;
    }

    # Gzip
    gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
    gzip on;
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Last, you need to enable the web server block we have just created.
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo ln -s /etc/nginx/sites-available/&lt;mark&gt;example.com&lt;/mark&gt; /etc/nginx/sites-enabled/&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service nginx reload&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
That&#39;s it for this part. Go next!&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Generate SSL Certificate from Let&#39;s Encrypt&lt;/h2&gt;
&lt;b&gt;Let’s Encrypt&lt;/b&gt; is a free, automated, and open certificate authority (CA), run for the public’s benefit. What should we care about? It will enable the SSL connection on Nginx for us once we run a few commands.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Create SSL Certificate&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo certbot certonly --agree-tos --email &lt;mark&gt;yourname@gmail.com&lt;/mark&gt; --webroot -w /var/lib/letsencrypt/ -d &lt;mark&gt;example.com&lt;/mark&gt; -d &lt;mark&gt;www.example.com&lt;/mark&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;Enable Odoo Website for Production&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo rm -rf /etc/nginx/sites-available/&lt;mark&gt;example.com&lt;/mark&gt;&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo mv /etc/nginx/sites-available/&lt;mark&gt;example.com&lt;/mark&gt;.production /etc/nginx/sites-available/&lt;mark&gt;example.com&lt;/mark&gt;&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service nginx reload&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo service odoo restart&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;Automate Certificate Renewal&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/letsencrypt/renewal/&lt;mark&gt;example.com&lt;/mark&gt;.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Given the above, please insert the following line right below &lt;code class=&quot;micro&quot;&gt;[renewalparams]&lt;/code&gt; inside the config file:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;renew_hook = systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
This will act as a renewal hook that will automatically reload the config files on Nginx once a new certificate has been issued. Thus, there will be no need for any interaction from your side anymore.</description><link>http://www.ismoothblog.com/2020/12/how-to-configure-odoo-on-reverse-proxy-with-ssl-certificate.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwoS99m3L0TBTSTytZPCn6285BE83lFtUNaFErvYpDvnJFW8DtdJQaw0rO6XpoBwKN8W7kB_IkxjnOWysYiMP-okGXLzQJCMHNf_P43cmNxbKQ6NiRLz9y8UMWNq_8ZXtJz7EpZjuT8iY/s72-c/web-ssl.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-7246283773165361374</guid><pubDate>Mon, 07 Dec 2020 05:42:00 +0000</pubDate><atom:updated>2021-01-20T10:00:54.027-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ERP</category><category domain="http://www.blogger.com/atom/ns#">Odoo</category><title>How to Install Odoo 14 on Ubuntu 20.04</title><description>&lt;p&gt;Here we go as &lt;a href=&quot;https://www.ismoothblog.com/2020/11/business-erp-software-odoo.html&quot;&gt;I started my journey with ERP&lt;/a&gt; initially on my personal &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot;&gt;Homelab&lt;/a&gt;, this article explains how to fully install and configure an &lt;a href=&quot;https://www.ismoothblog.com/search/label/ERP?&amp;amp;max-results=5&quot;&gt;Odoo&lt;/a&gt; environment for production purposes.&lt;/p&gt;
&lt;p&gt;This is a true experience that I had on a &lt;b&gt;Linux VPS&lt;/b&gt; instance running &lt;code class=&quot;micro&quot;&gt;Ubuntu 20.04 LTS&lt;/code&gt; while I am an extreme &lt;b&gt;IT Expert&lt;/b&gt;, trust every step.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ldG_MR6LITc5xE1sA7dMrrcbruE__e2K4Khn-dHsak9KdBmnbZuuRP0lsvuxgMOX9ELyYZJl0KmWpEY7DC-A6FKKGRUw7f26UlY9Bs75AZYDTaK3Up4nEjS0otNXmknJgcTvHi7nlVs/s960/odoo-web-design.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;640&quot; data-original-width=&quot;960&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ldG_MR6LITc5xE1sA7dMrrcbruE__e2K4Khn-dHsak9KdBmnbZuuRP0lsvuxgMOX9ELyYZJl0KmWpEY7DC-A6FKKGRUw7f26UlY9Bs75AZYDTaK3Up4nEjS0otNXmknJgcTvHi7nlVs/s320/odoo-web-design.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;By the way, since I have been enjoying an instance on &lt;code class=&quot;micro&quot;&gt;x4 CPU Cores with 8GB RAM&lt;/code&gt; configuration from &lt;a href=&quot;https://contabo.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Contabo&lt;/a&gt; which is a german hosting service provider, let me tell you that it&#39;s the best price to features deal you will ever find.&lt;/p&gt;
&lt;h2&gt;Getting Started on Linux Ubuntu&lt;/h2&gt;
&lt;p&gt;Get remote access to your instance with &lt;code class=&quot;micro&quot;&gt;root&lt;/code&gt; credentials provided to you. Now, lets prepare this operating system environment with the software required for an &lt;b&gt;Odoo ERP&lt;/b&gt; system.&lt;/p&gt;
&lt;h3&gt;Install Software Packages&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;apt update&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;apt install git postgresql python3-pip build-essential wget python3-dev python3-venv python3-wheel libfreetype6-dev libxml2-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libjpeg-dev zlib1g-dev libpq-dev libxslt1-dev libldap2-dev libtiff5-dev libjpeg8-dev libopenjp2-7-dev liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev node-less node-clean-css nodejs npm&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;npm install -g rtlcss&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Okay, we actually need to install a compatible &quot;wkhtmltopdf&quot; package for &lt;code class=&quot;micro&quot;&gt;Odoo 14&lt;/code&gt; instead of the one available in the official repositories.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo apt install ./wkhtmltox_0.12.6-1.bionic_amd64.deb&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s like all the software packages required to proceed.&lt;/p&gt;
&lt;h3&gt;Create System User&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;useradd -m -d /opt/erp -U -r -s /bin/bash erp&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;passwd erp&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;usermod -aG sudo erp&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;su - erp&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that we&#39;re setting &lt;code class=&quot;micro&quot;&gt;/opt/erp&lt;/code&gt; as home directory for the new user account. By now, your terminal should have switched user to &lt;code class=&quot;micro&quot;&gt;erp&lt;/code&gt; and thus we will start issuing commands with sudo.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo su - postgres -c &quot;createuser -s erp&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The postgresql database system is the core for Odoo where all data will be stored, just make sure to create a database user with the same name as the one we created for the system itself.&lt;/p&gt;
&lt;h3&gt;Get Logging Directory&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo mkdir /var/log/odoo&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo chown erp:erp /var/log/odoo&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This sums it up for a preparation plan! Now, the star of the show &lt;b&gt;Odoo&lt;/b&gt; is awating.&lt;/p&gt;
&lt;h2&gt;Install Odoo Community Edition&lt;/h2&gt;
&lt;p&gt;Typically, you can pull the community version of &lt;b&gt;Odoo ERP&lt;/b&gt; from &lt;a href=&quot;https://github.com/odoo/odoo&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt; that will gaurantee the latest updates and fixes. In fact, you should have &lt;code class=&quot;micro&quot;&gt;Odoo 14&lt;/code&gt; as the latest version availale on the stable branch, by the date we published this article.&lt;/p&gt;
&lt;h3&gt;Clone GitHub Repository&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/erp/odoo&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;cd /opt/erp&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Install Python Requirements&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;python3 -m venv odoo-venv&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;source odoo-venv/bin/activate&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once created, you can proceed to install the python dependencies.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;(venv) $&quot;&gt;pip3 install wheel&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;(venv) $&quot;&gt;pip3 install -r odoo/requirements.txt&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;(venv) $&quot;&gt;deactivate&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We&#39;re utilizing a &lt;b&gt;Python Virtual Environment&lt;/b&gt; here. At its core, the main purpose is to create an isolated environment for Odoo itself and no other.&lt;/p&gt;
&lt;h3&gt;Configure Odoo Server&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;mkdir /opt/erp/odoo-addons&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/odoo-server.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Given the above, please insert the following inside the configuration file created:&lt;/p&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;[options]

; General
admin_passwd = YOUR-MASTER-PASSWORD
#proxy_mode = True
longpolling_port = 8072
xmlrpc_port = 8069
#xmlrpc_interface = 127.0.0.1
#netrpc_interface = 127.0.0.1

; Database
db_host = False
db_port = False
db_user = erp
db_password = False

; Workers
#limit_memory_hard = 2684354560
#limit_memory_soft = 2147483648
#limit_request = 8192
#limit_time_cpu = 600
#limit_time_real = 1200
max_cron_threads = 1
workers = 0

; File Paths
logfile = /var/log/odoo/odoo-server.log
addons_path = /opt/erp/odoo/addons,/opt/erp/odoo-addons&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finalize your configuration process with giving odoo the permissions for access:&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo chown erp:erp /etc/odoo-server.conf&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo chmod 640 /etc/odoo-server.conf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Enable Odoo Server to Run on Startup&lt;/h2&gt;
&lt;p&gt;To summarise, you should have &lt;b&gt;Odoo Server&lt;/b&gt; completely set and configured by this time, it&#39;s ready to work on serving business application for a website. Therefore, create a system service that works on system boot, and it will run the server automatically whithout any interaction.&lt;/p&gt;
&lt;h3&gt;Create System Service&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo nano /etc/systemd/system/odoo.service&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As a result, please insert the following inside the service file created:&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Configuration&quot;&gt;&lt;code&gt;[Unit]
Description=odoo
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo
PermissionsStartOnly=true
User=erp
Group=erp
ExecStart=/opt/erp/odoo-venv/bin/python3 /opt/erp/odoo/odoo-bin -c /etc/odoo-server.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Run Odoo Server&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo systemctl daemon-reload&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo systemctl enable --now odoo&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo systemctl status odoo&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo journalctl -u odoo&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In conclusion, ensure that &lt;b&gt;Odoo Server&lt;/b&gt; is alive and running fine with commands stated above. To illustrate, open your browser and type in address bar &lt;code class=&quot;micro&quot;&gt;http://&amp;lt;your_domain_or_IP_address&amp;gt;:8069&lt;/code&gt; then enjoy your new life in business.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2020/12/how-to-install-odoo-14-on-ubuntu-20-04.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ldG_MR6LITc5xE1sA7dMrrcbruE__e2K4Khn-dHsak9KdBmnbZuuRP0lsvuxgMOX9ELyYZJl0KmWpEY7DC-A6FKKGRUw7f26UlY9Bs75AZYDTaK3Up4nEjS0otNXmknJgcTvHi7nlVs/s72-c/odoo-web-design.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-3491317602620815643</guid><pubDate>Sat, 21 Nov 2020 11:48:00 +0000</pubDate><atom:updated>2020-12-06T21:43:59.534-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ERP</category><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">Odoo</category><title>A Journey with an Advanced ERP Software</title><description>It&#39;s been long since the last time I have posted on this blog, I recently decided to start a freelance job locally at &lt;b&gt;Bahrain&lt;/b&gt; which happens to be my home country. In fact, I actually worked for about 6 months officially under a well known company in the same field.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ1lG6IfgAEez6ieVRwr5fuAwibFTv8WAeeMJbFi6_0KQCo15iNHRxTzwuOSsLYB9KZTV6LsLVAj6opg1xFxguPl3BSnkknmblRRfgFd6bNkwbwgDv1cDQ73icGb-_nCstC495JN-eY2s/s0/software-odoo-opensorce.gif&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;291&quot; data-original-width=&quot;429&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ1lG6IfgAEez6ieVRwr5fuAwibFTv8WAeeMJbFi6_0KQCo15iNHRxTzwuOSsLYB9KZTV6LsLVAj6opg1xFxguPl3BSnkknmblRRfgFd6bNkwbwgDv1cDQ73icGb-_nCstC495JN-eY2s/s0/software-odoo-opensorce.gif&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Here we come, &lt;b&gt;Odoo&lt;/b&gt; previously known as &lt;b&gt;OpenERP&lt;/b&gt; the &lt;code class=&quot;micro&quot;&gt;Open Source ERP and CRM&lt;/code&gt; software which contains a large collection of business-related applications and modules such as CRM, Sales, Purchase, Inventory Management and many more. Well, lets make it clear that ERP stands for &lt;b&gt;Enterprise Resource Planning&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;The Beginning of the Journey&lt;/h2&gt;
Of course, it&#39;s my &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;amp;max-results=5&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Homelab&lt;/a&gt; which is going to be the star of the show for this one. Initially, I have downloaded the official &lt;code class=&quot;micro&quot;&gt;Ubuntu 20.04.1 LTS (Focal Fossa)&lt;/code&gt; image and registered the ISO at &lt;a href=&quot;https://www.ismoothblog.com/2019/07/install-vmware-esxi-hypervisor-on-dell-poweredge.html?m=0&quot; target=&quot;_blank&quot;&gt;VMWare ESXI Hypervisor&lt;/a&gt; operating on my &lt;b&gt;Dell PowerEdge R720&lt;/b&gt; server.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIDGG6tL0_vS7RIeqo9QKGgz1A0S4kX1Hy4b5D_H7GDaxNLauj0bK5qRX36n6DIiKiQoZvbSdyDOMrYp4GAvauyU_A8qs9NOZYAMbzfFLDG8L8Uqm9gB5wYC08tGMp2u4YgKYv6d1HgDY/s1200/Odoo-14.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;400&quot; data-original-height=&quot;675&quot; data-original-width=&quot;1200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIDGG6tL0_vS7RIeqo9QKGgz1A0S4kX1Hy4b5D_H7GDaxNLauj0bK5qRX36n6DIiKiQoZvbSdyDOMrYp4GAvauyU_A8qs9NOZYAMbzfFLDG8L8Uqm9gB5wYC08tGMp2u4YgKYv6d1HgDY/s400/Odoo-14.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
By the way, there&#39;re two options to go with this ERP software for your business, it&#39;s either you choose their enterprise solution or you fly with the &lt;b&gt;Community Edition&lt;/b&gt; which is completely open source and must be self-hosted. Here, you can find the &lt;a href=&quot;https://github.com/odoo/odoo&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;project code on GitHub&lt;/a&gt; while apparently I myself wil be hosting &lt;code class=&quot;micro&quot;&gt;Odoo Version 14&lt;/code&gt; for a long time.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Exploring Odoo ERP System&lt;/h2&gt;
So, I followed the instructions on &lt;b&gt;GitHub&lt;/b&gt; to setup the software on my Linux instance and it went smoothly. After that, I navigated to the IP address of that VM in my case on &lt;code class=&quot;micro&quot;&gt;10.10.10.18:8069&lt;/code&gt; where the fun started I played around and installed a handful of applications, I won&#39;t lie the most interesting one was the &lt;b&gt;Point of Sale&lt;/b&gt; module.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKMa_PM7iIJg3Kl32c4Eya8sodhfHjkKFc8JcctkCeXlgARbtxiLkwEveQWy8TdvBqi5YtprNH9YMvTJ-k4HMANSf9msTay1LoSwBtwjcbfg6Yg4uyR5s9D2Hfzwx92cuQNFV5XmW0Xck/s0/POS-Interface.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;753&quot; data-original-width=&quot;1230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKMa_PM7iIJg3Kl32c4Eya8sodhfHjkKFc8JcctkCeXlgARbtxiLkwEveQWy8TdvBqi5YtprNH9YMvTJ-k4HMANSf9msTay1LoSwBtwjcbfg6Yg4uyR5s9D2Hfzwx92cuQNFV5XmW0Xck/s0/POS-Interface.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Definitely, I won&#39;t be walking you through all the features and modules avaiable but I can tell you it&#39;s unbelievable. I reached this point after analysing the &lt;b&gt;Inventory Management&lt;/b&gt; module from where I created a couple of product templates to demonstrate the process, I defined multiple warehouses with stock locations as well to go with.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLnf6cPPhNH6d9K85nrVjrVsq_ptC4sDbPOwJyqrRYe5dF4NYi2ykOPGU62bkv8REwmEe3oOZzxbrR5NWMYBsaNbp0UgwypOY9nJL1TWl1gdq9hV5U_RBQvT2BB5E_82Gh50tJ-LwDmRY/s0/Inventory-Stock.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;527&quot; data-original-width=&quot;821&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLnf6cPPhNH6d9K85nrVjrVsq_ptC4sDbPOwJyqrRYe5dF4NYi2ykOPGU62bkv8REwmEe3oOZzxbrR5NWMYBsaNbp0UgwypOY9nJL1TWl1gdq9hV5U_RBQvT2BB5E_82Gh50tJ-LwDmRY/s0/Inventory-Stock.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The example above shows a particular product quantity on hand being distributed between all the stock locations available within my virtual company. Moreover, you can do a lot more like transfering stock from one location to another and much more.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;The Journey Has Begun&lt;/h2&gt;
Indeed, I can guess that you can tell where this blog is going to focus on, I will be preparing a lot of tutorials related to &lt;b&gt;ERP&lt;/b&gt; and how to troubleshoot &lt;b&gt;Odoo&lt;/b&gt; from all kind of errors and issues. Additionally, I will be supporting this development platform for a very long time, I am planning to be known and sometime hired as an &lt;b&gt;Odoo Developer&lt;/b&gt; from now on.</description><link>http://www.ismoothblog.com/2020/11/business-erp-software-odoo.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ1lG6IfgAEez6ieVRwr5fuAwibFTv8WAeeMJbFi6_0KQCo15iNHRxTzwuOSsLYB9KZTV6LsLVAj6opg1xFxguPl3BSnkknmblRRfgFd6bNkwbwgDv1cDQ73icGb-_nCstC495JN-eY2s/s72-c/software-odoo-opensorce.gif" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-2619325243042426570</guid><pubDate>Fri, 19 Jul 2019 00:34:00 +0000</pubDate><atom:updated>2020-12-30T18:40:23.084-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">Tutorials</category><title>How to Connect Cisco Switch with Serial Console Port on Linux</title><description>&lt;p&gt;Yeah, I managed to put my hands on a &lt;b&gt;Cisco Catalyst 3560G Series&lt;/b&gt; switch which was specifically meant for enterprise use cases and I actually got it from the local market selling used stuff at my country, it&#39;s working perfectly in a very good condition.&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguKYVCgg-bkJHH9-a9U8hRlgWj7SLbJtthjpIX92urPv3PtsG5_0MmqOKlEzZvxJ4e1ia60n2bTHfW9ukV_00P1Pzc_i4GDQEIUDlvUK9Q_DrfJ07ZkprCvvKj1MtITgSN8wtzVizufCA/s0/rj45-network-cable.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguKYVCgg-bkJHH9-a9U8hRlgWj7SLbJtthjpIX92urPv3PtsG5_0MmqOKlEzZvxJ4e1ia60n2bTHfW9ukV_00P1Pzc_i4GDQEIUDlvUK9Q_DrfJ07ZkprCvvKj1MtITgSN8wtzVizufCA/s0/rj45-network-cable.jpg&quot; width=&quot;380&quot; height=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Of course, the first thing you will have to do after purchasing a used network switch is resetting it to factory settings and it&#39;s really straight forward when it comes to Cisco switches, I will write about that later on in a new post.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN7NxyHElfRZ3CEnbVvQ_AR2ZSjrqMtIiE3OrugEVp-rjY5l97ZpUPvz5TSVuh3toZpL2tBMEhjvCUUutQsOj_ePUhyphenhyphencHzoHfipQZlBRG3KLH-QzuX4rZpUHu-DVNdEmZnp1q8IDREg6c/s0/cisco-catalyst-switch.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN7NxyHElfRZ3CEnbVvQ_AR2ZSjrqMtIiE3OrugEVp-rjY5l97ZpUPvz5TSVuh3toZpL2tBMEhjvCUUutQsOj_ePUhyphenhyphencHzoHfipQZlBRG3KLH-QzuX4rZpUHu-DVNdEmZnp1q8IDREg6c/s0/cisco-catalyst-switch.jpg&quot; width=&quot;380&quot; height=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Then, you definitely want to configure it to work in your own network with specific settings because it is a smart switch for which you want to reach its command line through the serial console interface and that&#39;s what I am going to explain in details today.&lt;/p&gt;
&lt;p&gt;Since I am labeling this as a &lt;a href=&quot;https://www.ismoothblog.com/search/label/Homelab?&amp;max-results=5&quot;&gt;Homelab&lt;/a&gt; tutorial where we mostly like to run Linux on our servers and desktop computers, I would rather explain through steps specifically on that operating system and its widely known distributions including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debian based distributions like Ubuntu, Elementary OS, Mint, etc.&lt;/li&gt;
&lt;li&gt;RPM Package Manager (RPM) based distributions like CentOS, Fedora, etc.&lt;/li&gt;
&lt;li&gt;Pacman Package Manager based distributions like Arch and Manjaro.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And many others, there&#39;s no limit for the diversity of an open source project like Linux but definitely the software and steps we are going to use are the same.&lt;/p&gt;
&lt;h2&gt;Install Minicom from Package Manager&lt;/h2&gt;
&lt;p&gt;That&#39;s why I&#39;ve been mentioning each distribution matched with its package manager. We need to install the package for &quot;Minicom&quot; which is described by the maintainer as follows:&lt;/p&gt;
&lt;blockquote&gt;
Minicom is a text-based serial port communications program. It is used to talk to external RS-232 devices such as mobile phones, routers, and serial console ports.
&lt;/blockquote&gt;
&lt;p&gt;Now, just figure out what is the package manager for your Linux distribution and open up a terminal on your screen.&lt;/p&gt;
&lt;h3&gt;Debian/Ubuntu&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo -s&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;apt update&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;apt install minicom&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;exit&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;RPM&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo -s&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;yum install minicom&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;exit&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;Pacman&lt;/h3&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo -s&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;pacman -S minicom&lt;/span&gt;
&lt;span class=&quot;terminal-line&quot; prefix=&quot;#&quot;&gt;exit&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s about it, you should now be ready to go.&lt;/p&gt;
&lt;h2&gt;Connect RJ45 Console Port to Linux Computer&lt;/h2&gt;
&lt;p&gt;In order to connect with the RJ45 console port on the back of your Cisco switch you have two options.&lt;/p&gt;
&lt;h3&gt;RS232 to RJ45&lt;/h3&gt;
&lt;p&gt;This is actually the cable that comes packed originally in the box when you buy the switch, if you don&#39;t have one of these just buy from AliExpress or Amazon. I got mine from this seller on that &lt;a href=&quot;https://www.aliexpress.com/item/32945212998.html?spm=a2g0o.productlist.0.0.3d3e6b29SG4FcL&amp;algo_pvid=67d73f4b-21ed-428c-85c8-6bc8b551af02&amp;algo_expid=67d73f4b-21ed-428c-85c8-6bc8b551af02-2&amp;btsid=9ab202ff-ad97-460d-9b72-f991b1fbb597&amp;ws_ab_test=searchweb0_0%2Csearchweb201602_4%2Csearchweb201603_52&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This won&#39;t work if your Linux computer motherboard doesn&#39;t have an &lt;b&gt;RS232 DB9 COM Serial Port&lt;/b&gt; which leaves you with the second option.&lt;/p&gt;
&lt;h3&gt;USB to RJ45&lt;/h3&gt;
&lt;p&gt;This might be the ideal choice for many of you, because every motherboard will definitely include some USB ports. I also happen to have one of these and I bought it from this seller on that &lt;a href=&quot;https://www.aliexpress.com/item/32920427795.html?spm=a2g0o.productlist.0.0.667720feYBxJVA&amp;algo_pvid=c126f591-8aa4-40d6-9006-0d31320c170a&amp;algo_expid=c126f591-8aa4-40d6-9006-0d31320c170a-1&amp;btsid=dbb5dd46-a27a-4771-b034-7c1f17e9c12d&amp;ws_ab_test=searchweb0_0%2Csearchweb201602_4%2Csearchweb201603_52&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Configure Minicom to Work with Cisco Switch&lt;/h2&gt;
&lt;p&gt;Okay, it&#39;s time to create a Minicom configuration file.&lt;/p&gt;
&lt;h3&gt;Find Serial Connection Path&lt;/h3&gt;
&lt;p&gt;The moment you connect the switch from its RJ45 console port to your Linux computer, open up a terminal and enter.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;dmesg | grep tty&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let me show you a sample output if you are using an RS232 to RJ45 cable.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;[    0.000000] console [tty0] enabled
[    0.726168] 00:08: &lt;mark&gt;ttyS0&lt;/mark&gt; at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the other hand if you are using an USB to RJ45 cable, you should get something like this.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;[155582.296838] usb 3-2: FTDI USB Serial Device converter now attached to &lt;mark&gt;ttyUSB0&lt;/mark&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What you are looking for is the text marked with white colour as shown in the samples above. Now, accordingly for each output sample the serial connection path is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/dev/ttyS0&lt;/li&gt;
&lt;li&gt;/dev/ttyUSB0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note yours down and proceed to the next step.&lt;/p&gt;
&lt;h3&gt;Create Configuration File&lt;/h3&gt;
&lt;p&gt;Again, open the terminal and enter.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;sudo minicom -s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will be greeted with the main menu list for Mnicom now go to &lt;code class=&quot;micro&quot;&gt;Configuration → Serial Port Setup&lt;/code&gt; and you should see another menu to define which serial port path you are going to use.&lt;/p&gt;
&lt;p&gt;Now, press &lt;code class=&quot;micro&quot;&gt;A&lt;/code&gt; on your keyboard and enter the serial connection path that you have noted from the previous step which is for example something like this &lt;code class=&quot;micro&quot;&gt;/dev/ttyUSB0&lt;/code&gt; in my case, then press &lt;code class=&quot;micro&quot;&gt;Enter&lt;/code&gt; to go back to the serial port setup menu.&lt;/p&gt;
&lt;p&gt;Next, press &lt;code class=&quot;micro&quot;&gt;E&lt;/code&gt; on your keyboard, resulting in another menu for &lt;code class=&quot;micro&quot;&gt;Bps/Par/Bits&lt;/code&gt; rate, from that menu press &lt;code class=&quot;micro&quot;&gt;C&lt;/code&gt; to set the rate to &lt;code class=&quot;micro&quot;&gt;9600 8N1&lt;/code&gt; then press &lt;code class=&quot;micro&quot;&gt;Enter&lt;/code&gt; to go back to the serial port setup menu.&lt;/p&gt;
&lt;p&gt;Last but not least, I prefer to enable the &lt;code class=&quot;micro&quot;&gt;Hardware Flow Control&lt;/code&gt; so just press &lt;code class=&quot;micro&quot;&gt;F&lt;/code&gt; on your keyboard and toggle that option to &lt;code class=&quot;micro&quot;&gt;Yes&lt;/code&gt; then press &lt;code class=&quot;micro&quot;&gt;Enter&lt;/code&gt; to go back to Minicom main menu.&lt;/p&gt;
&lt;p&gt;In the main menu choose the &lt;code class=&quot;micro&quot;&gt;Save setup as&lt;/code&gt; option and give it a name, in my case I named it as &lt;code class=&quot;micro&quot;&gt;cisco&lt;/code&gt; then finally press &lt;code class=&quot;micro&quot;&gt;Enter&lt;/code&gt; and you have successfully created a Minicom configuration file to connect with your Cisco switch.&lt;/p&gt;
&lt;h3&gt;Communicate with Cisco Switch Serial Console&lt;/h3&gt;
&lt;p&gt;Basically, every time you want to communicate with your Cisco switch you will only have to load the configuration file that you have created for Minicom with a simple single command from the terminal.&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;&lt;span class=&quot;terminal-line&quot; prefix=&quot;$&quot;&gt;sudo minicom &lt;mark&gt;cisco&lt;/mark&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice that I am running Minicom calling the &quot;cisco&quot; configuration file that we created earlier, if everything is done correctly press &quot;Enter&quot; right after you run that command and you will be presented with something like this:&lt;/p&gt;
&lt;pre data-codetype=&quot;BASH&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;Welcome to minicom 2.7.1

OPTIONS: I18n 
Compiled on Aug 13 2017, 15:25:34.
Port /dev/ttyUSB0, 02:35:45

Press CTRL-A Z for help on special keys


Switch&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you can see the hostname &quot;Switch&quot; then that indicates it has connected successfully, enter any command to the switch like &lt;code class=&quot;micro&quot;&gt;show interface&lt;/code&gt; for example, and see if you are getting a response to make sure.&lt;/p&gt;</description><link>http://www.ismoothblog.com/2019/07/access-cisco-switch-serial-console-linux.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguKYVCgg-bkJHH9-a9U8hRlgWj7SLbJtthjpIX92urPv3PtsG5_0MmqOKlEzZvxJ4e1ia60n2bTHfW9ukV_00P1Pzc_i4GDQEIUDlvUK9Q_DrfJ07ZkprCvvKj1MtITgSN8wtzVizufCA/s72-c/rj45-network-cable.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-3850004396560971427</guid><pubDate>Mon, 01 Jul 2019 07:31:00 +0000</pubDate><atom:updated>2021-01-02T16:12:30.200-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">Tutorials</category><title>How to Install VMware ESXi 6.7 on Dell PowerEdge R720</title><description>As I stated in the previous post, I am building a computer lab at home and I acquired a &lt;a href=&quot;https://www.dell.com/ky/business/p/poweredge-r720/pd&quot;&gt;Dell PowerEdge R720&lt;/a&gt; server which is going to be the backbone of my &lt;a href=&quot;https://www.reddit.com/r/homelab/&quot; rel=&quot;nofollow&quot;&gt;homelab&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCCY19RDufhd6vOoJnAHZsN_YAox4LksfXd4wVVFyggomPYJoC0oO9-_oke4-uxkWmHAUzvOZ9nxR5TnFj-xsZoP22AnofNbswDEN_GUodz-KoDjy9jhE6ZiJ94Dv64ZXTUCRqzs3ZzL4/s0/virtualization-processor.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCCY19RDufhd6vOoJnAHZsN_YAox4LksfXd4wVVFyggomPYJoC0oO9-_oke4-uxkWmHAUzvOZ9nxR5TnFj-xsZoP22AnofNbswDEN_GUodz-KoDjy9jhE6ZiJ94Dv64ZXTUCRqzs3ZzL4/s0/virtualization-processor.jpg&quot; width=&quot;380&quot; height=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This awesome machine was built for the sole purpose of serving as a powerhouse for enterprise use cases, even the giant Google is using a special rebranded variant of that Dell server model at their data centers.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgP6uBkAo17ZBc1Q0ezGSK0KdSMhI7d92Wmsa_5gyfwAqAfYlJz671tWhToXMSIn6Bz4daU6kUFEkTY-o94a_-FjipqjsTBTXnTXUkzEmcybkzEbIN93yB8rA3XH8OxyItFfGMdiR-9fU/s0/dell-poweredge-r720.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgP6uBkAo17ZBc1Q0ezGSK0KdSMhI7d92Wmsa_5gyfwAqAfYlJz671tWhToXMSIn6Bz4daU6kUFEkTY-o94a_-FjipqjsTBTXnTXUkzEmcybkzEbIN93yB8rA3XH8OxyItFfGMdiR-9fU/s0/dell-poweredge-r720.jpg&quot; width=&quot;380&quot; height=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Today, I decided to utilize all my server resources for virtualization where I can host as many operating systems as I wish with whatever software or service I desire. Thus, I am going to install the famous &lt;b&gt;VMware ESXi 6.7 U3&lt;/b&gt; hypervisor and explain every step on this article.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Get DellEMC Customized Image for VMware ESXi 6.7 U3&lt;/h2&gt;
Now, even though the R720 is not officially supported by this new image, trust my word that it will work perfectly on this server especially for a homelab user. The only disadvantage is that you are not getting official support from Dell which can only concern enterprise users.
&lt;div class=&quot;download-button&quot;&gt;
&lt;a class=&quot;download-inner&quot; href=&quot;https://www.dell.com/support/home/us/en/04/drivers/driversdetails?driverid=1k5wn&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;br&gt;
&lt;div class=&quot;download-front&quot;&gt;
&lt;span class=&quot;icon fa fa-cloud&quot;&gt;&lt;/span&gt; Download&lt;br&gt;
&lt;/div&gt;
&lt;div class=&quot;download-backup&quot;&gt;
&lt;span class=&quot;icon fa fa-hdd-o&quot;&gt;&lt;/span&gt; Click Here!&lt;br&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;br&gt;
&lt;/div&gt;
Just scroll down to find the download link for the &lt;code class=&quot;micro&quot;&gt;ISO Image&lt;/code&gt; and get that.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Flash Installation Image&lt;/h2&gt;
Even though you can typically burn the ISO file into a DVD as the server has a drive for it. I would suggest that you use a USB flash memory stick which is more convenient at least in my opinion. So, we&#39;re going to use a small utility called &lt;a href=&quot;https://rufus.ie/&quot; rel=&quot;nofollow&quot;&gt;Rufus&lt;/a&gt;, visit their website and grab your link.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDieX4s0rOg6CN_mDrOxv4Ztn8UkiwuPysTUSExDb6y3CVusYCCtc223W6tJDelwGfRGtCeM_XqPdYBncDCgc0XBWfG3vURarzuHQWkH7j4MZpuROYr0zjQCezXpGrSI-_zlFUbkOR1Vw/s0/esxi-iso-rufus.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDieX4s0rOg6CN_mDrOxv4Ztn8UkiwuPysTUSExDb6y3CVusYCCtc223W6tJDelwGfRGtCeM_XqPdYBncDCgc0XBWfG3vURarzuHQWkH7j4MZpuROYr0zjQCezXpGrSI-_zlFUbkOR1Vw/s0/esxi-iso-rufus.png&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Insert the flash device into your machine.&lt;/li&gt;
&lt;li&gt;Select your installation media under &quot;Device&quot; where in my case it was a 8GB USB flash memory.&lt;/li&gt;
&lt;li&gt;Select &quot;MBR&quot; partition scheme.&lt;/li&gt;
&lt;li&gt;Choose &quot;BIOS or UEFI&quot; as your target system.&lt;/li&gt;
&lt;/ul&gt;
Now, click the &quot;Start&quot; button and wait for that bar to be fully green in &quot;READY&quot; state as shown in the picture above, then remove the installation media when finished.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Boot Installation Media on Dell R720 Server&lt;/h2&gt;
First of all, I prefer installing the VMware hypervisor into the internal USB flash port not to be confused with the installation media itself. If you open the top cover you will find a USB port inside the case near the power supply housing on the motherboard where you can insert a flash drive.&lt;br /&gt;
&lt;br /&gt;
This way we will avoid wasting a whole hard drive to contain solely the hypervisor itself. I will bring a spare USB flash to be permanently attached to the internal USB port where I will install the hypervisor to it after booting to the installation media that we just prepared.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Insert the installation flash drive into the front USB port then power on your R720 server.&lt;/li&gt;
&lt;li&gt;Wait for the system to boot then press &quot;F11&quot; to enter the &quot;UEFI Boot Manager&quot;.&lt;/li&gt;
&lt;li&gt;On the &quot;Boot Manager Main Menu&quot; select &quot;UEFI Boot Menu&quot;.&lt;/li&gt;
&lt;li&gt;From the boot options appearing on your screen select &quot;Disk Connected to front USB&quot;.&lt;/li&gt;
&lt;/ul&gt;
There you are, now ESXi is supposedly loading the installer.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Install VMware ESXi Hypervisor&lt;/h2&gt;
Well, nothing too fancy here when you get into the installation screen just follow the dialogs and accept the terms and conditions. What is important is that when it asks you &lt;code class=&quot;micro&quot;&gt;Select a Disk to install or upgrade&lt;/code&gt; please make sure to choose the internal USB drive or whatever else you want to put the hypervisor on.&lt;br /&gt;
&lt;br /&gt;
After that, it will ask you about your preferred &quot;Keyboard Layout&quot; configuration and then you will be presented with a dialog to set your root password which will be used mainly to enter the management interface, that&#39;s all.&lt;br /&gt;
&lt;br /&gt;
Please make sure to remove your installation media after it finishes, it will ask you to do so anyway before rebooting the system.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Network Configuration for Management Interface&lt;/h2&gt;
The first thing I would do on my first boot is configuring a static IP address which will make the web management interface for that server much easier to reach on my internal network. Now, if you have done any configuration it will automatically defaults to &lt;code class=&quot;micro&quot;&gt;DHCP&lt;/code&gt; but I don&#39;t want that.&lt;br /&gt;
&lt;br /&gt;
To manually configure the network interface:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Press &quot;F2&quot; to enter the system customization menu from the host machine.&lt;/li&gt;
&lt;li&gt;Authenticate yourself by entering the same password that you have specified for root during he installation.&lt;/li&gt;
&lt;li&gt;Select &quot;Configure Management Network&quot;.&lt;/li&gt;
&lt;/ul&gt;
Okay, in my case I went to &lt;code class=&quot;micro&quot;&gt;IPv4 Configuration&lt;/code&gt; then I ticked &quot;Set static IPv4 address&quot; and enter my network configuration. I set it up on an IP address of &lt;code class=&quot;micro&quot;&gt;10.0.0.200&lt;/code&gt; since this is the main subnet on my homelab network.&lt;br /&gt;
&lt;br /&gt;
Finally, you can save configuration then logout.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
I should now be able to reach my management interface for that hypervisor host server on this address &lt;code class=&quot;micro&quot;&gt;https://10.0.0.200&lt;/code&gt;, so let me enter this on my browser.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4NnlUdOuYERlMKMi6s6kQDcImTRuXnfX9KuoNWOv32ZjEra0j7hXs5CC_6MhiJv0xTea8PSrxXeFC0pIxLYgbt_HcOGZetgJZdwm9q6hceY1DfuiaLsk1_OGiOr66vCjHoStckWLRqUE/s0/esxi-management-interface.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4NnlUdOuYERlMKMi6s6kQDcImTRuXnfX9KuoNWOv32ZjEra0j7hXs5CC_6MhiJv0xTea8PSrxXeFC0pIxLYgbt_HcOGZetgJZdwm9q6hceY1DfuiaLsk1_OGiOr66vCjHoStckWLRqUE/s0/esxi-management-interface.png&quot; width=&quot;380&quot; height=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Yes success! I am welcomed with a login screen, I entered &quot;root&quot; as the username and the password that I have set during the installation. Let me learn more about it and then I will be back to share my experience.</description><link>http://www.ismoothblog.com/2019/07/install-vmware-esxi-hypervisor-on-dell-poweredge.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCCY19RDufhd6vOoJnAHZsN_YAox4LksfXd4wVVFyggomPYJoC0oO9-_oke4-uxkWmHAUzvOZ9nxR5TnFj-xsZoP22AnofNbswDEN_GUodz-KoDjy9jhE6ZiJ94Dv64ZXTUCRqzs3ZzL4/s72-c/virtualization-processor.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-6684268286473754375</guid><pubDate>Thu, 27 Jun 2019 23:02:00 +0000</pubDate><atom:updated>2021-01-10T23:33:31.335-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Homelab</category><category domain="http://www.blogger.com/atom/ns#">pfSense</category><category domain="http://www.blogger.com/atom/ns#">Pi-Hole</category><title>How to Use Pi Hole on your pfSense Router</title><description>I&#39;ve started experimenting at home with enterprise grade gear of network switches and servers, this &lt;a href=&quot;https://www.reddit.com/r/homelab/&quot; rel=&quot;nofollow&quot;&gt;trend&lt;/a&gt; is referred to as a &lt;code class=&quot;micro&quot;&gt;Homelab&lt;/code&gt; and there&#39;s a big community around it.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiymDBgfp-c5if9RjlsBeO4hVlR-xvA2oW3DzylY7-4jLE4gwo7MirKeFpqo98wiaYKPKTB8RvW95WaCaz4De5Fu4V5S7hpaQywSiSoWoGrG-bgiwMaDYil7zOrX0Cfr-LzoSQsEOkkb8s/s0/network.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiymDBgfp-c5if9RjlsBeO4hVlR-xvA2oW3DzylY7-4jLE4gwo7MirKeFpqo98wiaYKPKTB8RvW95WaCaz4De5Fu4V5S7hpaQywSiSoWoGrG-bgiwMaDYil7zOrX0Cfr-LzoSQsEOkkb8s/s0/network.jpg&quot; width=&quot;380&quot; height=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Soon I will be covering every part of my humble homelab in a separate post. For now, I decided to write this article to help beginners who have installed &lt;b&gt;Pi Hole&lt;/b&gt; on a VM or maybe a Raspberry Pi and don&#39;t really know how to configure thier &lt;b&gt;pfSense&lt;/b&gt; router properly with Pi Hole as the primary DNS server.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Determine IP Address Information&lt;/h2&gt;
Now, I suppose you have to determine the IP addresses of both:
&lt;ul&gt;
&lt;li&gt;pfSense Router&lt;/li&gt;
&lt;li&gt;Pi Hole VM or Device&lt;/li&gt;
&lt;/ul&gt;
Please make sure you have assigned a static IP address for the Pi Hole server.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Configure pfSense Router with Pi Hole&lt;/h2&gt;
From your pfSense control panel which happens to be on this address &lt;code class=&quot;micro&quot;&gt;https://10.0.0.1&lt;/code&gt; in my case. Please proceed from the menu above to &lt;code class=&quot;micro&quot;&gt;System → General Setup → DNS Server Settings&lt;/code&gt; where you should find this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlMbLgNAXHT3ukPWsydUZHMGIkeN1YSeGwQMY708ogiqc7eEkns0sKbQ_QgM_kNFQ0_wucEWYUTZvSVjJ22i6wd5c7humkFUENMhKgTzwM_1fbYIr8nVDTkGFaNaC42kmUruG0fLFTgW8/s0/pfsense-dns-server-settings.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlMbLgNAXHT3ukPWsydUZHMGIkeN1YSeGwQMY708ogiqc7eEkns0sKbQ_QgM_kNFQ0_wucEWYUTZvSVjJ22i6wd5c7humkFUENMhKgTzwM_1fbYIr8nVDTkGFaNaC42kmUruG0fLFTgW8/s0/pfsense-dns-server-settings.png&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Please refer to the image above and make sure you have added the Pi Hole IP address as a new DNS Server which is &lt;code class=&quot;micro&quot;&gt;10.0.0.100&lt;/code&gt; in my case. In addition to that, untick both of those options you can find at the bottom.
&lt;ul&gt;
&lt;li&gt;Allow DNS server list to be overridden by DHCP/PPP on WAN&lt;/li&gt;
&lt;li&gt;Do not use the DNS Forwarder/DNS Resolver as a DNS server for the firewall&lt;/li&gt;
&lt;/ul&gt;
After that, proceed to &lt;code class=&quot;micro&quot;&gt;Services → DNS Resolver → General Settings&lt;/code&gt; where you will find settings related to pfSense native DNS resolver, now make sure you have all of the following options ticked:
&lt;ul&gt;
&lt;li&gt;Enable DNS resolver&lt;/li&gt;
&lt;li&gt;Enable DNSSEC Support&lt;/li&gt;
&lt;li&gt;Enable Forwarding Mode&lt;/li&gt;
&lt;/ul&gt;
That&#39;s it, now you can proceed to the final step which is confirming everything is working as intended.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Ensure Pi Hole is Working&lt;/h2&gt;
Okay, now you can go to your Pi Hole admin panel which is in my case hosted on this address &lt;code class=&quot;micro&quot;&gt;http://10.0.0.100/admin/&lt;/code&gt; then you should open a web browser on any of your pfSense router client devices, try visiting any website and observe what&#39;s happening on the Pi Hole admin panel overview.&lt;br /&gt;
&lt;br /&gt;
If you can see live information about the DNS queries that Pi Hole server is receiving while surfing the web on your client devices, that indicates everything is configured properly.</description><link>http://www.ismoothblog.com/2019/06/configure-pi-hole-on-pfsense-router.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiymDBgfp-c5if9RjlsBeO4hVlR-xvA2oW3DzylY7-4jLE4gwo7MirKeFpqo98wiaYKPKTB8RvW95WaCaz4De5Fu4V5S7hpaQywSiSoWoGrG-bgiwMaDYil7zOrX0Cfr-LzoSQsEOkkb8s/s72-c/network.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-3820372435330690803</guid><pubDate>Sat, 28 Jan 2017 12:51:00 +0000</pubDate><atom:updated>2020-11-25T06:40:58.421-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DRM</category><title>How to Remove DRM from Dark Horse Comics</title><description>Over the past 5 years, we&#39;ve been providing many tutorials on &lt;a href=&quot;https://www.ismoothblog.com/2012/12/how-to-get-rid-of-drm-on-your-e-books.html&quot;&gt;how to remove DRM from eBooks&lt;/a&gt; and such. Today, I&#39;d like to share with you a method that will let you download a DRM-Free copy of your legally purchased &lt;b&gt;Dark Horse Comics&lt;/b&gt; content directly from browser through their official site.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu5O2X6V7Skn-S82scXh7_m411hwD5HRmupkzH3E99tiWHX0HoJLtiMuWqCmlCxJHfWt-8-fWos0LeIUN0tIo8z7UIA0OXT-csToegao2mVb8tdBa8t1aGXi9rqYkx8GX1f5XI7FOGXzc/s1600/Dark-Horse-Comics-DRM-Removal.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu5O2X6V7Skn-S82scXh7_m411hwD5HRmupkzH3E99tiWHX0HoJLtiMuWqCmlCxJHfWt-8-fWos0LeIUN0tIo8z7UIA0OXT-csToegao2mVb8tdBa8t1aGXi9rqYkx8GX1f5XI7FOGXzc/s320/Dark-Horse-Comics-DRM-Removal.png&quot; width=&quot;320&quot; height=&quot;216&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You can follow this tutorial for instructions about &lt;a href=&quot;https://www.ismoothblog.com/search/label/DRM?&amp;max-results=5&quot;&gt;DRM Removal&lt;/a&gt; simply by using user scripts on your browser. If you have any question or concerns about whether is it legal or not you are welcome to see our &lt;a href=&quot;https://www.ismoothblog.com/p/drm-policy.html&quot;&gt;DRM Policy&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;idea&quot;&gt;
This is only legal as long as you are the original owner of the content and you are planning to remove DRM to fully gain the right of ownership &lt;u&gt;&lt;b&gt;NOT&lt;/b&gt;&lt;/u&gt; for sharing it.&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;How Does it Work&lt;/h2&gt;
Basically, you will need to enable user scripts over &lt;a href=&quot;https://greasyfork.org/en/help/installing-user-scripts&quot; rel=&quot;nofollow&quot;&gt;Greasy Fork&lt;/a&gt;, depending on your browser you have to install a certain addon, then navigate to acquire and install what seems to be some sort of a &lt;a href=&quot;https://greasyfork.org/en/scripts/26635-dark-horse-downloader&quot; rel=&quot;nofollow&quot;&gt;Dark Horse Comics Downloader&lt;/a&gt; script.&lt;br /&gt;
&lt;br /&gt;
With that being said, let me post a quotation written by the original author of this script:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Made by Hayden Schiff (oxguy3), license is Creative Commons Zero.&lt;br /&gt;
&lt;br /&gt;
This script makes it really easy to download a DRM-free copy of your digital comics on Dark Horse Digital. Simply go to your &lt;a href=&quot;https://digital.darkhorse.com/bookshelf?display_mode=gallery&quot; rel=&quot;nofollow&quot;&gt;Dark Horse bookshelf&lt;/a&gt;, then disable &quot;Stack by Series&quot; and switch to Gallery View if you haven&#39;t already. You will now see a &quot;Download&quot; button below all your comics.&lt;br /&gt;
&lt;br /&gt;
When you click the download button for any of your comics, it&#39;ll open the reader for that comic, then start downloading the comic. A red box in the middle of the screen will show you the progress of the download (be warned that things may be a bit laggy while it&#39;s downloading). Once it&#39;s done, a .CBZ file will pop into your downloads!&lt;br /&gt;
&lt;br /&gt;
If you aren&#39;t familiar, a .CBZ file is just a zip file full of JPGs. You can easily open it with a reader app or convert it to a PDF or whatever.
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;warning&quot;&gt;
Do not send the (&lt;b&gt;DRM-Free&lt;/b&gt;) content to anybody else and keep it only for self-use and also keep in mind that the purpose of removing DRM is to enjoy your legally purchased &lt;u&gt;Books&lt;/u&gt; or &lt;u&gt;Media&lt;/u&gt; on other devices.&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;How to Use&lt;/h2&gt;
Well, I can sum things up in order within the following steps to make it easier:
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Enable User Scripts:&lt;/b&gt; To be able to run user scripts, you need to &lt;a href=&quot;https://greasyfork.org/en/help/installing-user-scripts&quot; rel=&quot;nofollow&quot;&gt;install a specific addon&lt;/a&gt; according to your browser.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Install Script:&lt;/b&gt; Simply &lt;a href=&quot;https://greasyfork.org/en/scripts/26635-dark-horse-downloader&quot; rel=&quot;nofollow&quot;&gt;install the required script&lt;/a&gt; for Dark Horse Comics by pressing on the green button.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Download DRM-Free Copy:&lt;/b&gt; Go to your &lt;a href=&quot;https://digital.darkhorse.com/bookshelf?display_mode=gallery&quot; rel=&quot;nofollow&quot;&gt;Dark Horse bookshelf&lt;/a&gt;, then disable &quot;Stack by Series&quot; and switch to Gallery View if you haven&#39;t already.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
When everything is done correctly, you should now see a &quot;Download&quot; button below all your comics, that will let you download a clean copy as a &quot;.CBZ&quot; file that can be &lt;a href=&quot;https://www.ismoothblog.com/2013/01/calibre-free-ebook-converter-any-format.html&quot;&gt;converted easily to any other format&lt;/a&gt; including PDF or EPUB.</description><link>http://www.ismoothblog.com/2017/01/dark-horse-digital-comics-drm-removal-download.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu5O2X6V7Skn-S82scXh7_m411hwD5HRmupkzH3E99tiWHX0HoJLtiMuWqCmlCxJHfWt-8-fWos0LeIUN0tIo8z7UIA0OXT-csToegao2mVb8tdBa8t1aGXi9rqYkx8GX1f5XI7FOGXzc/s72-c/Dark-Horse-Comics-DRM-Removal.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-3733861923827000938</guid><pubDate>Sat, 14 Jan 2017 20:47:00 +0000</pubDate><atom:updated>2017-01-15T01:06:52.156-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jekyll</category><category domain="http://www.blogger.com/atom/ns#">JekySimple</category><title>JekySimple is a Static Site Management Tool for Jekyll</title><description>Recently, I started my journey with &lt;b&gt;Jekyll&lt;/b&gt; that led me to discover a whole new approach to the blogging realm which is basically a &lt;b&gt;Static Site Generator&lt;/b&gt; that let you create extremely accessible and functional static websites including blogs, of course.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk0idtt69B8ILDJbBQL-CvTcUTXQwD0sEJAcfY34t3zY7JMP8_681EEcnZXbF0Wg1iKAAJYQLTw24V-aBOrPmLEoYdhqNhRDi3tEbJOEH8Xplshr8hkbeuDP99e1Przx-f2CVuIqI1aFE/s1600/JekySimple-Static-Site-Management-Jekyll.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk0idtt69B8ILDJbBQL-CvTcUTXQwD0sEJAcfY34t3zY7JMP8_681EEcnZXbF0Wg1iKAAJYQLTw24V-aBOrPmLEoYdhqNhRDi3tEbJOEH8Xplshr8hkbeuDP99e1Przx-f2CVuIqI1aFE/s320/JekySimple-Static-Site-Management-Jekyll.png&quot; width=&quot;320&quot; height=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In fact, during the course of my experience I found that it&#39;s extremely frustrating to keep going through many steps to achieve some routine management tasks such as building, previewing, posting, deploying, etc.&lt;br /&gt;
&lt;br /&gt;
So, that motivated me to create an easy-to-use tool which does all those things simply with individual commands, and I decided to assign &lt;b&gt;JekySimple&lt;/b&gt; for a name representing my humble project as a whole, the tool now is available on a git repository.&lt;br /&gt;
&lt;div class=&quot;download-button&quot;&gt;
&lt;a class=&quot;download-inner&quot; href=&quot;https://github.com/iSmoothBlog/JekySimple&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;br /&gt;
&lt;div class=&quot;download-front&quot;&gt;
&lt;span class=&quot;icon fa fa-github-alt&quot;&gt;&lt;/span&gt; GitHub Repository&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;download-backup&quot;&gt;
&lt;span class=&quot;icon fa fa-hdd-o&quot;&gt;&lt;/span&gt; JekySimple&lt;br /&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;h2&gt;JekySimple Overview&lt;/h2&gt;
&lt;b&gt;JekySimple&lt;/b&gt; is a humble bash script created for &lt;b&gt;Jekyll&lt;/b&gt; as a management tool to steadily generate static sites with simple and individual commands on &lt;b&gt;Linux&lt;/b&gt; based operating systems, it only requires one-time configuration for a single user along with the ability to support multiple accounts.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Main Features&lt;/h3&gt;
Lets start listing the most desirable features that JekySimple does offer:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Ability to initialize and automatically configure Git Repositories for Jekyll.&lt;/li&gt;
&lt;li&gt;Ability to post dynamically into Jekyll including date with pre-configured post templates.&lt;/li&gt;
&lt;li&gt;You can specify a text editor to be used when ever you want to create a post.&lt;/li&gt;
&lt;li&gt;You can preview your changes with a simple command locally.&lt;/li&gt;
&lt;li&gt;You can build Jekyll easily using one command with all your preferred settings.&lt;/li&gt;
&lt;li&gt;It has a &quot;clean&quot; function to automatically clear all temporary and unnecessary files.&lt;/li&gt;
&lt;li&gt;Ability to deploy your site into Git Repositories or local Webservers.&lt;/li&gt;
&lt;li&gt;Support for auto-deploy and auto-commit features.&lt;/li&gt;
&lt;li&gt;GitHub Pages integration with an option to specify &quot;master&quot; or &quot;gh-pages&quot; branch for deployment.&lt;/li&gt;
&lt;li&gt;You can create multiple configuration files for different users with unique settings.&lt;/li&gt;
&lt;li&gt;All variables fall back to default when empty or missing from user config file.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
That and many more, I would like to state that each task will require a single command to perform, which makes routine management much easier for you to do.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Requirements&lt;/h3&gt;
This means you can&#39;t use JekySimple without the following conditions:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Any Linux OS with Bash.&lt;/li&gt;
&lt;li&gt;Git initializing and deployment features require a &quot;git&quot; package to be installed.
&lt;li&gt;You must already be able to build Jekyll normally just to make sure that everything is working.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
So, that&#39;s all as far as I can tell.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Limitations&lt;/h3&gt;
I would like to highlight the following limiting factors:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;It cannot work if you haven&#39;t installed and configured Jekyll properly.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
I will be listing more while testing, I am not entirely sure at the moment.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Usage&lt;/h2&gt;
Basically, after you prepare a special config file with your desired settings, you let &lt;b&gt;Jekysimple&lt;/b&gt; do all the stuff that are pre-configured already with a single command.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Initialize Git Repository&lt;/h3&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code class=&quot;bash&quot;&gt;jekysimple init&lt;/code&gt;&lt;/pre&gt;
This command will let you either initialize a completely new git repository that you have just created remotely, or clone an already existing Jekyll project to be paired with JekySimple. Anyway, if you prefer to just initialize git manually by yourself, then just fill required git information inside config file and skip this.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;New Post&lt;/h3&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code class=&quot;bash&quot;&gt;jekysimple post&lt;/code&gt;&lt;/pre&gt;
This option is used whenever you want to publish a new post, it will automatically enclose the date within a typical post template that you can customize. After that, it will launch your favorite text editor for you to edit the new post and save it.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Preview Jekyll Locally&lt;/h3&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code class=&quot;bash&quot;&gt;jekysimple preview&lt;/code&gt;&lt;/pre&gt;
That will technically perform &lt;code class=&quot;micro&quot;&gt;jekyll serve&lt;/code&gt; command but with your pre-configured settings for JekySimple, which will execute a local web service into the system so that you can preview the site on your browser before deploying it.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Build Jekyll Site&lt;/h3&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code class=&quot;bash&quot;&gt;jekysimple build&lt;/code&gt;&lt;/pre&gt;
Similarly, that will technically perform &lt;code class=&quot;micro&quot;&gt;jekyll build&lt;/code&gt; command but with your pre-configured settings for JekySimple.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Deploy to Git/Webserver&lt;/h3&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code class=&quot;bash&quot;&gt;jekysimple deploy&lt;/code&gt;&lt;/pre&gt;
Once you are confident and satisfied with the results after building/previewing, you can use this command to deploy changes online into your git repository host, make sure that you have identified git credentials correctly inside the config file.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Clean Build/Metadata&lt;/h3&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code class=&quot;bash&quot;&gt;jekysimple clean&lt;/code&gt;&lt;/pre&gt;
Well, nothing too fancy here it&#39;s quite self explanatory, this will firstly delete the built site from your system since you don&#39;t need that after deploying. Secondly, it will clean the source from Jekyll cache and metadata.</description><link>http://www.ismoothblog.com/2017/01/introduction-of-jekysimple-static-site-management-tool-for-jekyll.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk0idtt69B8ILDJbBQL-CvTcUTXQwD0sEJAcfY34t3zY7JMP8_681EEcnZXbF0Wg1iKAAJYQLTw24V-aBOrPmLEoYdhqNhRDi3tEbJOEH8Xplshr8hkbeuDP99e1Przx-f2CVuIqI1aFE/s72-c/JekySimple-Static-Site-Management-Jekyll.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-6629724586471069275</guid><pubDate>Sun, 18 Dec 2016 01:47:00 +0000</pubDate><atom:updated>2020-12-08T00:30:03.236-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blogger</category><category domain="http://www.blogger.com/atom/ns#">CSS</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><title>How to Add Simple Numeric Page Navigation Feature for Blogger</title><description>Unfortunately, &lt;b&gt;Blogger&lt;/b&gt; platform has no support for &lt;b&gt;Numeric Page Navigator&lt;/b&gt; by default, and that might be confusing for the regular reader. Probably, because it&#39;s something that they are unfamiliar with, and not the mention how simple it can make your blog to navigate.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixAdvBEfnkNPN8UYGHJ3Wwri2iXNTTwbUDApNT_UpA-yfEUnd4HpLI-rxh3L8uXe43hyrWZn2z0TNJMI0Bm6tks_RAoovbV5zQm9YZ85W-ZABIxsS0Tp-hRlz0G9iqvtEK4-Y5VHnugg8/s1600/Blogger-Numeric-Page-Navigation.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixAdvBEfnkNPN8UYGHJ3Wwri2iXNTTwbUDApNT_UpA-yfEUnd4HpLI-rxh3L8uXe43hyrWZn2z0TNJMI0Bm6tks_RAoovbV5zQm9YZ85W-ZABIxsS0Tp-hRlz0G9iqvtEK4-Y5VHnugg8/s320/Blogger-Numeric-Page-Navigation.jpg&quot; width=&quot;320&quot; height=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Of course, everyone knows that Blogger is extremely flexible and customizable blogging platform. Today, I am going to show you how to add basic page navigation with numbers featuring &lt;b&gt;Font Awesome&lt;/b&gt; arrow icons as &lt;code class=&quot;micro&quot;&gt;Next&lt;/code&gt; and &lt;code class=&quot;micro&quot;&gt;Previous&lt;/code&gt; buttons.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj43rOJmupdVJ-9-vnx5K2IiiYDas_qb37pDsjq12n_Cq8nqJMdvApO4ZEGo1ljW2jpK1D3uTMqF4eBtuXkxjAphYQesAY0QF6-P19wL-D4Z65gsFUriymp5TOGG26BUMuxsRRWcRh3rUY/s1600/Blogger-Numbered-Pager-Nabigation-Font-Awesome.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj43rOJmupdVJ-9-vnx5K2IiiYDas_qb37pDsjq12n_Cq8nqJMdvApO4ZEGo1ljW2jpK1D3uTMqF4eBtuXkxjAphYQesAY0QF6-P19wL-D4Z65gsFUriymp5TOGG26BUMuxsRRWcRh3rUY/s1600/Blogger-Numbered-Pager-Nabigation-Font-Awesome.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;demo-button&quot;&gt;
&lt;a class=&quot;demo-inner&quot; href=&quot;http://ismoothic.blogspot.com/blog/#blog-pager&quot; target=&quot;_blank&quot;&gt;&lt;br /&gt;
&lt;div class=&quot;demo-front&quot;&gt;
&lt;span class=&quot;icon fa fa-search&quot;&gt;&lt;/span&gt; Demo&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;demo-backup&quot;&gt;
&lt;span class=&quot;icon fa fa-hand-o-right&quot;&gt;&lt;/span&gt; Live View&lt;br /&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;h2&gt;Numeric Pager Navigation Features&lt;/h2&gt;
This is our implementation of this numbered pages blogger modification, and we focused mostly on making it as simple and functional as possible, here are the features:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;You can reach first and last page from anywhere.&lt;/li&gt;
&lt;li&gt;The list of pages wont exceed more than three at a time.&lt;/li&gt;
&lt;li&gt;Font Awesome arrow icons support.&lt;/li&gt;
&lt;li&gt;Implemented with minimal JavaScript and CSS.&lt;/li&gt;
&lt;li&gt;Works on blog index pages and labels as well.&lt;/li&gt;
&lt;li&gt;Works very well with responsive templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
That&#39;s all, you can post your suggestions in the comment section below, if you wish to see further improvements and features to this modification.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Add Numbered Pager to Blogger&lt;/h2&gt;
From your &lt;b&gt;Blogger Dashboard&lt;/b&gt; go directly to &lt;code class=&quot;micro&quot;&gt;Template → Edit HTML&lt;/code&gt; then follow the steps accordingly.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Ensure Font Awesome Support&lt;/h3&gt;
You have to make sure that your template support &lt;b&gt;Font Awesome&lt;/b&gt; icons by adding the following code (&lt;u&gt;ABOVE&lt;/u&gt;) your &lt;code class=&quot;micro&quot;&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; ending tag.&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Font Awesome&quot;&gt;&lt;code&gt;&amp;lt;link href=&amp;#39;//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
If your template already has this code, then just skip this and proceed to the next step.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Add JavaScript/CSS for Numeric Navigation&lt;/h3&gt;
Look for &lt;code class=&quot;micro&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; ending tag and put the following code (&lt;u&gt;ABOVE&lt;/u&gt;) it:&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;JavaScript&quot;&gt;&lt;code&gt;&amp;lt;script type=&amp;#39;text/javascript&amp;#39;&amp;gt;
//&amp;lt;![CDATA[
    var perPage = &lt;mark&gt;5&lt;/mark&gt;;
    var numPages = &lt;mark&gt;3&lt;/mark&gt;;
    var prevText = &amp;#39;&lt;mark&gt;&amp;lt;i aria-hidden=&amp;quot;true&amp;quot; class=&amp;quot;fa fa-angle-double-left&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;/mark&gt;&amp;#39;;
    var nextText = &amp;#39;&lt;mark&gt;&amp;lt;i aria-hidden=&amp;quot;true&amp;quot; class=&amp;quot;fa fa-angle-double-right&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;/mark&gt;&amp;#39;;
    var urlactivepage = location.href;
    var home_page = &amp;quot;/&amp;quot;;
    var noPage;
    var currentPage;
    var currentPageNo;
    var postLabel;
    pagecurrentg();

    function looppagecurrentg(pageInfo) {
        var html = &amp;#39;&amp;#39;;
        pageNumber = parseInt(numPages / 2);
        if (pageNumber == numPages - pageNumber) {
            numPages = pageNumber * 2 + 1
        }
        pageStart = currentPageNo - pageNumber;
        if (pageStart &amp;lt; 1) pageStart = 1;
        lastPageNo = parseInt(pageInfo / perPage) + 1;
        if (lastPageNo - 1 == pageInfo / perPage) lastPageNo = lastPageNo - 1;
        pageEnd = pageStart + numPages - 1;
        if (pageEnd &amp;gt; lastPageNo) pageEnd = lastPageNo;
        var prevNumber = parseInt(currentPageNo) - 1;
        if (currentPageNo &amp;gt; 1) {
            if (currentPage == &amp;quot;page&amp;quot; &amp;amp;&amp;amp; currentPageNo == 2) {
                html += &amp;#39;&amp;lt;span class=&amp;quot;showpage prevpage&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#39; + home_page + &amp;#39;&amp;quot;&amp;gt;&amp;#39; + prevText + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            } else if (currentPage == &amp;quot;label&amp;quot; &amp;amp;&amp;amp; currentPageNo == 2) {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum prevpage&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/search/label/&amp;#39; + postLabel + &amp;#39;?&amp;amp;max-results=&amp;#39; + perPage + &amp;#39;&amp;quot;&amp;gt;&amp;#39; + prevText + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            }
        }
        if (currentPageNo &amp;gt; 2) {
            if (currentPage == &amp;quot;page&amp;quot;) {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum prevpage&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectpage(&amp;#39; + prevNumber + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + prevText + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            } else {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum prevpage&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectlabel(&amp;#39; + prevNumber + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + prevText + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            }
        }
        if (pageStart &amp;gt; 1) {
            if (currentPage == &amp;quot;page&amp;quot;) {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#39; + home_page + &amp;#39;&amp;quot;&amp;gt;1&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            } else {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/search/label/&amp;#39; + postLabel + &amp;#39;?&amp;amp;max-results=&amp;#39; + perPage + &amp;#39;&amp;quot;&amp;gt;1&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            }
        }
        if (pageStart &amp;gt; 2) {
            html += &amp;#39; ... &amp;#39;
        }
        for (var jj = pageStart; jj &amp;lt;= pageEnd; jj++) {
            if (currentPageNo == jj) {
                html += &amp;#39;&amp;lt;span class=&amp;quot;pagecurrent&amp;quot;&amp;gt;&amp;#39; + jj + &amp;#39;&amp;lt;/span&amp;gt;&amp;#39;
            } else if (jj == 1) {
                if (currentPage == &amp;quot;page&amp;quot;) {
                    html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#39; + home_page + &amp;#39;&amp;quot;&amp;gt;1&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
                } else {
                    html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/search/label/&amp;#39; + postLabel + &amp;#39;?&amp;amp;max-results=&amp;#39; + perPage + &amp;#39;&amp;quot;&amp;gt;1&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
                }
            } else {
                if (currentPage == &amp;quot;page&amp;quot;) {
                    html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectpage(&amp;#39; + jj + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + jj + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
                } else {
                    html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectlabel(&amp;#39; + jj + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + jj + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
                }
            }
        }
        if (pageEnd &amp;lt; lastPageNo - 1) {
            html += &amp;#39;...&amp;#39;
        }
        if (pageEnd &amp;lt; lastPageNo) {
            if (currentPage == &amp;quot;page&amp;quot;) {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectpage(&amp;#39; + lastPageNo + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + lastPageNo + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            } else {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectlabel(&amp;#39; + lastPageNo + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + lastPageNo + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            }
        }
        var nextnumber = parseInt(currentPageNo) + 1;
        if (currentPageNo &amp;lt; lastPageNo) {
            if (currentPage == &amp;quot;page&amp;quot;) {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum nextpage&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectpage(&amp;#39; + nextnumber + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + nextText + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            } else {
                html += &amp;#39;&amp;lt;span class=&amp;quot;displaypageNum nextpage&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;redirectlabel(&amp;#39; + nextnumber + &amp;#39;);return false&amp;quot;&amp;gt;&amp;#39; + nextText + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;#39;
            }
        }
        var pageArea = document.getElementsByName(&amp;quot;pageArea&amp;quot;);
        var blogPager = document.getElementById(&amp;quot;blog-pager&amp;quot;);
        for (var p = 0; p &amp;lt; pageArea.length; p++) {
            pageArea[p].innerHTML = html
        }
        if (pageArea &amp;amp;&amp;amp; pageArea.length &amp;gt; 0) {
            html = &amp;#39;&amp;#39;
        }
        if (blogPager) {
            blogPager.innerHTML = html
        }
    }

    function totalcountdata(root) {
        var feed = root.feed;
        var totaldata = parseInt(feed.openSearch$totalResults.$t, 10);
        looppagecurrentg(totaldata)
    }

    function pagecurrentg() {
        var thisUrl = urlactivepage;
        if (thisUrl.indexOf(&amp;quot;/search/label/&amp;quot;) != -1) {
            if (thisUrl.indexOf(&amp;quot;?updated-max&amp;quot;) != -1) {
                postLabel = thisUrl.substring(thisUrl.indexOf(&amp;quot;/search/label/&amp;quot;) + 14, thisUrl.indexOf(&amp;quot;?updated-max&amp;quot;))
            } else {
                postLabel = thisUrl.substring(thisUrl.indexOf(&amp;quot;/search/label/&amp;quot;) + 14, thisUrl.indexOf(&amp;quot;?&amp;amp;max&amp;quot;))
            }
        }
        if (thisUrl.indexOf(&amp;quot;?q=&amp;quot;) == -1 &amp;amp;&amp;amp; thisUrl.indexOf(&amp;quot;.html&amp;quot;) == -1) {
            if (thisUrl.indexOf(&amp;quot;/search/label/&amp;quot;) == -1) {
                currentPage = &amp;quot;page&amp;quot;;
                if (urlactivepage.indexOf(&amp;quot;#PageNo=&amp;quot;) != -1) {
                    currentPageNo = urlactivepage.substring(urlactivepage.indexOf(&amp;quot;#PageNo=&amp;quot;) + 8, urlactivepage.length)
                } else {
                    currentPageNo = 1
                }
                document.write(&amp;quot;&amp;lt;script src=\&amp;quot;&amp;quot; + home_page + &amp;quot;feeds/posts/summary?max-results=1&amp;amp;alt=json-in-script&amp;amp;callback=totalcountdata\&amp;quot;&amp;gt;&amp;lt;\/script&amp;gt;&amp;quot;)
            } else {
                currentPage = &amp;quot;label&amp;quot;;
                if (thisUrl.indexOf(&amp;quot;&amp;amp;max-results=&amp;quot;) == -1) {
                    perPage = 20
                }
                if (urlactivepage.indexOf(&amp;quot;#PageNo=&amp;quot;) != -1) {
                    currentPageNo = urlactivepage.substring(urlactivepage.indexOf(&amp;quot;#PageNo=&amp;quot;) + 8, urlactivepage.length)
                } else {
                    currentPageNo = 1
                }
                document.write(&amp;#39;&amp;lt;script src=&amp;quot;&amp;#39; + home_page + &amp;#39;feeds/posts/summary/-/&amp;#39; + postLabel + &amp;#39;?alt=json-in-script&amp;amp;callback=totalcountdata&amp;amp;max-results=1&amp;quot; &amp;gt;&amp;lt;\/script&amp;gt;&amp;#39;)
            }
        }
    }

    function redirectpage(numberpage) {
        jsonstart = (numberpage - 1) * perPage;
        noPage = numberpage;
        var nameBody = document.getElementsByTagName(&amp;#39;head&amp;#39;)[0];
        var newInclude = document.createElement(&amp;#39;script&amp;#39;);
        newInclude.type = &amp;#39;text/javascript&amp;#39;;
        newInclude.setAttribute(&amp;quot;src&amp;quot;, home_page + &amp;quot;feeds/posts/summary?start-index=&amp;quot; + jsonstart + &amp;quot;&amp;amp;max-results=1&amp;amp;alt=json-in-script&amp;amp;callback=finddatepost&amp;quot;);
        nameBody.appendChild(newInclude)
    }

    function redirectlabel(numberpage) {
        jsonstart = (numberpage - 1) * perPage;
        noPage = numberpage;
        var nameBody = document.getElementsByTagName(&amp;#39;head&amp;#39;)[0];
        var newInclude = document.createElement(&amp;#39;script&amp;#39;);
        newInclude.type = &amp;#39;text/javascript&amp;#39;;
        newInclude.setAttribute(&amp;quot;src&amp;quot;, home_page + &amp;quot;feeds/posts/summary/-/&amp;quot; + postLabel + &amp;quot;?start-index=&amp;quot; + jsonstart + &amp;quot;&amp;amp;max-results=1&amp;amp;alt=json-in-script&amp;amp;callback=finddatepost&amp;quot;);
        nameBody.appendChild(newInclude)
    }

    function finddatepost(root) {
        post = root.feed.entry[0];
        var timestamp1 = post.published.$t.substring(0, 19) + post.published.$t.substring(23, 29);
        var timestamp = encodeURIComponent(timestamp1);
        if (currentPage == &amp;quot;page&amp;quot;) {
            var pAddress = &amp;quot;/search?updated-max=&amp;quot; + timestamp + &amp;quot;&amp;amp;max-results=&amp;quot; + perPage + &amp;quot;#PageNo=&amp;quot; + noPage
        } else {
            var pAddress = &amp;quot;/search/label/&amp;quot; + postLabel + &amp;quot;?updated-max=&amp;quot; + timestamp + &amp;quot;&amp;amp;max-results=&amp;quot; + perPage + &amp;quot;#PageNo=&amp;quot; + noPage
        }
        location.href = pAddress
    }
//]]&amp;gt;
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note&quot;&gt;
&lt;b style=&quot;color: green;&quot;&gt;Note:&lt;/b&gt; You can configure this script (if you want) to suit your blog layout by changing values marked at the top of the code.
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Option (1):&lt;/b&gt; Change &lt;code class=&quot;micro&quot;&gt;5&lt;/code&gt; to the number of posts shown in each page.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Option (2):&lt;/b&gt; Change &lt;code class=&quot;micro&quot;&gt;3&lt;/code&gt; to the number of pages shown at one time inside the navigator.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Option (3):&lt;/b&gt; Change &lt;code class=&quot;micro&quot;&gt;&amp;lt;i aria-hidden=&amp;quot;true&amp;quot; class=&amp;quot;fa fa-angle-double-left&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;/code&gt; to any other Font Awesome navigation arrow or even just a simple text to indicate the (&lt;u&gt;Previous&lt;/u&gt;) button.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Option (4):&lt;/b&gt; Change &lt;code class=&quot;micro&quot;&gt;&amp;lt;i aria-hidden=&amp;quot;true&amp;quot; class=&amp;quot;fa fa-angle-double-right&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;/code&gt; to any other Font Awesome navigation arrow or even just a simple text to indicate the (&lt;u&gt;Next&lt;/u&gt;) button.&lt;br /&gt;
&lt;br /&gt;
Now lets proceed to the next step, we need to include the CSS style code into the template, search for &lt;code class=&quot;micro&quot;&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; ending tag again and add the following code (&lt;u&gt;ABOVE&lt;/u&gt;) it.&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;CSS&quot;&gt;&lt;code&gt;&amp;lt;style type=&amp;#39;text/css&amp;#39;&amp;gt;
.blog-pager {
    background: none;
    clear: both;
    text-align: center;
    font-family: &amp;#39;Open Sans&amp;#39;;
    font-size: 13px;
    font-weight: 700;
    padding: 0;
    margin-top: 20px!important;
    margin-bottom: 30px!important;
    position: relative;
    height: 23px;
}

.blog-pager a {
    font-family: &amp;#39;Open Sans&amp;#39;;
    color: #666;
    display: inline-block;
    padding: 5px 10px;
    margin-left: 2px;
    margin-right: 2px;
    border-radius: 2px;
    transition: all .6s linear;
}

.blog-pager a:hover {
    background-color: #eee;
    color: #8493A0;
    text-decoration: none;
    transition: all .2s linear;
}

.blog-pager-newer-link {
    float: left
}

.blog-pager-older-link {
    float: right
}

.blog-pager a.home-link {
    text-transform: uppercase;
    font-weight: bold;
    background-color: transparent;
    color: #666;
    position: absolute;
    left: 50%;
    -webkit-transform: translateX(-50%);
    transform: translateX(-50%)
}

.blog-pager a.home-link:hover {
    background-color: #eee;
    text-decoration: none;
    color: #8493A0;
}

.displaypageNum a,
.showpage a,
.pagecurrent {
    padding: 5px 10px;
    display: inline-block;
    background-color: #fff;
    color: #666;
    margin-left: 2px;
    margin-right: 2px;
    border-radius: 2px;
    transition: all .6s linear;
}

.displaypageNum a:hover,
.showpage a:hover,
.pagecurrent {
    background-color: #eee;
    color: #8493A0;
    text-decoration: none;
    transition: all .2s linear;
}

.showpage,
.pagecurrent {
    font-weight: bold;
    color: #888;
}

.pages {
    background-color: #fff;
    color: #666;
    transition: all .2s linear;
}

span.displaypageNum.nextpage {
    float: right;
}

span.displaypageNum.prevpage {
    float: left;
}

span.showpage.prevpage {
    float: left;
}
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Change Post Navigation Links to Font Awesome&lt;/h3&gt;
This step is not necessary however, it will make your navigation text links inside blog posts appear as &lt;b&gt;Font Awesome&lt;/b&gt; icon buttons same as the blog index and label pages, look for &lt;code class=&quot;micro&quot;&gt;&amp;lt;data:newerPageTitle/&amp;gt;&lt;/code&gt; then replace it with:&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Font Awesome&quot;&gt;&lt;code&gt;&amp;lt;i aria-hidden=&amp;#39;true&amp;#39; class=&amp;#39;fa fa-angle-double-left&amp;#39;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
After that, search for &lt;code class=&quot;micro&quot;&gt;&amp;lt;data:olderPageTitle/&amp;gt;&lt;/code&gt; and replace it with:&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Font Awesome&quot;&gt;&lt;code&gt;&amp;lt;i aria-hidden=&amp;#39;true&amp;#39; class=&amp;#39;fa fa-angle-double-right&amp;#39;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;How to Fix Label Pages&lt;/h2&gt;
It seems that &lt;b&gt;Blogger&lt;/b&gt; will show 20 pages each by default on a label page specifically, so to fix that behavior you will have to change every &lt;code class=&quot;micro&quot;&gt;expr:href=&#39;data:label.url&#39;&lt;/code&gt; inside your template to the following code.&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Blogger Code&quot;&gt;&lt;code&gt;expr:href=&amp;#39;data:label.url + &amp;quot;?&amp;amp;amp;max-results=&lt;mark&gt;5&lt;/mark&gt;&amp;quot;&amp;#39;&lt;/code&gt;&lt;/pre&gt;
Change the highlighted number &lt;code class=&quot;micro&quot;&gt;5&lt;/code&gt; to the number of posts that you want to be displayed inside each page, it has to be exactly the same as your configuration of &lt;b&gt;JavaScript&lt;/b&gt; code above.</description><link>http://www.ismoothblog.com/2016/12/add-basic-responsive-numbered-pager-navigation-blogspot.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixAdvBEfnkNPN8UYGHJ3Wwri2iXNTTwbUDApNT_UpA-yfEUnd4HpLI-rxh3L8uXe43hyrWZn2z0TNJMI0Bm6tks_RAoovbV5zQm9YZ85W-ZABIxsS0Tp-hRlz0G9iqvtEK4-Y5VHnugg8/s72-c/Blogger-Numeric-Page-Navigation.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-6348856161347328880</guid><pubDate>Wed, 14 Dec 2016 22:11:00 +0000</pubDate><atom:updated>2018-04-28T16:19:07.029-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorials</category><title>How to Activate GPU Hardware Acceleration on Firefox &amp; Tor Browser</title><description>Nowadays, the main issue for the regular user of &lt;b&gt;Linux&lt;/b&gt; distributions (&lt;u&gt;Ubuntu, Debian, Arch, etc&lt;/u&gt;) is the lack of &lt;b&gt;GPU Hardware Acceleration&lt;/b&gt; on &lt;b&gt;Firefox&lt;/b&gt; and &lt;b&gt;Tor Browser&lt;/b&gt; or any other one built upon the former. Well, I am not saying there is no support for the feature at all.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPxTpoZXNm8Sbqkperj5OMKqd8CbnBrCH8cNqcyhNIFlc7ttXvJBk5ARDvSCcBuIR-aXBAsoDgU_yeHBYtzw2lV9YmgcUtfUU3bYh5qaJsPQ5EdGW0LIKXSml3u48Hg5syG5BvfwVTLFs/s1600/Firefox-GPU-Hardware-Acceleration.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPxTpoZXNm8Sbqkperj5OMKqd8CbnBrCH8cNqcyhNIFlc7ttXvJBk5ARDvSCcBuIR-aXBAsoDgU_yeHBYtzw2lV9YmgcUtfUU3bYh5qaJsPQ5EdGW0LIKXSml3u48Hg5syG5BvfwVTLFs/s320/Firefox-GPU-Hardware-Acceleration.jpg&quot; width=&quot;320&quot; height=&quot;226&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I am implying that you have to force activate it manually as it doesn&#39;t seem to work by default, I have no idea why but today we&#39;re going to learn how to force hardware acceleration and confirm that it&#39;s working as intended.&lt;br /&gt;
&lt;br /&gt;
Anyway, even though this tutorial is mostly targeted at Linux users, it should apply the same for any other operating system including &lt;b&gt;Windows&lt;/b&gt; and &lt;b&gt;Mac OS X&lt;/b&gt;. Previously, by the way I wrote an article explaining &lt;a href=&quot;https://www.ismoothblog.com/2016/12/enable-gpu-hardware-acceleration-chrome-and-chromium-browser.html&quot;&gt;how to activate GPU hardware acceleration on Chrome and Chromium browser&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Confirm Working GPU Hardware Acceleration&lt;/h2&gt;
Of course, before you go playing with options here and there you should ensure that your browser does actually &lt;u&gt;NOT&lt;/u&gt; have acceleration enabled. So, enter &lt;code class=&quot;micro&quot;&gt;about:support&lt;/code&gt; into the address bar, and that will display for you the current stat of the GPU process.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;GPU Hardware Acceleration Disabled&lt;/h3&gt;
When there is no hardware acceleration, the result should be &lt;b&gt;Soft Rendering&lt;/b&gt; which is something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinSaSTGO2iAfcRWLjaH99I6GpEZdjtc3ruzH1663tCB9HVJqqWsLI2w3F-l2JBmmQTs2Q2BBm8aL_uG9-7j9PY68t0Nme46ACHzV8kWNwmtf30DI1SSDvN1b634eJzSrAxaMiTSzj9ajo/s1600/Firefox-Basic-Soft-Rendering.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinSaSTGO2iAfcRWLjaH99I6GpEZdjtc3ruzH1663tCB9HVJqqWsLI2w3F-l2JBmmQTs2Q2BBm8aL_uG9-7j9PY68t0Nme46ACHzV8kWNwmtf30DI1SSDvN1b634eJzSrAxaMiTSzj9ajo/s1600/Firefox-Basic-Soft-Rendering.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;GPU Hardware Acceleration Enabled&lt;/h3&gt;
In the other hand, if you see something like below which is in my case &quot;&lt;u&gt;OpenGL&lt;/u&gt;&quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE8VciAMsLYP5SgwXQI-sLEkhMwQsVZcF5r8YX4OuYP7gZNmCI2bywoco3RQcgYx1Worqi5DsKVaM7YgQV5VZIZDxRIDaVnFjRfXcWj4Zf_rFuGcqcZ5VkxgJQaxsnRMQ2vORXbQ-jPBI/s1600/Firefox-Tor-Working-Hardware-Acceleration.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE8VciAMsLYP5SgwXQI-sLEkhMwQsVZcF5r8YX4OuYP7gZNmCI2bywoco3RQcgYx1Worqi5DsKVaM7YgQV5VZIZDxRIDaVnFjRfXcWj4Zf_rFuGcqcZ5VkxgJQaxsnRMQ2vORXbQ-jPBI/s1600/Firefox-Tor-Working-Hardware-Acceleration.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Then, this tutorial might not be of an use to you unless you&#39;re here to enrich your general technical knowledge. So, just make sure it&#39;s not &quot;&lt;u&gt;Basic&lt;/u&gt;&quot; and that&#39;s it&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Enable GPU Hardware Acceleration on Firefox&lt;/h2&gt;
Now, this will require two conditions to be met as explained below.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Enable Acceleration in Firefox Preferences&lt;/h3&gt;
First of all, you have make sure that hardware acceleration option is actually ticked from end-user settings. Navigate directly to &lt;code class=&quot;micro&quot;&gt;about:preferences#advanced&lt;/code&gt; from address bar then &lt;code class=&quot;micro&quot;&gt;Preferences → Advanced → Browsing&lt;/code&gt; and from there tick (&lt;u&gt;Use hardware acceleration when available&lt;/u&gt;) on.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMZXx4JwJYC2hpojypHWNa-xZRe-vJFMIB-vJ9N9UBWY7catUB9KdHK-fhzH2bhRFpEbV26gxgpPBgPzhm8xQ074ZSA7cTD4T_2ZKyIf5LIy1FmJaTtq26IOg5H_P2rWJSTTgG9nefCjk/s1600/Firefox-Preferences-Enable-User-GPU-Acceleration.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMZXx4JwJYC2hpojypHWNa-xZRe-vJFMIB-vJ9N9UBWY7catUB9KdHK-fhzH2bhRFpEbV26gxgpPBgPzhm8xQ074ZSA7cTD4T_2ZKyIf5LIy1FmJaTtq26IOg5H_P2rWJSTTgG9nefCjk/s1600/Firefox-Preferences-Enable-User-GPU-Acceleration.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;Override Software Rendering&lt;/h3&gt;
Basically, this option will ignore the irrelevant GPU blacklist and force enable hardware acceleration, navigate to &lt;code class=&quot;micro&quot;&gt;about:config&lt;/code&gt; from address bar and search for &lt;code class=&quot;micro&quot;&gt;layers.acceleration.force-enabled&lt;/code&gt; then right click on that and toggle it to &quot;&lt;u&gt;True&lt;/u&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9a5T37vqHja5Quup2s1ldawPapW0A_z6GtxlKuAsEUEh2nxrbQsRUoxFP3MQQs_mpYIUflKcOsWx9dl57P0Y2XVFm430vaKDv5M-Gtm1xvT6brHY9pXEmdKO_Hjjxnz_PXkQ3EOposbQ/s1600/Force-Hardware-Acceleration-Firefox.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9a5T37vqHja5Quup2s1ldawPapW0A_z6GtxlKuAsEUEh2nxrbQsRUoxFP3MQQs_mpYIUflKcOsWx9dl57P0Y2XVFm430vaKDv5M-Gtm1xvT6brHY9pXEmdKO_Hjjxnz_PXkQ3EOposbQ/s1600/Force-Hardware-Acceleration-Firefox.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
That&#39;s it! Relaunch your browser to take effect then follow instructions above to confirm that acceleration is working as intended and enjoy surfing the world wide web smoothly.&lt;br /&gt;
&lt;br /&gt;</description><link>http://www.ismoothblog.com/2016/12/firefox-and-tor-browser-gpu-hardware-acceleration.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPxTpoZXNm8Sbqkperj5OMKqd8CbnBrCH8cNqcyhNIFlc7ttXvJBk5ARDvSCcBuIR-aXBAsoDgU_yeHBYtzw2lV9YmgcUtfUU3bYh5qaJsPQ5EdGW0LIKXSml3u48Hg5syG5BvfwVTLFs/s72-c/Firefox-GPU-Hardware-Acceleration.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-7299386734274810337</guid><pubDate>Tue, 13 Dec 2016 03:35:00 +0000</pubDate><atom:updated>2017-01-05T00:04:00.754-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorials</category><title>How to Activate GPU Hardware Acceleration on Chrome &amp; Chromium Browser</title><description>Unfortunately, it seems that recent versions of &lt;b&gt;Chrome&lt;/b&gt; and &lt;b&gt;Chromium Browser&lt;/b&gt; are not working with &lt;b&gt;GPU Hardware Acceleration&lt;/b&gt; by default on most &lt;b&gt;Linux&lt;/b&gt; distributions in particular like Ubuntu, Debian, Arch, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPPz5lPEzNPJfZoGepNI-FOjou1FpBK9g0UOJcgoUh9ayfEfnN0HIrP_1Cepvv3viMge6hKfqWSiH7otcjN5A7GiUhb2-Fws_50kVkoxZvEbdQva62ePKGIouHg5GAvSuKDHOlhsb5Klg/s1600/Chrome-Browser-GPU-Hardware-Acceleration.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPPz5lPEzNPJfZoGepNI-FOjou1FpBK9g0UOJcgoUh9ayfEfnN0HIrP_1Cepvv3viMge6hKfqWSiH7otcjN5A7GiUhb2-Fws_50kVkoxZvEbdQva62ePKGIouHg5GAvSuKDHOlhsb5Klg/s320/Chrome-Browser-GPU-Hardware-Acceleration.jpg&quot; width=&quot;320&quot; height=&quot;226&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Well, that is unless you enable it manually with certain developer options to force your browser to take advantage of the GPU driver on your system. Although, this tutorial might be targeted at Linux users, it should apply and work just fine for any other system running &lt;b&gt;Chrome Browser&lt;/b&gt; including Windows and Mac OS X.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Confirm Working GPU Hardware Acceleration&lt;/h2&gt;
Of course, before you go playing with options here and there you should ensure that your browser does actually &lt;u&gt;NOT&lt;/u&gt; have acceleration enabled. So, enter &lt;code class=&quot;micro&quot;&gt;chrome://gpu&lt;/code&gt; into the address bar, and that will display for you the current stat of the GPU process.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;GPU Hardware Acceleration Disabled&lt;/h3&gt;
When there is no hardware acceleration, the result should be &lt;b&gt;Software Acceleration&lt;/b&gt; which is something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUOfc1sK7NScnecXcdFlMu7ec_ByLCS7XqN7fZ4xbU_VObueS2UFgcyhyKYEf11Gk1q00wxzJwzGAc_pZZ3hnMWWhCyXW3OgOjR8KZniu4rD3zSRnMgutYX7jcBmM-P_sXIF_3d3swLtM/s1600/Chrome-Software-Acceleration.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUOfc1sK7NScnecXcdFlMu7ec_ByLCS7XqN7fZ4xbU_VObueS2UFgcyhyKYEf11Gk1q00wxzJwzGAc_pZZ3hnMWWhCyXW3OgOjR8KZniu4rD3zSRnMgutYX7jcBmM-P_sXIF_3d3swLtM/s1600/Chrome-Software-Acceleration.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;GPU Hardware Acceleration Enabled&lt;/h3&gt;
In the other hand, if you see something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPobDWJphe0n08bH0ZeEwJgdEpVW71_EqWknwa5fQizk0fJsZDxIxiKoU2mWcsQTr8BGfPPMo80K0GptsPbbSQZRiXqVbGGvQq-9_OSmDU7H7GwbprgMt7wwIXbr4FkR7WyhKoh977u0w/s1600/Chrome-Hardware-Acceleration.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPobDWJphe0n08bH0ZeEwJgdEpVW71_EqWknwa5fQizk0fJsZDxIxiKoU2mWcsQTr8BGfPPMo80K0GptsPbbSQZRiXqVbGGvQq-9_OSmDU7H7GwbprgMt7wwIXbr4FkR7WyhKoh977u0w/s1600/Chrome-Hardware-Acceleration.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Then, this tutorial might not be of an use to you unless you&#39;re here to enrich your general technical knowledge.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Enable GPU Hardware Acceleration in Chrome&lt;/h2&gt;
Now, this will require two conditions to be met as explained below.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Enable Acceleration in Chrome Settings&lt;/h3&gt;
First of all, you have make sure that hardware acceleration option is actually ticked from end-user settings in Chrome. Navigate directly to &lt;code class=&quot;micro&quot;&gt;chrome://settings&lt;/code&gt; from address bar then &lt;code class=&quot;micro&quot;&gt;Show advanced settings → System&lt;/code&gt; and from there tick (&lt;u&gt;Use hardware acceleration when available&lt;/u&gt;) on.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNa2qGNCpmttfNFOzBZN84__2ldfeb0mJy_dpoOhiH7vLcpwd5HNgRwj-act2GAvA0OMtNWhgA7h2KBH2aAQfDIGbp6IE033gRNODNYeL89vzr51MX0D25SAhZf1iB9sj9dhg2VTYEh8M/s1600/Chrome-Settings-Acceleration.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNa2qGNCpmttfNFOzBZN84__2ldfeb0mJy_dpoOhiH7vLcpwd5HNgRwj-act2GAvA0OMtNWhgA7h2KBH2aAQfDIGbp6IE033gRNODNYeL89vzr51MX0D25SAhZf1iB9sj9dhg2VTYEh8M/s1600/Chrome-Settings-Acceleration.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;Override Software Rendering List&lt;/h3&gt;
Basically, this option will ignore the irrelevant GPU blacklist and force enable hardware acceleration, navigate to &lt;code class=&quot;micro&quot;&gt;chrome://flags&lt;/code&gt; from address bar and look for &lt;code class=&quot;micro&quot;&gt;Override software rendering list&lt;/code&gt; to enable it.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRoIBRZeaGJ7D9eVpqXoOtmoETHO2O1lG1X3rg5vHsM5KJLJe0eUmI5-WP38izf0Wc2clatZ_QbRPlPFfJQzDuXVeTsOvVJG0ighC9igawha7fkLJUxIiJLwx5qRFBnbasll7mPgpBFoo/s1600/Override-Software-Rendering-List-Chrome-Flags.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRoIBRZeaGJ7D9eVpqXoOtmoETHO2O1lG1X3rg5vHsM5KJLJe0eUmI5-WP38izf0Wc2clatZ_QbRPlPFfJQzDuXVeTsOvVJG0ighC9igawha7fkLJUxIiJLwx5qRFBnbasll7mPgpBFoo/s1600/Override-Software-Rendering-List-Chrome-Flags.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
That&#39;s it! Relaunch your browser to take effect then follow instructions above to confirm that acceleration is working as intended and enjoy surfing the world wide web smoothly.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Improve Performance with GPU Rasterization&lt;/h2&gt;
This is optional and might not suit your case however, if you wish to go one step further with performance then again navigate to &lt;code class=&quot;micro&quot;&gt;chrome://flags&lt;/code&gt; from address bar and search for &lt;code class=&quot;micro&quot;&gt;GPU rasterization&lt;/code&gt; to enable it. Next, look for &lt;code class=&quot;micro&quot;&gt;Number of raster threads&lt;/code&gt; and choose number &quot;4&quot; from the list.</description><link>http://www.ismoothblog.com/2016/12/enable-gpu-hardware-acceleration-chrome-and-chromium-browser.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPPz5lPEzNPJfZoGepNI-FOjou1FpBK9g0UOJcgoUh9ayfEfnN0HIrP_1Cepvv3viMge6hKfqWSiH7otcjN5A7GiUhb2-Fws_50kVkoxZvEbdQva62ePKGIouHg5GAvSuKDHOlhsb5Klg/s72-c/Chrome-Browser-GPU-Hardware-Acceleration.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-4403847769853341864</guid><pubDate>Fri, 09 Dec 2016 02:52:00 +0000</pubDate><atom:updated>2017-01-05T00:08:06.549-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Debian</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>Install Latest Intel GPU Driver on Debian Jessie – Activate “SNA” Hardware Acceleration</title><description>Usually, after installing &lt;b&gt;Debian Jessie&lt;/b&gt; on your computer running an Intel processor with integrated GPU, the first question that comes in mind is whether hardware acceleration is activated or not. Next, you might want to ensure that you are running the latest drivers available.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSKxm9Dmqf5g9rEBrGk5g0ozpRIx_rsZeYesgiRMuxb3-qEz8tYqtxlL5g2E26l4tmMZJTtURfYpUrOZDTwosJo_7OfXdskfdjY1-7qUqXOGIrUJlTGGccjh6dxpz1PQOWIOg0xse1LTQ/s1600/Debian-Linux-Intel-GPU-Hardware-Acceleration.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSKxm9Dmqf5g9rEBrGk5g0ozpRIx_rsZeYesgiRMuxb3-qEz8tYqtxlL5g2E26l4tmMZJTtURfYpUrOZDTwosJo_7OfXdskfdjY1-7qUqXOGIrUJlTGGccjh6dxpz1PQOWIOg0xse1LTQ/s320/Debian-Linux-Intel-GPU-Hardware-Acceleration.jpg&quot; width=&quot;320&quot; height=&quot;230&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Honestly, the simple answer for first question is that; Debian Linux desktop distributions will originally come packed with hardware acceleration configured by default during installation for Intel processors just in case you would rely on the integrated GPU.&lt;br /&gt;
&lt;br /&gt;
However, what we are going to cover in this article is upgrading that outdated driver to latest version to maximize performance, and how to solve tearing issues, after we force the use of the bleeding edge “&lt;b&gt;SNA&lt;/b&gt;” on X11 instead of “&lt;b&gt;UXA&lt;/b&gt;” as the default &lt;b&gt;Hardware Acceleration&lt;/b&gt; method.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Install Latest Intel GPU Driver&lt;/h2&gt;
You can follow same instructions below to either install latest &lt;b&gt;Intel GPU driver&lt;/b&gt; from scratch or simply to perform an upgrade to the currently outdated driver package, the general idea is pulling the bleeding edge version of &lt;code class=&quot;micro&quot;&gt;xserver-xorg-video-intel&lt;/code&gt; package from Debian &lt;code class=&quot;micro&quot;&gt;jessie/backports&lt;/code&gt; repository branch.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Add “jessie/backports” Branch to APT Sources&lt;/h3&gt;
Basically, one easy way to achieve that is by issuing this command into the terminal, like this:&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;sudo echo &quot;deb http://ftp.debian.org/debian/ jessie-backports main contrib non-free&quot; &gt;&gt; /etc/apt/sources.list&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Install Backported “xserver-xorg-video-intel” Package&lt;/h3&gt;
Now, just install the package using &lt;code class=&quot;micro&quot;&gt;apt-get&lt;/code&gt; utility from terminal.
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;sudo apt-get -t jessie-backports install &quot;xserver-xorg-video-intel&quot;&lt;/code&gt;&lt;/pre&gt;
Note that if you already have an older version then it will just upgrade it to the build corresponding to the latest package available on &lt;code class=&quot;micro&quot;&gt;jessie/backports&lt;/code&gt; automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Activate “SNA” Hardware Acceleration&lt;/h2&gt;
Well, the default behavior after you install the latest driver is that it will automatically choose the suitable hardware acceleration method according to your processor architecture.&lt;br /&gt;
&lt;br /&gt;
For instance, starting from &lt;b&gt;Intel Haswell&lt;/b&gt; which is the &quot;fourth-generation core&quot; successor to the Ivy Bridge architecture, without configuring anything it will default to “SNA” settings. However, sometimes I do not trust everything to go as intended.&lt;br /&gt;
&lt;br /&gt;
Besides, we need to force enabling &lt;code class=&quot;micro&quot;&gt;&quot;TearFree&quot; &quot;true&quot;&lt;/code&gt; option to prevent graphics tearing during either 3D &lt;b&gt;OpenGL&lt;/b&gt; rendering or direct window moving/scrolling actions. So, according to this we must to create an &lt;code class=&quot;micro&quot;&gt;xorg.conf&lt;/code&gt; file to manually define our own desired options, anyway.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Create “xorg.conf” File with our Settings&lt;/h3&gt;
You need to create the configuration file exactly at this path &lt;code class=&quot;micro&quot;&gt;/etc/X11/xorg.conf&lt;/code&gt; so execute your preferred text editor from terminal to that location, we will use &lt;code class=&quot;micro&quot;&gt;nano&lt;/code&gt; as an example:&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;sudo nano /etc/X11/xorg.conf&lt;/code&gt;&lt;/pre&gt;
Note that if you happen to already have this file created somehow, it will just attempt to edit it otherwise it will automatically create it.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Configure X11 with Intel Graphics&lt;/h3&gt;
Now, just input the following content, into the text editor and save it.&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;xorg.conf&quot;&gt;&lt;code&gt;Section &quot;Device&quot;
   Identifier  &quot;Intel Graphics&quot;
   Driver      &quot;intel&quot;
   Option      &lt;mark&gt;&quot;AccelMethod&quot; &quot;sna&quot;&lt;/mark&gt;
   Option      &quot;TearFree&quot; &quot;true&quot;
EndSection&lt;/code&gt;&lt;/pre&gt;
If you are using an old Intel processor that doesn&#39;t support “SNA” consider changing the option marked above with white color to &lt;code class=&quot;micro&quot;&gt;&quot;AccelMethod&quot; &quot;uxa&quot;&lt;/code&gt; instead to avoid any issues.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Reboot System&lt;/h3&gt;
That&#39;s it for now, restart your system to take effect then proceed to the next step just in case you want to confirm that &lt;b&gt;GPU Hardware Acceleration&lt;/b&gt; and everything is working as intended.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How to Confirm Working GPU Hardware Acceleration&lt;/h2&gt;
I have prepared a simple command with an expected output so that we can confirm everything is going our way, in terminal issue this command:&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Terminal&quot;&gt;&lt;code&gt;cat /var/log/Xorg.0.log | grep SNA &amp;&amp; cat /var/log/Xorg.0.log | grep DRI&lt;/code&gt;&lt;/pre&gt;
You should expect to receive an output similar to this in my case:&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Expected Result&quot;&gt;&lt;code&gt;[    12.953] (II) intel(0): SNA compiled: xserver-xorg-video-intel 2:2.99.917+git20161105-1~bpo8+1 (Vincent Cheng &lt;vcheng@debian.org&gt;)
[    12.953] (II) intel(0): SNA compiled for use with valgrind
[    13.033] (II) intel(0): SNA initialized with Haswell (gen7.5, gt1) backend
[    13.044] (II) intel(0): [DRI2] Setup complete
[    13.044] (II) intel(0): [DRI2]   DRI driver: i965
[    13.044] (II) intel(0): [DRI2]   VDPAU driver: va_gl
[    13.044] (II) intel(0): direct rendering: DRI2 enabled
[    13.507] (II) GLX: Initialized DRI2 GL provider for screen 0&lt;/code&gt;&lt;/pre&gt;
Last but not least, I will be writing two other articles related to this subject this week, as we know that currently browsers available for Linux distributions like FireFox and Chrome aren&#39;t configured correctly to make use of &lt;b&gt;Intel GPU Hardware Acceleration&lt;/b&gt; by default, so we&#39;ll be solving that.</description><link>http://www.ismoothblog.com/2016/12/install-intel-gpu-driver-on-debian-linux-hardware-acceleration.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSKxm9Dmqf5g9rEBrGk5g0ozpRIx_rsZeYesgiRMuxb3-qEz8tYqtxlL5g2E26l4tmMZJTtURfYpUrOZDTwosJo_7OfXdskfdjY1-7qUqXOGIrUJlTGGccjh6dxpz1PQOWIOg0xse1LTQ/s72-c/Debian-Linux-Intel-GPU-Hardware-Acceleration.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-7755934580307600719</guid><pubDate>Tue, 06 Dec 2016 08:59:00 +0000</pubDate><atom:updated>2020-12-08T00:30:03.237-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blogger</category><category domain="http://www.blogger.com/atom/ns#">SMO</category><title>Blogger Social Media Optimization (SMO) with Open Graph Protocol</title><description>Nowadays, the importance of implementing &lt;a href=&quot;https://www.ismoothblog.com/search/label/SEO?&amp;max-results=5&quot;&gt;SEO&lt;/a&gt; (Search Engine Optimization) techniques has decreased significantly, since &lt;b&gt;Google&lt;/b&gt; and other web giants do not prioritize search results based on that anymore but mostly according to the quality of your content.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfwOHP85zQnUe2Lw_nckauBajXATvMiFPY7w4lzPbHTjlJmlh7IiMuFXcaIWHInCt36b02Rwm027u4zwMKrCI-F4KmhTBqZaL-Tcd3CHh7iRyN2lM-Fg1ynocOf9ViKyA-spiXahtHxDM/s1600/Blogger-Social-Media-Optimization-Open-Graph-Protocol.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfwOHP85zQnUe2Lw_nckauBajXATvMiFPY7w4lzPbHTjlJmlh7IiMuFXcaIWHInCt36b02Rwm027u4zwMKrCI-F4KmhTBqZaL-Tcd3CHh7iRyN2lM-Fg1ynocOf9ViKyA-spiXahtHxDM/s320/Blogger-Social-Media-Optimization-Open-Graph-Protocol.jpg&quot; width=&quot;320&quot; height=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Instead, let me put it to you that way; &lt;b&gt;Social Media&lt;/b&gt; sites are becoming more of a SEO factor than what SEO itself used to be. That&#39;s exactly why my blog is optimized with the &lt;a href=&quot;http://ogp.me/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;OGP&lt;/a&gt; (Open Graph Protocol) Meta Tags, which is by the way a &lt;b&gt;Blogger&lt;/b&gt; (or Blogspot) blog.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;What is OGP (Open Graph Protocol)&lt;/h2&gt;
The Open Graph Protocol enables any web site or blog to identify and establish itself magnificently as an object within the boundaries of a particular social graph through &lt;b&gt;Meta Tags&lt;/b&gt; embraced within &lt;code class=&quot;micro&quot;&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and &lt;code class=&quot;micro&quot;&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; in a web page HTML header.&lt;br /&gt;
&lt;br /&gt;
Well, so my blog has certain and unique OGP meta tags included in each page or blogs post, the information given by those particular tags differ according to the page content or type.&lt;br /&gt;
&lt;br /&gt;
Now for instance, if you request source code for the blog home page through your browser, you should see in the page header there&#39;s some thing like this:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;HTML&quot;&gt;&lt;code&gt;&amp;lt;html lang=&amp;#39;en-US&amp;#39; prefix=&amp;#39;og: https://ogp.me/ns#&amp;#39;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;!-- [ SMO ] --&amp;gt;
&amp;lt;meta content=&amp;#39;iSmooth Blog&amp;#39; property=&amp;#39;og:title&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;website&amp;#39; property=&amp;#39;og:type&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;http://www.ismoothblog.com/&amp;#39; property=&amp;#39;og:url&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;http://www.ismoothblog.com/favicon.ico&amp;#39; property=&amp;#39;og:image&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;Delivers latest information and support for technology, mobile devices and social networking to help users, all in a bundle of uniqueness.&amp;#39; property=&amp;#39;og:description&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;iSmooth Blog&amp;#39; property=&amp;#39;og:site_name&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;https://www.facebook.com/iSmoothBlog&amp;#39; property=&amp;#39;article:publisher&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;en_US&amp;#39; property=&amp;#39;og:locale&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;en_GB&amp;#39; property=&amp;#39;og:locale:alternate&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;id_ID&amp;#39; property=&amp;#39;og:locale:alternate&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;summary&amp;#39; name=&amp;#39;twitter:card&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;iSmooth Blog&amp;#39; name=&amp;#39;twitter:title&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;@iSmoothBlog&amp;#39; name=&amp;#39;twitter:site&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;@SaleemAlmajed&amp;#39; name=&amp;#39;twitter:creator&amp;#39;/&amp;gt;
&amp;lt;/head&amp;gt;&lt;/code&gt;&lt;/pre&gt;
As you can see, there&#39;s information about the blog name, page type, language and author profile including other relevant social media queries and accounts used by the creator. In the other hand, if you check a blog post page header, say for example my previous article:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;HTML&quot;&gt;&lt;code&gt;&amp;lt;!-- [ SMO ] --&amp;gt;
&amp;lt;meta content=&amp;#39;iSmooth Blog: Host Blogger CSS, JavaScript and HTML Files on GitHub Pages&amp;#39; property=&amp;#39;og:title&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;article&amp;#39; property=&amp;#39;og:type&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;http://www.ismoothblog.com/2016/11/host-blogger-css-javascript-files-using-github-pages.html&amp;#39; property=&amp;#39;og:url&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD-KmmoCVxP6lN2zhP6OM8G4KFibc_q-Xm2msoKvdRndPEKxRjeWN3Gn6puZUfM2jWNknzA7Q5odRF8hAW6j7BdROSmWU3AoRsP_JTv76Z78AR0DL-NuCWgq-1CxFfCmTdFq1OIvP6CsU/s400/GitHub-Pages-Free-Hosting-Service-Blogger.png&amp;#39; property=&amp;#39;og:image&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;How to host CSS, JavaScript, HTML Files and even photos for Blogspot blogs with unlimited bandwidth and storage space for free using GitHub Page service.&amp;#39; property=&amp;#39;og:description&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;iSmooth Blog&amp;#39; property=&amp;#39;og:site_name&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;https://www.facebook.com/iSmoothBlog&amp;#39; property=&amp;#39;article:publisher&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;en_US&amp;#39; property=&amp;#39;og:locale&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;en_GB&amp;#39; property=&amp;#39;og:locale:alternate&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;id_ID&amp;#39; property=&amp;#39;og:locale:alternate&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;summary&amp;#39; name=&amp;#39;twitter:card&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;iSmooth Blog: Host Blogger CSS, JavaScript and HTML Files on GitHub Pages&amp;#39; name=&amp;#39;twitter:title&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;@iSmoothBlog&amp;#39; name=&amp;#39;twitter:site&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;@SaleemAlmajed&amp;#39; name=&amp;#39;twitter:creator&amp;#39;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
Note that there&#39;s multiple entries changing in respect to page type, most notable ones are &lt;code class=&quot;micro&quot;&gt;og:title&lt;/code&gt; followed by &lt;code class=&quot;micro&quot;&gt;og:type&lt;/code&gt; and most importantly &lt;code class=&quot;micro&quot;&gt;og:image&lt;/code&gt; while this behavior is done automatically by a single code I use inside my Blogger custom template.&lt;br /&gt;
&lt;br /&gt;
The image property tag for example provide a suitable photo taken from your embed material, this will tell social media sites which photo to use and display when your post gets shared within their social service or application, like as a thumbnail and many other uses according to their technology.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;SMO (Social Media Optimization) for Blogger&lt;/h2&gt;
We should know exactly by now why we would want to implement SMO right, so in order to make use of my OGP implementation for your own Blogger blog, navigate to your template editor from your blogger control panel &lt;code class=&quot;micro&quot;&gt;Template → Edit HTML&lt;/code&gt; and search for &lt;code class=&quot;micro&quot;&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; then add this code ABOVE or (before it):
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Blogger Template Code&quot;&gt;&lt;code&gt;&amp;lt;!-- [ SMO ] --&amp;gt;
&amp;lt;b:if cond=&amp;#39;data:blog.url == data:blog.homepageUrl&amp;#39;&amp;gt; 
&amp;lt;b:if cond=&amp;#39;data:blog.pageType == &amp;amp;quot;item&amp;amp;quot;&amp;#39;&amp;gt; 
&amp;lt;b:if cond=&amp;#39;data:blog.pageType == &amp;amp;quot;static_page&amp;amp;quot;&amp;#39;&amp;gt;  
&amp;lt;b:if cond=&amp;#39;data:blog.url&amp;#39;&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.url&amp;#39; property=&amp;#39;og:url&amp;#39;/&amp;gt;
&amp;lt;/b:if&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.title&amp;#39; property=&amp;#39;og:site_name&amp;#39;/&amp;gt;
&amp;lt;b:if cond=&amp;#39;data:blog.pageName&amp;#39;&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.pageName&amp;#39; property=&amp;#39;og:title&amp;#39;/&amp;gt;
&amp;lt;/b:if&amp;gt;&amp;lt;/b:if&amp;gt;&amp;lt;/b:if&amp;gt;&amp;lt;/b:if&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.pageTitle&amp;#39; property=&amp;#39;og:title&amp;#39;/&amp;gt;
&amp;lt;b:if cond=&amp;#39;data:blog.pageType == &amp;amp;quot;item&amp;amp;quot;&amp;#39;&amp;gt;
&amp;lt;meta content=&amp;#39;article&amp;#39; property=&amp;#39;og:type&amp;#39;/&amp;gt;
&amp;lt;b:else/&amp;gt;
&amp;lt;meta content=&amp;#39;website&amp;#39; property=&amp;#39;og:type&amp;#39;/&amp;gt;
&amp;lt;/b:if&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.canonicalUrl&amp;#39; property=&amp;#39;og:url&amp;#39;/&amp;gt;
&amp;lt;b:if cond=&amp;#39;data:blog.postImageUrl&amp;#39;&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.postImageUrl&amp;#39; property=&amp;#39;og:image&amp;#39;/&amp;gt;
&amp;lt;b:else/&amp;gt;
&amp;lt;b:if cond=&amp;#39;data:blog.postImageThumbnailUrl&amp;#39;&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.postThumbnailUrl&amp;#39; property=&amp;#39;og:image&amp;#39;/&amp;gt;
&amp;lt;b:else/&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.blogspotFaviconUrl&amp;#39; property=&amp;#39;og:image&amp;#39;/&amp;gt;
&amp;lt;/b:if&amp;gt;&amp;lt;/b:if&amp;gt;
&amp;lt;b:if cond=&amp;#39;data:blog.metaDescription&amp;#39;&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.metaDescription&amp;#39; property=&amp;#39;og:description&amp;#39;/&amp;gt;
&amp;lt;/b:if&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.title&amp;#39; property=&amp;#39;og:site_name&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;&lt;mark&gt;https://www.facebook.com/YOUR-BLOG-PAGE&lt;/mark&gt;&amp;#39; property=&amp;#39;article:publisher&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;en_US&amp;#39; property=&amp;#39;og:locale&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;en_GB&amp;#39; property=&amp;#39;og:locale:alternate&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;id_ID&amp;#39; property=&amp;#39;og:locale:alternate&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;summary&amp;#39; name=&amp;#39;twitter:card&amp;#39;/&amp;gt;
&amp;lt;meta expr:content=&amp;#39;data:blog.pageTitle&amp;#39; name=&amp;#39;twitter:title&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;@&lt;mark&gt;YOUR-BLOG&lt;/mark&gt;&amp;#39; name=&amp;#39;twitter:site&amp;#39;/&amp;gt;
&amp;lt;meta content=&amp;#39;@&lt;mark&gt;YOUR-PERSONAL-ACCOUNT&lt;/mark&gt;&amp;#39; name=&amp;#39;twitter:creator&amp;#39;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note&quot;&gt;
&lt;b style=&quot;color: green;&quot;&gt;Note:&lt;/b&gt; Twitter accounts and Facebook page entries highlighted at the bottom of the code above is personal and should be changed manually to your own settings, any other field is dynamic which means it will be defined automatically according to your blogger settings.
&lt;/div&gt;
&lt;br /&gt;
One last simple step remains and it&#39;s very important, which is to propagate that your blog is covered under the &lt;b&gt;OGP&lt;/b&gt; (Open Graph Protocol), to do that search exactly for &lt;code class=&quot;micro&quot;&gt;&amp;lt;html&lt;/code&gt; which should be found at the third line of your template then replace it with the following code:
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Blogger Template Code&quot;&gt;&lt;code&gt;&amp;lt;html prefix=&amp;#39;og: http://ogp.me/ns#&amp;#39;&lt;/code&gt;&lt;/pre&gt;
Basically, you have to add &lt;code class=&quot;micro&quot;&gt;prefix=&amp;#39;og: https://ogp.me/ns#&amp;#39;&lt;/code&gt; inside your HTML opening tag. That&#39;s all.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;OGP Structured Properties&lt;/h2&gt;
The implementation explained above for Bogger is not limited, you can expand its functionality and add more OGP Structured Properties to identify your site with further information to the social graph, you can find and learn about that by following instructions available on the &lt;a href=&quot;http://ogp.me/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Open Graph Protocol&lt;/a&gt; official website.</description><link>http://www.ismoothblog.com/2016/12/blogger-ogp-social-media-optimization-smo.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfwOHP85zQnUe2Lw_nckauBajXATvMiFPY7w4lzPbHTjlJmlh7IiMuFXcaIWHInCt36b02Rwm027u4zwMKrCI-F4KmhTBqZaL-Tcd3CHh7iRyN2lM-Fg1ynocOf9ViKyA-spiXahtHxDM/s72-c/Blogger-Social-Media-Optimization-Open-Graph-Protocol.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-4892725666107652534</guid><pubDate>Thu, 24 Nov 2016 16:23:00 +0000</pubDate><atom:updated>2020-12-08T00:30:03.235-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blogger</category><category domain="http://www.blogger.com/atom/ns#">GitHub</category><title>Host Blogger CSS, JavaScript and HTML Files on GitHub Pages</title><description>Recently, I shifted all and every CSS and JavaScript code snippet including other HTML files to be hosted for free on &lt;a href=&quot;https://pages.github.com/&quot; rel=&quot;nofollow&quot;&gt;GitHub Pages&lt;/a&gt;. This service is known to provide people with unlimited bandwidth and storage space, without paying for anything.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD-KmmoCVxP6lN2zhP6OM8G4KFibc_q-Xm2msoKvdRndPEKxRjeWN3Gn6puZUfM2jWNknzA7Q5odRF8hAW6j7BdROSmWU3AoRsP_JTv76Z78AR0DL-NuCWgq-1CxFfCmTdFq1OIvP6CsU/s1600/GitHub-Pages-Free-Hosting-Service-Blogger.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD-KmmoCVxP6lN2zhP6OM8G4KFibc_q-Xm2msoKvdRndPEKxRjeWN3Gn6puZUfM2jWNknzA7Q5odRF8hAW6j7BdROSmWU3AoRsP_JTv76Z78AR0DL-NuCWgq-1CxFfCmTdFq1OIvP6CsU/s400/GitHub-Pages-Free-Hosting-Service-Blogger.png&quot; width=&quot;400&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Your files are being hosted on a cloud technology known as the &lt;b&gt;Git Repository&lt;/b&gt;, which is such a great solution to synchronize your files between multiple devices and work spaces allowing version control capability as well and many other features.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;An Awesome Touch to Blogger&lt;/h2&gt;
After I migrated to GitHub pages as the main host for my scripts, the source code between &lt;code class=&quot;micro&quot;&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and &lt;code class=&quot;micro&quot;&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; tags of this blog has been presented to end users like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;Blogger Code&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;

&amp;lt;!-- [ JavaScript ] --&amp;gt;
&amp;lt;link href=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/ajax/libs/highlight.js/9.8.0/styles/default.min.css&lt;/mark&gt;&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;
&amp;lt;script src=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/ajax/libs/highlight.js/9.8.0/highlight.min.js&lt;/mark&gt;&amp;#39;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/js/thumbnail-resize.js&lt;/mark&gt;&amp;#39; type=&amp;#39;text/javascript&amp;#39;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/ajax/libs/jquery/3.1.1/jquery.min.js&lt;/mark&gt;&amp;#39;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/js/sticky-widget.js&lt;/mark&gt;&amp;#39;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/js/misc.js&lt;/mark&gt;&amp;#39;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;!-- [ CSS ] --&amp;gt;
&amp;lt;link href=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/font-awesome/4.7.0/css/font-awesome.min.css&lt;/mark&gt;&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;
&amp;lt;link href=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/css/global.css&lt;/mark&gt;&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;
&amp;lt;link href=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/css/index.css&lt;/mark&gt;&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;
&amp;lt;link href=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/css/blog.css&lt;/mark&gt;&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;
&amp;lt;link href=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/css/static.css&lt;/mark&gt;&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;
&amp;lt;link href=&amp;#39;&lt;mark&gt;http://repository.ismoothblog.com/css/error.css&lt;/mark&gt;&amp;#39; rel=&amp;#39;stylesheet&amp;#39;/&amp;gt;

&amp;lt;/head&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
If that&#39;s not enough, as you can see in the code above I highlighted the URL links just in case, so yes you can use the sub-domain of your own top-level custom domain for the repository that will be hosting your blog files, it reflects a feeling of professionalism  and that&#39;s awesome!&lt;br /&gt;
&lt;br /&gt;
Otherwise, if you don&#39;t have a custom domain they will just give a cool and short free domain, for example if I hadn&#39;t happen to have my own the custom domain in my case, I would&#39;ve just used the following domain name: &lt;code class=&quot;micro&quot;&gt;ismoothblog.github.io&lt;/code&gt; instead, which is already reserved and available for me to use at anytime.&lt;/br /&gt;
&lt;br /&gt;
&lt;h2&gt;Get Started with GitHub Pages&lt;/h2&gt;
First of all, of course you will have to &lt;a href=&quot;https://github.com/&quot;&gt;register an account on GitHub&lt;/a&gt; to get things started, then follow the steps:&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Step 1 (Create a new git repository)&lt;/h3&gt;
Once you are done, login into your account then create a new repository:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJCNHYTmEGMvJNehkgmr4b9vECx5z9YHaGGbF3ktRNIVUuOHuAeKRnNad383Ge44DSGLgxTvgLq4Uxm63VoFTcRqSPVU7qLSimPm3LaksSuWbsnY5qx0JUlw5aAL-Ql3kFWEbLNojyYzI/s1600/New-Repository.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJCNHYTmEGMvJNehkgmr4b9vECx5z9YHaGGbF3ktRNIVUuOHuAeKRnNad383Ge44DSGLgxTvgLq4Uxm63VoFTcRqSPVU7qLSimPm3LaksSuWbsnY5qx0JUlw5aAL-Ql3kFWEbLNojyYzI/s1600/New-Repository.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Then make sure to name the repository after the domain that you wish to acquire, remember it has to be &lt;code class=&quot;micro&quot;&gt;YOU.github.io&lt;/code&gt; if you are going for the free solution, even if you have a custom domain you should still reserve a free domain, you can change it later to whatever you want.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikSL4b-VWS10N191cNB8lVaDHS6SNRiZK_Ixsk7pu9yeS79KEtCZQIN9INNZZyZfiO4dTNefaTWFWf1wFd9XunssKfraUM6XjyHSQCcpWS8VLLuRqMQCojuH08qNmFFNPiiX8xFFzPias/s1600/GitHub-Pages-Domain.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikSL4b-VWS10N191cNB8lVaDHS6SNRiZK_Ixsk7pu9yeS79KEtCZQIN9INNZZyZfiO4dTNefaTWFWf1wFd9XunssKfraUM6XjyHSQCcpWS8VLLuRqMQCojuH08qNmFFNPiiX8xFFzPias/s640/GitHub-Pages-Domain.png&quot; width=&quot;640&quot; height=&quot;226&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Well, you must select the Public repository option as Private repositories are reserved for premium users, it&#39;s no big deal. Make sure to initialize the repository with a README file to avoid further complications.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6opMf3bhXWsa0RD9YaB2MMSg9VS7m56Cy9i7WnPz3v5UMsFoBLFNji85HgXgUr40nMrxYQRuxQ7RtCyVzqdRPGFByBkSE4ZhTNrS7O1rAhS9NwuWNFAOZt43-KFv5gQ4USA3OYF9wkKw/s1600/Create-Public-Git-Repository.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6opMf3bhXWsa0RD9YaB2MMSg9VS7m56Cy9i7WnPz3v5UMsFoBLFNji85HgXgUr40nMrxYQRuxQ7RtCyVzqdRPGFByBkSE4ZhTNrS7O1rAhS9NwuWNFAOZt43-KFv5gQ4USA3OYF9wkKw/s1600/Create-Public-Git-Repository.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
We are done! Now just upload your files and links should be alive for you to use on your Blogger blog.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Step 2 (Upload your files)&lt;/h3&gt;
The git control process for Windows users is &lt;a href=&quot;https://desktop.github.com/&quot; rel=&quot;nofollow&quot;&gt;explained here on GitHub by using their application&lt;/a&gt;, if you are a Linux user &lt;a href=&quot;https://help.github.com/articles/set-up-git/&quot; rel=&quot;nofollow&quot;&gt;follow these instructions&lt;/a&gt;, also don&#39;t forget to read the mini-guide for GitHub Pages service presented on the &lt;a href=&quot;https://pages.github.com/&quot; rel=&quot;nofollow&quot;&gt;official site&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Blogger Custom Sub-Domain for GitHub Pages Hosting&lt;/h2&gt;
If you want the files being served on the same domain of your Blogger blog, you have to create a &lt;b&gt;CNAME Record&lt;/b&gt; by logging into your Admin Console through your DNS domain provider website, here&#39;s what I did, add a record with the following enteries:&lt;br /&gt;
&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;CNAME Record&quot;&gt;&lt;code&gt;Host Name: &lt;mark&gt;repository&lt;/mark&gt;
Address: &lt;mark&gt;ismoothblog.github.io&lt;/mark&gt;
Record Type: &lt;mark&gt;CNAME&lt;/mark&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Make sure to change &lt;code class=&quot;micro&quot;&gt;repository&lt;/code&gt; to your desired sub-domain of your own top-level custom domain and &lt;code class=&quot;micro&quot;&gt;ismoothblog.github.io&lt;/code&gt; to your corresponding GitHub default domain in your case.&lt;br /&gt;
&lt;br /&gt;
Last but not least, create a file named exactly as &lt;code class=&quot;micro&quot;&gt;CNAME&lt;/code&gt; inside your main git repository index, then input inside that file your custom sub-domain, like this in my case:&lt;br /&gt;
&lt;br /&gt;
&lt;pre data-codetype=&quot;auto&quot; title=&quot;CNAME File Content&quot;&gt;&lt;code&gt;repository.ismoothblog.com&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
That&#39;s all, your new sub-domain should be alive in around 30 minutes according to my experience depending on your domain provider Time to Live (TTL) value configured on their DNS servers.&lt;br /&gt;
&lt;br /&gt;
By the way, I&#39;ve been building and designing a &lt;b&gt;Jekyll Blog&lt;/b&gt; which can be used in corporation with GitHub Pages service to host your own personal blog or website, I will be writing about my progress soon so stay tuned!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;idea&quot;&gt;
Feel free to drop a comment in the section below, do not hesitate to share your thoughts, so what do you think about this service and my implementation on this Blogger blog?
&lt;/div&gt;</description><link>http://www.ismoothblog.com/2016/11/host-blogger-css-javascript-files-using-github-pages.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD-KmmoCVxP6lN2zhP6OM8G4KFibc_q-Xm2msoKvdRndPEKxRjeWN3Gn6puZUfM2jWNknzA7Q5odRF8hAW6j7BdROSmWU3AoRsP_JTv76Z78AR0DL-NuCWgq-1CxFfCmTdFq1OIvP6CsU/s72-c/GitHub-Pages-Free-Hosting-Service-Blogger.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-6304616170398993991</guid><pubDate>Fri, 18 Nov 2016 06:44:00 +0000</pubDate><atom:updated>2017-01-17T05:39:10.938-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blogging</category><category domain="http://www.blogger.com/atom/ns#">GitHub</category><category domain="http://www.blogger.com/atom/ns#">Jekyll</category><title>10 Best Example Blogs hosted on GitHub Pages with Jekyll</title><description>The era of Wordpress and Blogger being on top as the only feasible blogging platforms may come to an end, today I am posting a list of the most gorgeous and successful blogs hosted directly on &lt;a href=&quot;https://pages.github.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;GitHub Pages free hosting service&lt;/a&gt; by a script called &lt;a href=&quot;https://jekyllrb.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Jekyll&lt;/a&gt; which is a &lt;b&gt;Static Site Generator&lt;/b&gt; with various features that let people create extremely functional, simple and lightweight websites.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8R57DwlRhPWzKj_DlBVZY9HWIzgjC78Wnm7d9wmMd1_OX7eq3LYbqdeOi9kuQWKYT_1GZjaJYVmnJriUzOT_Yeklcc1tooAHXjTMArABsRqQSl9BijBOR249OwLvEQMBStHXdYZ4tNdU/s1600/blogging-blogs.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8R57DwlRhPWzKj_DlBVZY9HWIzgjC78Wnm7d9wmMd1_OX7eq3LYbqdeOi9kuQWKYT_1GZjaJYVmnJriUzOT_Yeklcc1tooAHXjTMArABsRqQSl9BijBOR249OwLvEQMBStHXdYZ4tNdU/s400/blogging-blogs.png&quot; width=&quot;400&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
So I&#39;ve been doing research for the past few days to gather information concerning the best looking and most famous blogs around, in reference to my own opinion and my research here&#39;s a top 10 list out of what I came up with.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT2ryrCjstPjxITBD5CdoSC_DuISNE8g8oHN-PV0aL_X2GYYEJNU_0IeRncEl4uwrTdEz4aJGp4z2hV6qg8uI3pGEXbYj9pv1ItD8R7fwKjPSYmaKHK9hihih9Nh79d7o_qqDT3iSke0I/s1600/github-pages-blog-hosting-service-jekyll.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT2ryrCjstPjxITBD5CdoSC_DuISNE8g8oHN-PV0aL_X2GYYEJNU_0IeRncEl4uwrTdEz4aJGp4z2hV6qg8uI3pGEXbYj9pv1ItD8R7fwKjPSYmaKHK9hihih9Nh79d7o_qqDT3iSke0I/s1600/github-pages-blog-hosting-service-jekyll.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;1. Development SEED&lt;/h2&gt;
&lt;a href=&quot;https://developmentseed.org/blog/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Development Seed&lt;/a&gt; is using GitHub to host their blog, they publish information and posts about their projects there, the main layout does really look awesome and functional with many features and I think it&#39;s the most interesting site to show you what Jekyll is capable of.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. Josh Habdas&#39;s Blog&lt;/h2&gt;
&lt;a href=&quot;https://habd.as/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Josh Habdas&#39;s personal blog&lt;/a&gt; is about freelance web and mobile app development, blogging, Raspberry Pi and retro gaming. It really has an elegant design and feature-rich blog layout enough to show you how Jekyll can professionally run your blog.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;3. Scott&#39;s Blog&lt;/h2&gt;
&lt;a href=&quot;http://blog.scottlowe.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Scott&#39;s weblog&lt;/a&gt; is created by an IT professional specializing in virtualization, networking, open source, and cloud computing. It&#39;s the greatest example of how lightweight and simple you can go by using Jekyll, and still implement every essential blogging element required for your blog to run perfectly.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;4. Yevgeniy Brikman&#39;s Blog&lt;/h2&gt;
&lt;a href=&quot;http://www.ybrikman.com/writing/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Yevgeniy Brikman&#39;s blog&lt;/a&gt; is one reason why Jekyll and GutHub pages are the best tools to host a blog if you are a developer, many developers like him are hyped about it due to integration of the most famous and beloved development platform which is &lt;a href=&quot;https://github.com/about&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt; featuring git repository hosting and version control services.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;5. Perfection Kills&lt;/h2&gt;
&lt;a href=&quot;http://perfectionkills.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Perfection Kills&lt;/a&gt; is a well-known blog about JavaScript rants and findings, it also serves a Quiz mainly focuses on knowledge of scoping and function expressions, it&#39;s been a popular among JavaScript geeks. As the name suggests, this blog is a great example of how you can make use of JavaScript and implement it on Jekyll in your own site.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;6. Zach Holman&#39;s Blog&lt;/h2&gt;
&lt;a href=&quot;https://zachholman.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Zach Holman&#39;s blog&lt;/a&gt; is managed by one of GitHub engineering hires, he helped build and grow their product and culture over five years, from nine employees all the way to 250. He was the top committer at GitHub for the last two years of his time there.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;7. Nicholas C. Zakas&#39;s Blog&lt;/h2&gt;
&lt;a href=&quot;https://www.nczonline.net/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Nicholas C. Zakas&#39;s&lt;/a&gt; blog is focused on front-end technology such as HTML, CSS, and JavaScript, digging in and learning all of the skills and tricks necessary to make performant, beautiful, and maintainable front-ends.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;8. UX Design Blog&lt;/h2&gt;
&lt;a href=&quot;http://www.leemunroe.com/blog/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;UX Design blog&lt;/a&gt; is about product designing &amp; web development created by Lee Munroe and he focuses on designing and shipping web, mobile &amp; desktop applications that solve problems and offer users an enjoyable experience.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;9. JMPerez Blog&lt;/h2&gt;
&lt;a href=&quot;https://jmperezperez.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;JMPerez blog&lt;/a&gt; is created by José Manuel Pérez and he is a software engineer dedicated to web development and committed to web performance optimization. He really enjoys developing websites for desktop and mobile devices, having into account most recent technologies.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;10. Barry Clark&#39;s Blog&lt;/h2&gt;
&lt;a href=&quot;http://www.barryclark.co/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Barry Clark&#39;s blog&lt;/a&gt; is about building products that solve real, human problems. Author is passionate about programming, design, user experience, customer driven development, and continually improving as a manager.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;idea&quot;&gt;
What do you think about this top 10 list? Don&#39;t hesitate to share thoughts with me and drop a comment in the section below.
&lt;/div&gt;</description><link>http://www.ismoothblog.com/2016/11/top-example-blogs-hosted-on-github-jekyll.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8R57DwlRhPWzKj_DlBVZY9HWIzgjC78Wnm7d9wmMd1_OX7eq3LYbqdeOi9kuQWKYT_1GZjaJYVmnJriUzOT_Yeklcc1tooAHXjTMArABsRqQSl9BijBOR249OwLvEQMBStHXdYZ4tNdU/s72-c/blogging-blogs.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-1409867080989472968</guid><pubDate>Tue, 15 Nov 2016 21:41:00 +0000</pubDate><atom:updated>2020-11-25T06:30:35.831-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DRM</category><category domain="http://www.blogger.com/atom/ns#">Requiem</category><title>Requiem Resurrection – iTunes &amp; iBooks Fairplay DRM Removal</title><description>Requiem is the only software that allowed everybody to circumvent &lt;b&gt;Fairplay DRM&lt;/b&gt; completely for free, this blog has been supporting various &lt;a href=&quot;https://www.ismoothblog.com/search/label/DRM-Removal?&amp;max-results=5&quot;&gt;DRM Removal&lt;/a&gt; tools for many years providing &lt;a href=&quot;https://www.ismoothblog.com/2012/12/apple-ibooks-and-itunes-drm-removal.html&quot;&gt;Requiem tutorials&lt;/a&gt; as well as download links for binaries and source code of every tool at our &lt;a href=&quot;https://www.ismoothblog.com/p/download.html&quot;&gt;download section&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5w3JjiIyLHdHyZlsnQs6qQaQQLf-SotDXqyS89mFdL7L4aeAwGekUIQGtUb3wZr3l7gLDJzPdZR880acdmKcQlHIWHUT98Rcovnznngw0yVFi1Kmg9nMLJjJDv_hr6SSi3ob9l8A1iNI/s1600/Requiem-Fairplay-DRM-Removal.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5w3JjiIyLHdHyZlsnQs6qQaQQLf-SotDXqyS89mFdL7L4aeAwGekUIQGtUb3wZr3l7gLDJzPdZR880acdmKcQlHIWHUT98Rcovnznngw0yVFi1Kmg9nMLJjJDv_hr6SSi3ob9l8A1iNI/s400/Requiem-Fairplay-DRM-Removal.jpg&quot; width=&quot;400&quot; height=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Requiem is the only true Fairplay DRM Removal tool ever released, I simply can&#39;t stand watching it die just like that without trying to do something.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Fake Fairplay DRM Removal Software being Spread&lt;/h2&gt;
That being said, unsurprisingly the web is being flooded with countless sites claiming removal of iTunes DRM, charging people a hell lot of money for a far inferior and poor quality software that doesn&#39;t truly remove DRM but only convert content to another extension by re-encoding it.&lt;br /&gt;
&lt;br /&gt;
Instead of paying our hard earned money to jerky services we should have donated to worthy developers of open source software like Requiem which by the way was originally coded by a person known as @&lt;b&gt;Brahms&lt;/b&gt; at that time.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Resurrection of The Requiem&lt;/h2&gt;
Today, I decided to create a &lt;a href=&quot;https://github.com/iSmoothBlog/Requiem&quot;&gt;GitHub repository&lt;/a&gt; with source code and binaries available for the two most successful versions: &lt;code class=&quot;micro&quot;&gt;Requiem 3.3.6&lt;/code&gt; which is best at decrypting iBooks and &lt;code class=&quot;micro&quot;&gt;Requiem 4.1&lt;/code&gt; which was the latest release supporting iTunes media (Music &amp; Movies) DRM removal , as an attempt to resurrect Requiem once again.&lt;br /&gt;
&lt;br /&gt;
This way we as a community can continue the development of that software and hopefully come up with a new release supporting the latest version of iTunes &amp; iBooks to put an end to that farcical mess of fake DRM Removal services known today.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Recruiting Java Developers&lt;/h2&gt;
Any one with experience at Java can help and contribute to the resurrection of Requiem, please clone the GitHub repository and if you figure something out just send me pull requests.&lt;br /&gt;
&lt;br /&gt;
Our main goal is to attain and keep the software compatibility with latest versions of iTunes since old Requiem releases are limited to only support obsolete iTunes version. That is the only obstacle preventing people from using the tool freely, so that&#39;s what we should try to overcome at the first place.&lt;br /&gt;
&lt;br /&gt;
Of course, efficiency improvements and bug fixes or adding new features to Requiem are more than welcome however, we shouldn&#39;t let our focus scatter around preventing us from achieving our main goal.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;download-button&quot;&gt;
&lt;a class=&quot;download-inner&quot; href=&quot;https://github.com/iSmoothBlog/Requiem&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;br&gt;
&lt;div class=&quot;download-front&quot;&gt;
&lt;span class=&quot;icon fa fa-github-alt&quot;&gt;&lt;/span&gt; GitHub Repository&lt;br&gt;
&lt;/div&gt;
&lt;div class=&quot;download-backup&quot;&gt;
&lt;span class=&quot;icon fa fa-hdd-o&quot;&gt;&lt;/span&gt; Click Here!&lt;br&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;br&gt;
&lt;/div&gt;
&lt;br /&gt;
If you have any question or doubts, please do not hesitate to drop a comment in the section below to join the conversion and share thoughts together.</description><link>http://www.ismoothblog.com/2016/11/resurrecting-requiem-itunes-ibooks-fairplay-drm-removal.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5w3JjiIyLHdHyZlsnQs6qQaQQLf-SotDXqyS89mFdL7L4aeAwGekUIQGtUb3wZr3l7gLDJzPdZR880acdmKcQlHIWHUT98Rcovnznngw0yVFi1Kmg9nMLJjJDv_hr6SSi3ob9l8A1iNI/s72-c/Requiem-Fairplay-DRM-Removal.jpg" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5676800651702180760.post-4141742610727132109</guid><pubDate>Sat, 12 Nov 2016 03:56:00 +0000</pubDate><atom:updated>2018-04-28T16:21:18.121-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apple</category><category domain="http://www.blogger.com/atom/ns#">iPad</category><category domain="http://www.blogger.com/atom/ns#">iPhone</category><title>Is it Safe to Charge iPhone Faster with iPad Charger?</title><description>If you are an &lt;a href=&quot;https://www.ismoothblog.com/search/label/Apple?&amp;max-results=5&quot;&gt;Apple&lt;/a&gt; fan you will most likely happen to own both an iPad along with an iPhone, users might want to charge their iPhone with the iPad 12W/10W &lt;b&gt;USB Power Adapter&lt;/b&gt;, so they have no choice but to wonder whether it is safe or not to do so.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFrUtmtkU5fKz80wSjNOwUtpCM7KkGgDAvArOxkHRNKWH1vVX6d9KooB5ANSCtxv535LA-7S4-aCo5V4FY5sakzM9REjxZ0ChmPg6r5het5OjrbNnFnDnIPGCekgXUDyPOrS3ct5g3dU/s1600/Use-iPad-Charger-to-Charge-iPhone.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFrUtmtkU5fKz80wSjNOwUtpCM7KkGgDAvArOxkHRNKWH1vVX6d9KooB5ANSCtxv535LA-7S4-aCo5V4FY5sakzM9REjxZ0ChmPg6r5het5OjrbNnFnDnIPGCekgXUDyPOrS3ct5g3dU/s400/Use-iPad-Charger-to-Charge-iPhone.jpg&quot; width=&quot;400&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Technically, according to specifications for the power adapter of iPad it supplies &lt;code class=&quot;micro&quot;&gt;5 Volts&lt;/code&gt; along with current up-to &lt;code class=&quot;micro&quot;&gt;2.1 Amps (12W)&lt;/code&gt;. In the other hand, we have iPhone original power adapter that supplies &lt;code class=&quot;micro&quot;&gt;5 Volts&lt;/code&gt; while unlikely pushes &lt;code class=&quot;micro&quot;&gt;1 Amp (5W)&lt;/code&gt; at max which is less current than the later.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Can I Safely use iPad Charger for iPhone?&lt;/h2&gt;
Yes, it is completely safe to charge any iPhone with &lt;b&gt;iPad Power Supply&lt;/b&gt;, that&#39;s your answer in advance just before we go explaining further. Apparently, it&#39;s not only safe to use but even more interestingly you can charge your iPhone &lt;u&gt;FASTER&lt;/u&gt; than usual using the iPad power adapter instead.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Why it is Safe&lt;/h3&gt;
That being said, when it comes to electronics it&#39;s known that devices draw current from the power supply on demand, meaning it doesn&#39;t matter if Amperes are higher than minimum requirement as long as the power adapter rated at the same voltage value which is in our case &lt;code class=&quot;micro&quot;&gt;5 Volts&lt;/code&gt; for both iPad and iPhone.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Charge iPhone Faster&lt;/h3&gt;
The reason for why it&#39;s actually more efficient to charge your iPhone using the iPad adapter is that it can supply double the amount of current than the original iPhone adapter, and since devices draw current on demand that makes iPhone able to draw from &lt;code class=&quot;micro&quot;&gt;2.1 Amps (12W)&lt;/code&gt; available, the iPhone will be able to charge noticeably faster than being limited to &lt;code class=&quot;micro&quot;&gt;1 Amp (5W)&lt;/code&gt; of current only.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Proof&lt;/h3&gt;
You can look at the specifications and compatibility list of devices supported by the &lt;b&gt;Apple 12W USB Power Adapter&lt;/b&gt; at &lt;a href=&quot;http://www.apple.com/shop/product/MD836LL/A/apple-12w-usb-power-adapter?fnode=3c&quot; rel=&quot;nofollow&quot;&gt;official Apple online shop&lt;/a&gt;, you will see all iPhone models are supported. Also, many people asked Apple stores around their area the same question and they gave users green light, they&#39;ve been talking about this on &lt;a href=&quot;https://www.reddit.com/r/apple/search?q=charge+iphone+with+ipad+charger&amp;restrict_sr=on&amp;sort=relevance&amp;t=all&quot; rel=nofollow&quot;&gt;many reddit posts&lt;/a&gt;.</description><link>http://www.ismoothblog.com/2016/11/can-you-use-same-charger-iphone-ipad.html</link><author>noreply@blogger.com (Saleem Almajed)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFrUtmtkU5fKz80wSjNOwUtpCM7KkGgDAvArOxkHRNKWH1vVX6d9KooB5ANSCtxv535LA-7S4-aCo5V4FY5sakzM9REjxZ0ChmPg6r5het5OjrbNnFnDnIPGCekgXUDyPOrS3ct5g3dU/s72-c/Use-iPad-Charger-to-Charge-iPhone.jpg" height="72" width="72"/></item></channel></rss>