COMPUTING & IT
Cloud Computing
Setting Up a Linux VM (CentOS7)
This section details the steps to setup a CentOS7 Digital Ocean VM. Following Linode guide is an external reference.
- Use the cloud manager to create and view the linux instance.
- When creating the instance through the cloud manager, add the appropriate SSH keys for PuTTy access.
- Access the admin account eg.
centosthrough PuTTy. - Perform system updates:
sudo yum update - Set local timezone:
sudo timedatectl set-timezone 'America/New_York'- To view all timezones:
timedatectl list-timezones
- To view all timezones:
- Set hostname:
hostnamectl set-hostname <hostname> - You can do some
.cshrccustomization:
set host = `uname -n`
#prompt: <bold>user</bold>@host:<last two dirs>
set prompt = '%B%n%b@%m:%c1> '
# ALIASES
alias h 'history'
alias rm 'rm -i'
alias ls 'ls --color=auto'
alias vimr 'vim -R'
alias ll 'ls -la'
alias mine 'chmod og-rwx'
alias safe 'chmod a-w'
- Add the above customization to
/etc/skel/.cshrcfor new users. - To create an admin/sudo account:
useradd <adminuser> && passwd <adminuser>usermod -aG wheel <adminuser>- Make sure the wheel group is uncommented in
/etc/sudoersusing the command#visudo-
%wheel ALL=(ALL) ALLNOTE%is NOT a comment.
-
-
Harden SSH Access by adding authentication via private/public key pair and disable password access.
- For PuTTy, use PuTTygen to generate private/public key pair.
- use 4096-bit RSA or ECDSA to generate the key pair.
- Save the private key in safe location and add it to the PuTTy session:
Connection -> SSH -> Auth -> Private key file for authentication - Add the public key to the Linux VM instance:
~/.ssh/authorized_keys - Andd now when loging in for that particular user, you will not require to use the password.
-
SSH Daemon Options in
/etc/ssh/sshd_config:- Disable root login via SSH:
PermitRootLogin no - Disable password auth:
PasswordAuthentication no - If using only IPv4 then:
AddressFamily inet -
Restart ssh daemon:
sudo systemctl restart sshd
- Disable root login via SSH:
- Use Fail2Ban to avoid malicious attack through the SSH port and other ports too. FIXME Use the following Linode Tutorial to install and configure fail2ban.
-
Configure Firewall. The default application in Ubuntu
ufw(Uncomplicated Firewall) is disabled. Follow the Linode Tutorial to install and setup the firewall. Basic setup steps: -
Users, Groups and Project Area:
-
sudo useradd -c "First Last" -G ptesla -k /etc/skel -s /bin/csh -m vlab1- Creates a user
vlab1, adds a supplement group for project teslaptesla, copies skeleton files from/etc/skel, sets the SHELL as/bin/cshand creates a home directory-m.
- Creates a user
- To create a project area, the corresponding user logs in to his account:
-
ssh-keygen -b 4096 -t rsa- You can leave all default options and for passpharase can be left empty. This will create a 4096-bit RSA keypair (private/public) for SSH which is used for PuTTy, VNC and SVN.
- Copy the public key
~/.ssh/id_rsa.pubto the SVN server's~/.ssh/authorized_keys. This is required to sync the projects in the SVN server. -
bmtproj– Choose the appropriate project and if everything goes well, the project area should be created and the SVN repo should be checked out as well.
-
-
Networking
PPTP VPN client in Linux (CentOS7)
SETUP
- Followed this blog to setup the VPN
- Install PPTP:
sudo yum install pptp pptp-setup - Configuration:
sudo pptpsetup –create bmt-229 –server [server address] –username [username] –password [pwd] –encrypt - This command will create a file named
bmt-229under/etc/ppp/peers/with server info written inside. - This command will also write your username and password into
/etc/ppp/chap-secrets - Register the ppp_mppe kernel module:
sudo modprobe ppp_mppe - Register the nf_conntrack_pptp kernel module:
sudo modprobe nf_conntrack_pptp
USER GUIDE
- Connect to VPN PPTP:
sudo pppd call config - It will establish PPTP VPN connection. You can type command
ip a | grep pppto find the connection name (e.g.ppp0). No return indicates connection failure. - If any error, you can look into
/var/log/messagesfor log info - Check IP routing table info:
route -n - Add Network Segment to current connection:
route add -net 192.168.11.0 netmask 255.255.255.0 dev ppp0
- You can now ping the destination to check the access
- Disconnect the VPN:
sudo killall pppd
WebSite/Wiki
Jekyll: Static Page on GitHub
| #jekyll | #github | #jekyll-rtd-theme | #website | #static | #jekyll-rtd-userguide |
This section shows you how to create a static web page using Jekyll (and a Jekyll theme) and host it on github.
PREPARING LINUX FOR JEKYLL
- First we need install the prereqs on a Linux workstation. Following is for the
UbuntuonAWS: sudo apt-get install ruby-full build-essential zlib1g-dev- In order to load
gemlocally, add the following in.bashrcexport GEM_HOME=$HOME/gemsexport PATH=$HOME/gems/bin:$PATH
gem install jekyll bundler
CONFIGURING JEKYLL
- Site-wise configuration are done using
_config.yml - See https://jekyll-rtd-theme.rundocs.io/ for config options.
-
IMPORTANT Option
baseurlwhen testing a site that doesn't sit at the root of the server domain. See this blog for more detail on it. - Someone changed this to
/silicon-vlsi.github.ioand all urls had duplicate domain eghttps://silicon-vlsi.github.io/silicon-vlsi.github.io/content/projects.htmland thus breaking the links. - Removed the
baseurlandurlas well since hosting on github automatiacally takes care of it. I think. It works so far.
USING A JEKYLL TEMPLATE IN GITHUB
- Login to your github account eg.
silicon-vlsi - Navigate to the template repo (eg. #jekyll-rtd-theme and click
Fork - Rename (from the repo's settings) the copied repo to the following format:
<username>.github.io- eg.
silicon-vlsi.github.io
- Give it few minutes to publish it and browse to
http://silicon-vlsi.github.ioto see the website!
USING JEKYLL TO MAINTAIN THE SITE
- Clone the repo to your prepared Linux workstation:
git clone https://github.com/silcion-vlsi/silicon-vlsi.github.io
- Change directory
cdtosilicon-vlsi.github.ioand edit_config.ymlchange the info. - For the first time after clone, to get the dependencies:
bundle install-
bundle updateFIXME Document this
-
- Build the site again after the changes:
bundle exec jekyll build -
git commit --all [--allow-empty] -m "comment"FIXME: Document when we need--allow-empty git push
CONTENT MANAGEMENT
The directory structure (USR tag indicates changes made by the user and SYS typically should be left untouched and synced with the original repo):
.
├── README.md : USR: Content for the landing page
├── _config.yml : USR: Site-wide configuration
├── _includes : SYS: All includes: common codes, etc
├── _layouts : SYS: site layout
├── _sass : SYS: ??
├── _site : SYS: Compiled html site here
├── assets : SYS: CSS themes etc.
├── content : USR: Main site content goes here.
│ ├── README.md
│ ├── Resources
│ ├── people.md
│ ├── projects.md
│ └── training.md
└── wiki : USR: The second content page
├── README.md
├── doc1
├── doc2
└── quickref.md
SYNCING THE LOCAL FORK WITH ORIGINAL UPSTREAM REPO FIXME Refer a proper documentation for this and put some more detail in this documentation.
- Related github docs: Config a remote for fork, Syncing a fork
-
Onetime config remote upstream repo with the fork:
- List the current configured remote repository for your fork.
git remote -v - Specify the remote upstream repository that will be synced with the fork:
git remote add upstream https://github.com/rundocs/jekyll-rtd-theme.git - Verify:
git remote -v
- List the current configured remote repository for your fork.
- Syncing the fork withe upstream repo:
- Fetch the branches and their respective commits from the upstream repository. Commits to BRANCHNAME will be stored in the local branch upstream/BRANCHNAME:
git fetch upstream - Check out your fork's local default branch - in this case, we use
developFIXME need more clarity on this one:git checkout develop(?) - Merge the changes from the upstream default branch - in this case,
upstream/develop- into your local default branch. This brings your fork's default branch into sync with the upstream repository, without losing your local changes:git merge upstream/develop - Push the changes to the fork:
git push
- Fetch the branches and their respective commits from the upstream repository. Commits to BRANCHNAME will be stored in the local branch upstream/BRANCHNAME:
LOGOS
Creating favicon
- Generate a 16x16 image (Gimp, Inkscape, etc) eg. favicon.png
- Convert it to a ppm or pnm format eg:
$ pngtopnm favicon.png > favicon.pnm-
NOTE If you have more than 256 colors, you'll get an error. You can quantize it to 256 using
$ pnmquant 256 favicon.pnm > temp.pnm; mv temp.pnm favicon.pnm
-
NOTE If you have more than 256 colors, you'll get an error. You can quantize it to 256 using
- Convert using the the utility
ppmtowinicon:$ ppmtowinicon -output favicon.ico favicon.pnm