Category Archives: Technical
Talk at Mini-Debian Conf on Raspbian
It was my first time to visit IIT Bombay one of the top tier college in India which is well known in entire globe for its reputation, A mini-debian conf was organised by Debian contributors and FOSS enthusiastic from Mumbai.
The event which took place at the Indian Institute of Technology Bombay (IIT Bombay) was opened by Professor Kumar Appiah from the Department of Electrical Engineering at IIT Bombay, following the inauguration Venkatesh Hariharan started off the day with a keynote. The day two keynote was given by Kannon Moudgalya from the Department of Chemical Engineering at IIT Bombay and is also head of the Free and Open Source Software for Education (FOSSEE) project.
The conference covered a variety of topics ranging from hacking with Kali Linux, Open Hardware, an introduction to Raspbian (Debian on the Raspberry Pi), Mobile hacking and mobile forensics. Cyber Crime, Docker, Rust (Mozilla’s newish programming language) and many other Debian related talks.
Below is a listing of the sessions that took place at the two-day event, thanks to Purvesh Shah who sent the list along:
Open Source Security with Kali Linux by Rizwan Shaikh
AppStream/DEP-11 for the Debian Archive by Abhishek Bhattacharjee
Open Hardware — Warranty NOT void if opened by Anool Mahidharia
Debian and the BeagleBone Black by Raju Vindane
A comparison of BeagleBone Black (which is completely open hardware) and Raspberry Pi (which is partially open hardware)
Lil’Debi: Running Debian on Android by Kumar Sukhani
Debian on ARM by Siji Sunny
Introduction to Raspbian – A Raspberry Pi flavour of Debian by Rahul Mahale
Debian History and Debian Cycle by Shirish Agarwal
Key-signing Party: With so many Debian Developers around, it was the perfect opportunity for everyone to sign and exchange their keys with other volunteers as well.
Debian ‘In’ India by Kartik Mistry and Future Directions for Debian—IN by Jaldhar Vyas
Mobile Hacking & Mobile Forensics by Sachin Dedhiya
Cyber Crime in India & Digital Forensics by Sachin Dedhiya
Introduction to Docker by Augustine Correa
Debian Packaging by Praveen A
Gnome Shell Accessibility with Orca by Krishnakant Mane
Rust: The memory safe programming language by Manish Goregaokar
Building A Mail Server with Debian by Jaldhar Vyas
Lightning Talk by Sana Khan
So my all day was with excitement and enthusiasm and awesome talks I started my Talk on Raspbian after the talk of Siji who talked on Debian on ARM
My session was focused on
Introduction to Raspbian — I started with an introduction about the Raspberry Pi board, how it differs from other boards and some of its use cases. Then I talked about Raspbian, a port of Debian to the Raspberry Pi, which is also the recommended operating system for the Raspberry Pi. I showed how to get Raspbian setup and then showed how to setup this Raspberry Pi as a WiFi router. There was an short Q&A session which I answered to best of my knowledge my presentation and how to is available at my github profile
Following are the some links where event was covered
Installing and configuring Open-source chef-server on Ubuntu and Managing AWS ec2 instances using knife
This is my first post on automation and configuration management and that too on Chef.
I personally invested a lot time to get going with Chef, because it is bit confusing for newbies to catch the pace, after searching and reading a lot I choose a Open Source Chef Server to use and I started with the installation.
The difference between Hosted Chef Server and Open-source Chef Server can be read here.
It is a quite a troublesome installation of the Open-source chef server especially if you are doing first time and there are many things which are not well documented. Few considerations before the installation of chef-server is that your server should have minimum of 4GB of Memory.
I am using Ubuntu 12.04 LTS 64 bit in this tutorial.
There are various ways available to install chef server but I succeeded successfully to install by the following installation method, so here we go step by step installation of Open-Source Chef.
Get the copy of chef-server from the following links
For Ubuntu get it from
For Redhat and Centos get it from
select the right architecture of your system and download the setup to your local storage,you can know the architecture of your Linux system by the command lscpu | grep Arch
After downloading the setup move it to the server where you are willing to install and configure the Chef Server.
Before starting there are some important considerations to note
If you have PostgreSQL already installed and running on default port 5432, I would recommend you to change the port of PostgreSQL other than 5432 and restart the PostgreSQL server. This hack worked for me for successful installation.
Set your host-name to resolvable DNS, you can see your hostname by the hostname -f and you can change it by editing the file /etc/hosts
In your security groups or Firewall add an inbound rule for port number 9462. because the chef-server 11 does not run webui on 4000 and 4040, though I added an Inbound rule for them, add 5432 and 22 for ssh access.
After doing all three preliminary steps then go to the directory where you configured your chef-server setup .deb file and run the following command to install the open-source chef-server, in my case it was,
sudo dpkg -i chef-server_11.1.6-1_amd64.deb
Fingers crossed it will take few minutes to install and configure the chef-server
If your chef-server is installed successfully, you can run next command,
it will reconfigure your chef-server passing your systems parameter and starting the required services such as rabbitmq and postgres.
After successful execution of above command run the following command to test the configuration.
sudo chef-server-ctl test
and if it returns success, yes you installed the chef server successfully Congratulations :p
restart the chef server once by the following command
sudo chef-server restart
Now to access the chef-server WebUI a small hack has to be done, I did on my server is to
and replace it by
Now once again reconfigure and restart chef-server by running following commands
sudo chef-server restart
Now go to browser and enter the IP or domain of your server you may get SSL Certificate error because it is not yet configured, so add the exception and proceed further.
you will be redirected to the Chef-server webui Login Page
enter the default username as admin
and password is p@ssw0rd1
now login and first change the admin password
now there you can see your chef-server dashboard and all other tabs you can browse nodes,clients,roles etc.
So we are not yet done we didn’t do any useful work using chef-server!
So lets create an ec2 Instance but before that we need to install some gems
gem install chef
gem install knife-ec2
gem install net-ssh-multi
after installing these gems
create a directory named .chef in home folder or you can simply run the following commands:-
mkdir -p ~/.chef
sudo chown -R $USER ~/.chef
After it regenerate the private key from the Chef WebUi of Admin and copy to the
also regenerate the private key of chef-validator client and copy it to
Run the following command
knife configure -i
For configuring knife, we need to pass few details:
Path for knife.rb file: default is ~/.chef/knife.rb
Name of the new user: <any-desired-name>
Name of the existing admin: admin
Location of admin’s private key: /etc/chef-server/admin.pem
Validation Key Name: chef-validator
Validation Key Path: /etc/chef-server/chef-validator.pem
Path of chef repository: <default>
New User Password: <any-desired-password>
after doing the knife configuration
add the following lines to knife.rb
knife[:editor] = ‘/usr/bin/vim’
knife[:aws_access_key_id] = “”
knife[:aws_secret_access_key] = “”
Note for the keys aws_key_id is the key ID of your AWS IAM user
and aws_secret_access_key is the secret key is also of the same user
Note the IAM user has to admin so that it can have access to create and delete Instances
So now all set and we are good to create an ec2 instance using chef-server
So use the following command to create your ec2 instance
knife ec2 server create -r “role[blog-test]” -I ami-a74f62f5 -f m3.medium -S knife-ec2-test -i ~/.ssh/knife-ec2-test.pem –ssh-user ubuntu –region ap-southeast-1 -Z ap-southeast-1b
]" is the run_list I want to associate with the newly created node. You can put any roles and recipes you like here
-Iis the AMI ID selected for AMI image
-fis the Amazon EC2 instance type (Also known as a Flavor)
-Sis the name you gave to the EC2 key pair generated in the AWS console
-ipoints to the private key file of that EC2 key pair as downloaded when the keypair was created in the AWS console
--ssh-userthe official Ubuntu EC2 AMIs use ubuntu as the default user
--regionap-southeast-1 If you want your instances to be deployed in any specific Amazon AWS region, add this parameter and the desired region
bis the availability zone within your region (i.e. you have an existing disk volume you need to made available to this instance)
after running the command it will create an ec2 instance and install the chef client
also it will execute the recipes under the role test
Managing EC2 Instances with knife
to list all the servers in the cloud
knife ec2 server list –region ap-southeast-1
To delete the instances and nodes you can do it by following way:-
knife kec2 server delete -i-xxxxxxx –region ap-southeast-1
knife node delete i-xxxxxxx
So we have installed and configure the chef server and by using knife we have created an ec2 instance.
A one day Fedora Workshop was scheduled on October 11th October 2014 at KKW College Nashik.
After reaching one of the Reputed College of City it was an Small Felicitation by HOD of MCS Department.
The Workshop Mainly was divided into 2 sessions of 2 hours each.
Session : I
It was an introductory session to Open-Source and GNU/Linux. I started with a small presentation explaining the History of Open-source and GNU, When it was established and what are the goals of it. I focused on the four features of FOSS i.e. Freedom to use, freedom to examine , Freedom to redistribute and freedom to modify. Then I introduced the GNU/Linux, the Linux Kernel, how it is built and how is the release process of the Linux kernel with the short video. Then I introduced the Fedora GNU/Linux Operating system. I showed the live installation of the Fedora 20 distro and also showed the dual boot process of installing Linux with other OS. I showed the different Desktop flavors like GNOME, KDE, XFCE, MATE etc. After Installation of the Fedora 20, I explained the basic commands with examples, I focused on File processing commands and process monitoring commands. I also explained the Features of Fedora and focused on 4 F’s of Fedora Project. I explained the Freedom, Friends, Features, First. I also introduced the Fedora Project Community with all the SIGs and also explained how to join Fedora Project with Fedora Account Systems. With the Introduction to GNU/Linux with Fedora, Students asked me some basic questions and I was happy to answer them in simplest Language few questions were like how to change IP adress etc.
Session : II
Session II was focused on how to use Fedora, I started with the the installation and un-installation of software’s. Firstly I explained the de-facto standard of Linux Software Installation and showed the installation of GNOME IP messenger from source. Then I focused more on showing the installation by command line and showed the installation, upgrading and uninstallation by yum command. Installed the software VLC with yum command i.e yum install vlc and also showed un-installation by yum remove command. Also demonstrated the updating and searching for the particular package with yum. Then I showed the Software Installation and un-installation with rpm command for .rpm packages with the archey package. Further I showed the simplest way by showing Gnome Software and Yum Extender. In between there were few questions like how to install windows software on Linux and I answered them. After installation I showed how to use Text Editors like Vim, Emacs and Gedit. Then I explained step by step procedure for how to compile and run programs of C, C++, Python, Ruby and Shell. After that I spoke on Fedora Project Community and how one can contribute to it. Shared the links of particular SIG’s of Fedora Project.
At the end there were questions from students and I answered best of my knowledge.
I conducted a small oral quiz and distributed the Fedora 20 DVDs and Stickers to Students.
It was nice experience and special one because of the support and guidance of Fedora India Community.
Thanks a lot for Prof. Pawan Malani for arranging the workshop.
Also I am Thankful to Fedora Contributors Chandan Kumar and Siddhesh Poyarekar for their personal guidance for this workshop.
Thanks a lot Fedora India Community for the great support.
It was an awesome experience of conducting a small Fedora Workshop.
Hello Pi users,
After investing much time then expected to run a cron job at reboot in Rapbian. finally I am able to run the cron job at startup and able to execute the necessary commands at start-up.
It is quite Obvious that @reboot will run the cron job at start up but in Raspbian and Debian (wheezy) it is not the case.
@reboot does not works as expected and it is a bug in debaian you can read it here https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=635473
So here are the steps to for running cron job at reboot :-
log in to your pi using ssh
switch to root user using sudo bash
run the command crontab -e
put your command as @reboot bash /path/to/file/run.sh save it and get back on terminal
then start cron service by running /etc/init.d/cron start
then one additional step is to edit the /etc/rc.local file and add the following line in /etc/init.d/cron/start be sure that it should before exit 0.
now reboot your system by command reboot
and now your cron job is started you can check it by command ps aux | grep cron
also you can check the log tail /var/log/syslog.
One day Python Workshop Conducted at SITRC Nashik.
After almost a year it was my first visit to SITRC, but it was not as a student to attend the lectures but for conducting a workshop. It was an Special feeling to conduct a workshop in a college where I Completed my BE Graduation.
A Python Workshop named “__init__ Python(self):” Introduction for Programmers was scheduled in Three Sessions on August 2 2014.
I began the first session with showing some snaps where Python is used I showed the use of Python in web by showing snaps of Mozilla, Instagram, Pinterest and other websites,also showed the use of python in Mobile, Servers, science, Games , Graphics etc. Then I spoke on differences between Python2 and Python3. I started Python Introduction, Simultaneously introducing them to Python interpreter and doing some basic arithmetic and print statements. Then I introduced Data-types with the examples. After Data-types I explained Control-flow in Python, Explaining While For loops and if , if-else flows, also explained use of break and continue. Simultaneously I gave the programs to find factorial of number, to find average of n numbers etc. And students implemented the program.
Second session was focused on Data Structures, I introduced the various Python Data Structures such as Lists, Dictionary, Tuple and Set. Illustrated with an example how lists are Mutable and rest are not. Also showed the List operations scuh as append() remove() , join(), split(), insert(), count(), sort() etc. Also illustrated the Stack Operations with pop() and push() operations, also explained the same with Queue. Further showed the use of Dictionaries in various scenarios also programmed about the manipulation of Lists, Dictionaries and Tuples. Then I introduced the Sets and showed various operations on it. I gave assignments to students to add two matrices and many of them completed it.
Session III started with Introduction to functions/methods in Python. Showed the syntax of methods and how to use them to modular the programs. Also showed the use of range() function in Loops and Data Structures. And also how one can forget to speak on lambda function which gives such a power to Python programmer. Then I introduced the Object-Oriented programming with python. Introduced the Classes in Python, showed the syntax and emphasized more on __init__() method and keyword self() and showed practical implementation with example. Then I introduced the Inheritance with program, Simultaneously students also programmed it. I also showed explained the Multiple Inheritance with a short example. Students performed the short assignments given to them.
Then it was a short question and answer section where students asked me about if it is possible to implement method overloading etc. I answered all the questions to best of my technical knowledge.
After it students shared their feedback and Tejas Rawal concluded the Workshop. At the End of day it was nice experience to conduct the workshop.
Thanks a lot to Prof. Tushar.B.Kute and Prof.Sandip Walunj for organizing the workshop and maintaining such a wonderful hospitality.
All Stuffs of Workshop I used are can be found at my Github account https://github.com/RahulMahale/Talks-and-workshops/
After travelling from Nashik to Sahyadri Valley College OF Engineering in the cool climate it was an warm welcome from the College Principal Mr. Sanjay Zope. Though the Workshop was mainly targeted for the Staff, I had an chance to interact with the Third year Computer Engineering students. Before the session begin it was small felicitation from the Chairman Mr. V.R. Divakaran. After the felicitation Mr.Zope expressed his view towards the open source philosophy and looked very ambitious to use and promote open source in the Campus.Campus has all the systems with upgraded Open-Source Software installed on it. With Ubuntu 13.10 running on Desktops.
After the felicitation I began the session “Introduction to Open Source and Linux”for Computer Engineering students. I started with the GNU Project and Free Software Foundation. Then I explain the FOSS philosophy. Then I spoke about the Evolution of Linux Kernel by Linus Torvalds and started explaining the various Linux Distros, then I showed the demonstration of the basic Linux commands for File Processing and file editing. Some Sys-Admin commands and network configuration commands. Then there were few questions from students regarding basic network configuration and open source alternatives for few softwares. It was good experience with students for QA session.
The Second Session was for college Staff and focused on “using Open Source tools”. I gave the basic introduction and guidlines to use tools like Libre Office, SciLab, Sugar CRM, Thunderbird, GNU Parted, GIMP. Also introduced the how to start for Programming languages for c, c++, Shell and Java on Linux. I also introduced some text editors like vim and Emacs, then I showed the IDEs Compatible on Linux system such as Eclipse, Netbeans, Komodo and Geany. I demonstrated the installation and un-installation of softwares and packages on the Linux system using Command line and GUI package managers like synaptic.
Then there was QA Session where staff asked me the various Open Source altrenatives to proprietary softwares like MATLAB, Outlook, Adobe Photoshop etc. I answered the one which I knew most popular.This was wonderful experience for me as it was my first time to be in front of College Staff.
Thanks to principal Mr. Sanjay Zope for working with me for the planning and organizing this workshop. Thanks also to the Management, and Faculty of SVCOE for the wonderful hospitality, and their support for the workshop.
So far we know that at local user accounts are managed through local files (/etc/passwd) on each machine. However, it is difficult to coordinate local user accounts on many systems.
In this blog, I will look at how to setup a machine as a client, to use a network user accounts that are provided by an existing LDAP (Lightweight Directory Access Protocol) directory service. This allows the LDAP directory to be our central authority for all network users and groups in your organization.
User account information determines the characteristics and configuration of the account Authentication methods are used to determine if someone trying to login should get access to the account. Network directory services can provide both user account information and authentication methods.
LDAP directory services can be used as a distributed, centralized, network user management service. Directory entries are arranged in a tree structure that can be searched. The base DN (Distinguished name) is the base of the tree that will be searched for directory entries for users and groups.
Key Elements for LDAP configuration
Server’s fully qualified hostname
Base DN to search for user definitions
The certificate authority (“CA”) certificate used to sign the LDAP server’s SSL certificate.
You should ensure that the directory-client yum (for Redhat and Fedora) package group is installed, which includes the packages sssd, authoconfig-gtk, and oddjob-mkhomedir befor you begin.
System —> Administration —> or system-config-authentication can be used to modify the configuration of Identity and Authentication.
System-config-authentication will automatically turn on the sssd service which will look up and cache LDAP user information and authentication credentials for the client. If the LDAP server is unavailable but sssd is working, the system may be able to authenticate and get information about network users from the sssd cache.
Use getent passwd username to verify the account information being used. This works whether the user is a local user defined in etc/passwd or a network user from an LDAP service. The command will always show the definition that is actually being used by the system if there is any duplication between local users and network users. By default, the local user definition overrides the network user definition.
Linux software applications in the form of source code are available at different sites on the Internet. You can download any of this software and install it on your system. Recent releases are often available in the form of compressed archive files. Applications will always be downloadable as compressed archives if they don’t have an RPM version. This is particularly true for the recent versions of GNOME or KDE packages. RPM packages are only intermittently generated.
Decompressing and Extracting Software in One Step:-
Though you can decompress and extract software in separate operations, you will find that the more common approach is to perform both actions with a single command. The tar utility provides decompression options you can use to have tar first decompress a file for you, invoking the specified decompression utility. The z option automatically invokes gunzip to unpack a .gz file, and the j option unpacks a .bz2 file. Use the Z option for .Z files For example, to combine the decompressing and unpacking operation for a .tar.gz file into one tar command, insert a z option into the option list, xzvf (see the later section “Extracting Software” for a discussion of these options). The next example shows how you can combine decompression and extraction in one step:
# tar xvzf htdig-3.1.6.tar.gz
For a -compressed archive, you use the j option instead of the z option.
# tar xvjf htdig-3.1.6.tar.bz2
Decompressing Software Separately
Many software packages under development or designed for cross-platform implementation may not be in an RPM format. Instead, they may be archived and compressed. The filenames for these files end with the extension .tar.gz, .tar.bz2, or .tar.Z. The different extensions indicate different decompression methods using different commands: gunzip for .gz, bunzip2 for .bz2, and decompress for .Z. In fact, most software with a RPM format also has a corresponding .tar.gz format. After you download such a package, you must first decompress it and then unpack it with the tar command. The compressed archives can hold either source code that you need to compile or, as in the case with Java packages, binaries that are ready to run. A compressed archive is an archive file created with tar and then compressed with a compression tool like gzip. To install such a file, you must first decompress it with a decompression utility like gunzip and then use tar to extract the files and directories making up the software package. Instead of the gunzip utility, you could also use gzip -d. The next example decompresses the jdk-7u3-linux-i586.tar.gz file, replacing it with a decompressed version called jdk-7u3-linux-i586.tar:
You can download compressed archives from many different sites, including those mentioned previously. Downloads can be accomplished with FTP clients such as NcFTP and gFTP, or with any web browser. Once downloaded, any file that ends with .Z, .bz2, .zip, or .gz is a compressed file that must be decompressed. For files ending with .bz2, you use the bunzip2 command.
Files ending with .bin are self-extracting archives. Run the bin file as if it were a command. You may have to use chmod to make it executable. The j2sdk software package is currently distributed as a self-extracting bin file.
Selecting an Install Directory
Before you unpack the archive, move it to the directory where you want it. Source code packages are often placed in a directory like /usr/local/src, and binary packages go in designated directories. When source code files are unpacked, they generate their own subdirectories from which you can compile and install the software. Once the package is installed, you can delete this directory, keeping the original source code package file (.tar.gz). Packages that hold binary programs ready to run, like Java, are meant to be extracted in certain directories. Usually this is the /usr/local directory. Most archives, when they unpack, create a subdirectory named with the application name and its release, placing all those files or directories making up the software package into that subdirectory. In certain cases, the software package that contains precompiled binaries is designed to unpack directly into the system subdirectory where it will be used. For example, it is recommended that j2sdk-1.4.2-FCS-linux-i386.tar be unpacked in the /usr/local directory, where it will create a subdirectory called j2sdk-1.4.2. The /usr/local/j2sdk-1.4.2/bin directory holds the Java binary programs.
First, use tar with the t option to check the contents of the archive. If the first entry is a directory, then when you extract the archive, that directory is created and the extracted files are placed in it. If the first entry is not a directory, you should first create one and then copy the archive file into it. Then extract the archive within that directory. If no directory exists as the first entry, files are extracted to the current directory. You must create a directory yourself to hold these files.
# tar tvf jdk-7u3-linux-i586.tar
Now you are ready to extract the files from the tar archive. You use tar with the x option to extract files, the v option to display the pathnames of files as they are extracted, and the f option, followed by the name of the archive file:
# tar xvf jdk-7u3-linux-i586.tar
You can also decompress and extract in one step using the -z option for gz files and –j for bz2 files.
The extraction process creates a subdirectory consisting of the name and release of the software. In the preceding example, the extraction created a subdirectory called jdk-7u3-linux-i586
You can change to this subdirectory and examine its files, such as the readme and INSTALL files.
# cd jdk-7u3-linux-i586
Installation of your software may differ for each package. Instructions are usually provided along with an installation program. Be sure to consult the readme and INSTALL files, if included.
Disk utility can also be used to create new partitions and prepare them for use. Once a partition has been created, it must be formatted with a file system before it can be used. The standard file system used in Red Hat Enterprise Linux is ext4,the Fourth Extended File system.
In order to use the file system, we need to associate it with a mount point, and empty directory on a file system that is already available. Then the contents of that file system can be browsed as if they are the contents of the mount point directory. This is called as mounting the file system on the mount point.
A file which only root can edit, /etc/fstab, list what partitions should have their file systems mounted on what mount points with which options, one partition per line, A typical line may look like this:
/dev/sda6 /data ext4 defaults 1 2
This indicates that the ext4 file system on the /dev/sda6 partition should be mounted on the directory /data automatically using default options at boot time, and it should be backed up and checked for errors normally
Once this is set, root can run mount /data to mount the file system above and umount /data to un-mount it.
High- level steps for creating persistent storage
Log into GNOME as a regular user.
Use Disk Utility to create a partition. Enter the root password when prompted by the Authenticaion is required t o create a partition dialog.
Format the file system and assign it a label.
Test the file system by mounting it with Disk Utility (It will be mounted on the directoy /media/your-label.)
Open a shell prompt with Application —> System Tools —> Terminal.
At the shell prompt, type su – to switch to a root shell.
As root, type the shell command mkdir /data to make an empty directory, /data, for the file system.
Use gedit to add a line to /etc/fstab which will mount the ext4 file system in your new partition on your mount point (/data in this example), using default options as in the example above. Save /etc/fstab.
As root, run umount /media/your-label, then mount /data. verify that your partition is mounted on /data by highlighting the partition in Disk Utility.
Reboot to confirm that the file system mounts automatically on the desired mount point.