<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://foss.coep.org.in/coepwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin</id>
	<title>COEP Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://foss.coep.org.in/coepwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin"/>
	<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php/Special:Contributions/Wikiadmin"/>
	<updated>2026-04-11T09:04:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=BSD_Setup_Using_VirtualBox&amp;diff=34</id>
		<title>BSD Setup Using VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=BSD_Setup_Using_VirtualBox&amp;diff=34"/>
		<updated>2025-08-12T13:45:15Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==Setup== ===Creating virtual machine=== * Open virtual box * click on &amp;#039;&amp;#039;&amp;#039;new&amp;#039;&amp;#039;&amp;#039; * select type as &amp;quot;linux&amp;quot; and version as &amp;quot;linux2.6/3.x(32-bit)&amp;quot; center * select ram 512 MB * create virtual hard drive -&amp;gt; vdi -&amp;gt; dynamic allocation -&amp;gt; 20GB center center center center File:Bsd16.png|720px|thumbnail|cent...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Setup==&lt;br /&gt;
===Creating virtual machine===&lt;br /&gt;
* Open virtual box&lt;br /&gt;
* click on &#039;&#039;&#039;new&#039;&#039;&#039;&lt;br /&gt;
* select type as &amp;quot;linux&amp;quot; and version as &amp;quot;linux2.6/3.x(32-bit)&amp;quot;&lt;br /&gt;
[[File:Bsd1.png|720px|thumbnail|center]]&lt;br /&gt;
* select ram 512 MB&lt;br /&gt;
* create virtual hard drive -&amp;gt; vdi -&amp;gt; dynamic allocation -&amp;gt; 20GB&lt;br /&gt;
[[File:Bsd12.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Bsd13.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Bsd14.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Bsd15.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Bsd16.png|720px|thumbnail|center]]&lt;br /&gt;
&lt;br /&gt;
* Now follow the instructions&lt;br /&gt;
&lt;br /&gt;
* Go to settings of the machine&lt;br /&gt;
* Go to &#039;&#039;&#039;storage&#039;&#039;&#039; &lt;br /&gt;
* Select empty, controller:IDE and choose iso file of BSD&lt;br /&gt;
* Click on &#039;&#039;&#039;ok&#039;&#039;&#039;&lt;br /&gt;
[[File:Bsd7.png|720px|thumbnail|center]]&lt;br /&gt;
* Now start the machine&lt;br /&gt;
* Select the first option using arrow keys and press enter&lt;br /&gt;
*Select region as India and Unix standard keymap&lt;br /&gt;
*Next, you will get a screen asking how you want to partition the disk.Press &amp;quot;A&amp;quot; to use entire disk.&lt;br /&gt;
*In the partition index,keep atleast 1 partition marked as &amp;quot;Free BSD&amp;quot;.Also,select the &amp;quot;Install free BSD boot manager&amp;quot;.&lt;br /&gt;
*Next, you will get a screen where you can select how much memory to give to /,home,boot,etc.Select &amp;quot;A&amp;quot; to auto partition the disk.Then press &amp;quot;Q&amp;quot; to finish the partitioning.&lt;br /&gt;
*Choose distribution-&amp;gt;all-&amp;gt;yes.&lt;br /&gt;
*Now, you will get screen asking the installation media.Select CD/DVD and press enter.&lt;br /&gt;
*Installation starts and all files are extracted.This process takes about 20 minutes.&lt;br /&gt;
[[File:Bsd8.png|720px|thumbnail|center]]&lt;br /&gt;
*After the installation is complete,you will get a screen asking you to set up username and password.After seting it,press enter.Now,shutdown the machine.&lt;br /&gt;
* Go to storage and remove the iso file&lt;br /&gt;
[[File:Bsd9.png|720px|thumbnail|center]]&lt;br /&gt;
*Now,start the machine,login using username and password.Your BSD is ready to use!!!&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Damn_Small_Linux_4.11.r1_installation_using_VirtualBox&amp;diff=33</id>
		<title>Damn Small Linux 4.11.r1 installation using VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Damn_Small_Linux_4.11.r1_installation_using_VirtualBox&amp;diff=33"/>
		<updated>2025-08-12T13:44:52Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;=== Damn Small Linux(DSL) 4.11.r1 on VirtualBox ===  1) Create the VirtualBox disk Image with following specifications: -RAM : 512 MB Disk : 2.00 Gb  2) Then Settings -&amp;gt; Storage ,select Empty and then on drop down of CD icon select -&amp;gt; choose a virtual CD/DVD drive and select dsl-4.11.r1.iso [http://www.damnsmalllinux.org]  3)Now Start your virtual machine. You will be able to see Damn Small Linux(dsl) getting started. img1   4)After the kernel is l...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Damn Small Linux(DSL) 4.11.r1 on VirtualBox ===&lt;br /&gt;
&lt;br /&gt;
1) Create the VirtualBox disk Image with following specifications: -RAM : 512 MB Disk : 2.00 Gb&lt;br /&gt;
&lt;br /&gt;
2) Then Settings -&amp;gt; Storage ,select Empty and then on drop down of CD icon select -&amp;gt; choose a virtual CD/DVD drive and select dsl-4.11.r1.iso&lt;br /&gt;
[http://www.damnsmalllinux.org]&lt;br /&gt;
&lt;br /&gt;
3)Now Start your virtual machine. You will be able to see Damn Small Linux(dsl) getting started.&lt;br /&gt;
[[File:D-1.png|800px|img1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4)After the kernel is loaded,you will be able to see dsl Desktop&lt;br /&gt;
[[File:D-2.png|800px|img2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Then Right Click-&amp;gt;XShells-&amp;gt;Root Access--&amp;gt; Transparent&lt;br /&gt;
[[File:D-4.png|800px|img4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6) Root Shell will open and type the command &#039;&#039;&#039;cfdisk /dev/hda&#039;&#039;&#039; to partition the disk&lt;br /&gt;
[[File:D-5.png|800px|img5]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7) The following will appear on screen make two partitions both of Primary. &#039;&#039;&#039;Select New-&amp;gt;Primary&#039;&#039;&#039;.For the above mentioned vdi – 1st partition of 2000MB.Then again New-&amp;gt;Primary -2nd partition of remaining space or as per your requirement.&lt;br /&gt;
[[File:D-8.png|800px|img8]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8)For the &#039;&#039;&#039;second partition&#039;&#039;&#039; select type and choose 82 to be the type of partition. &#039;&#039;&#039;82 is for swap&#039;&#039;&#039;Next step is important.Click Write so that partition table is written to disk.Then Quit&lt;br /&gt;
&lt;br /&gt;
9)Type exit and close the shell.&lt;br /&gt;
&lt;br /&gt;
10)Shut down the machine.Start it again, you will see a meesgae &#039;&#039;&#039;No bootable medium found&#039;&#039;&#039;.Because we just made the partitions but didnt install files to hard disk.&lt;br /&gt;
&lt;br /&gt;
11)Go in Settings -&amp;gt; Storage .Select Empty and choose dsl-4.11.r1.iso so as to get the file systems&lt;br /&gt;
[[File:D-9.png|800px|img9]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:D-10.png|800px|img10]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12) Start dsl .You will see the dsl desktop again after some time, Now Right Click-&amp;gt;Apps-&amp;gt;Tools-&amp;gt;Install to Hard Drive.Type hda1 on the DSL hard disk installation where it asks for enter the target partition&lt;br /&gt;
&lt;br /&gt;
[[File:D-12.png|800px|img12]]&lt;br /&gt;
&lt;br /&gt;
[[File:D-13.png|800px|img13]]&lt;br /&gt;
&lt;br /&gt;
Installation will start now and it will prompt to install grub loader ,multi-user system,etc.&lt;br /&gt;
&lt;br /&gt;
13) After the installation is complete, power off the Virtual machine and click on Device-&amp;gt;CD/DVD-&amp;gt;Remove Virtual disk.&lt;br /&gt;
&lt;br /&gt;
14)   Grub will be seen and select DSL server and press Enter.The OS will then promt for DSL server, mouse configuration settings,pixel density..&lt;br /&gt;
&lt;br /&gt;
Select the server which does not have frame buffering and is fast.Its clearly mentioned in the prompt windows.Mouse configurations select it as per your machine.&lt;br /&gt;
&lt;br /&gt;
15) For first time use, it will ask password for root user&lt;br /&gt;
and it will create one more user &#039;dsl&#039; and prompt for its password.&lt;br /&gt;
&lt;br /&gt;
16) Then for login, select any one of the users with appropriate log and password.&lt;br /&gt;
&lt;br /&gt;
17) Finally DSL is installed. You can use editors to make files, run firefoex,play games.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[File:D-17.png|800px|img17]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Tiny_core_Setup_Using_VirtualBox&amp;diff=32</id>
		<title>Tiny core Setup Using VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Tiny_core_Setup_Using_VirtualBox&amp;diff=32"/>
		<updated>2025-08-12T13:44:31Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==Setup== ===Creating virtual machine=== * Open virtual box * click on &amp;#039;&amp;#039;&amp;#039;new&amp;#039;&amp;#039;&amp;#039; * select type as &amp;quot;linux&amp;quot; and version as &amp;quot;oracle(32-bit)&amp;quot; center * select ram 512 MB * create virtual hard drive -&amp;gt; vdi -&amp;gt; dynamic allocation -&amp;gt; 20GB center center center center * now go to settings of the machine * go to &amp;#039;&amp;#039;&amp;#039;sto...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Setup==&lt;br /&gt;
===Creating virtual machine===&lt;br /&gt;
* Open virtual box&lt;br /&gt;
* click on &#039;&#039;&#039;new&#039;&#039;&#039;&lt;br /&gt;
* select type as &amp;quot;linux&amp;quot; and version as &amp;quot;oracle(32-bit)&amp;quot;&lt;br /&gt;
[[File:Tc100.png|720px|thumbnail|center]]&lt;br /&gt;
* select ram 512 MB&lt;br /&gt;
* create virtual hard drive -&amp;gt; vdi -&amp;gt; dynamic allocation -&amp;gt; 20GB&lt;br /&gt;
[[File:Tc3.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc4.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc5.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc6.png|720px|thumbnail|center]]&lt;br /&gt;
* now go to settings of the machine&lt;br /&gt;
* go to &#039;&#039;&#039;storage&#039;&#039;&#039; &lt;br /&gt;
* Select empty, controller:IDE and choose iso file of Tiny core linux&lt;br /&gt;
* Click on &#039;&#039;&#039;ok&#039;&#039;&#039;&lt;br /&gt;
[[File:Tc8.png|720px|thumbnail|center]]&lt;br /&gt;
* Now start the machine&lt;br /&gt;
* Select the first option using arrow keys and press enter&lt;br /&gt;
[[File:Tc9.png|720px|thumbnail|center]]&lt;br /&gt;
* Now follow the instructions&lt;br /&gt;
&lt;br /&gt;
*Select the TC install icon at the bottom of the screen which will open an installation window.Select sda and check &amp;quot;install boot loader&amp;quot; and click on the -&amp;gt; arrow&lt;br /&gt;
[[File:Tc11.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc12.png|720px|thumbnail|center]]&lt;br /&gt;
*Select ext4-&amp;gt;-&amp;gt;Check all boxes except &amp;quot;core only&amp;quot;-&amp;gt;Proceed&lt;br /&gt;
[[File:Tc13.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc14.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc15.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc16.png|720px|thumbnail|center]]&lt;br /&gt;
&lt;br /&gt;
* After installation, you will get a window as below showing that installation has been completed.Then select the TC exit option and shutdown the virtual machine&lt;br /&gt;
[[File:Tc18.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc19.png|720px|thumbnail|center]]&lt;br /&gt;
* Go to storage and remove the iso file&lt;br /&gt;
[[File:Tc20.png|720px|thumbnail|center]]&lt;br /&gt;
* Now start the virtual machine&lt;br /&gt;
[[File:Tc21.png|720px|thumbnail|center]]&lt;br /&gt;
[[File:Tc10.png|720px|thumbnail|center]]&lt;br /&gt;
* Your Tiny core is ready to use!!!&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Dual_boot_system_in_Virtual_Box&amp;diff=31</id>
		<title>Dual boot system in Virtual Box</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Dual_boot_system_in_Virtual_Box&amp;diff=31"/>
		<updated>2025-08-12T13:44:11Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==Dual Boot : Windows7 and Ubuntu14.04== *There are two ways to do this: #Install Windows7 first and then Ubuntu. #Install Ubuntu and then Windows7  *For the first one, install Windows7 on your virtualbox(minimum 12GB HDD). * For the installation you can refer  This page  *You will have to create partition in HDD for Ubuntu.  =====Creation of partition===== *In window, right-click on computer. *Manage -&amp;gt; disk management. *You ca...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dual Boot : Windows7 and Ubuntu14.04==&lt;br /&gt;
*There are two ways to do this:&lt;br /&gt;
#Install Windows7 first and then Ubuntu.&lt;br /&gt;
#Install Ubuntu and then Windows7&lt;br /&gt;
&lt;br /&gt;
*For the first one, install Windows7 on your virtualbox(minimum 12GB HDD).&lt;br /&gt;
* For the installation you can refer [[Widows 7 installation using VirtualBox| This page]] &lt;br /&gt;
*You will have to create partition in HDD for Ubuntu.&lt;br /&gt;
&lt;br /&gt;
=====Creation of partition=====&lt;br /&gt;
*In window, right-click on computer.&lt;br /&gt;
*Manage -&amp;gt; disk management.&lt;br /&gt;
*You can see a single partition which you have made for windows.&lt;br /&gt;
*Right-click on the partition and shrink the volume(atleast 6GB).&lt;br /&gt;
*Now shut down the Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Installing Ubuntu=====&lt;br /&gt;
*You will have to remove the Windows ISO file from virtual CD/DVD.&lt;br /&gt;
*Select the VM -&amp;gt; settings -&amp;gt; storage&lt;br /&gt;
*Remove disk from virtual drive.&lt;br /&gt;
*Now &#039;choose virtual CD/DVD disk file&#039; -&amp;gt; ISO file of Ubuntu14.04.&lt;br /&gt;
*Change the operating system name and version name in general settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU must support PAE(Physical Address Extension).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Settings -&amp;gt; system -&amp;gt; Processor -&amp;gt;Extended Features -&amp;gt; Enable PAE/NX.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Now run the Virtual Machine.&lt;br /&gt;
*Proceed with the normal installation of Ubuntu.&lt;br /&gt;
*After installing Ubuntu, turn off the VM and restart.&lt;br /&gt;
*GRUB will appear.Try both the operating systems.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Facts_about_VDI,VHD_and_VMDK_formats_of_Hard_Disk&amp;diff=30</id>
		<title>Facts about VDI,VHD and VMDK formats of Hard Disk</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Facts_about_VDI,VHD_and_VMDK_formats_of_Hard_Disk&amp;diff=30"/>
		<updated>2025-08-12T13:43:47Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;== Facts about VDI, VHD, VMDK formats of Hard disk ==   * They are all virtual disks and they should all function the same. The difference between them is which software uses which format, and picking a specific one could make migrating the VM easier. If you are only going to be using VIRTUALBOX, go ahead and pick VDI.              # VDI is the format used by VIRTUALBOX.             # VMDK is the format used by VMWare products.             # VHD is the format used by Mic...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Facts about VDI, VHD, VMDK formats of Hard disk ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* They are all virtual disks and they should all function the same. The difference between them is which software uses which format,&lt;br /&gt;
and picking a specific one could make migrating the VM easier. If you are only going to be using VIRTUALBOX, go ahead and pick VDI.&lt;br /&gt;
&lt;br /&gt;
            # VDI is the format used by VIRTUALBOX.&lt;br /&gt;
            # VMDK is the format used by VMWare products.&lt;br /&gt;
            # VHD is the format used by Microsoft products.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*   All these formats are interconvertable . This interconvertabilty  makes  portability of these formats more efficient, since VDI file which is native format for Virtual box ,is not supported  in VMWare workstation or Windows products, so we can convert it into VMDK or VHD files.&lt;br /&gt;
    &#039;&#039;&#039;VIRTUALBOX SUPPORTS ALL THE FORMATS. &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*   VDI, VMDK, and VHD all support dynamically allocated sizing. VMDK has an additional capability of splitting the storage file into files less than 2 GB each, which is useful if your file system has a small file size limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
·&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Kali-Linux_installation_using_virtualbox&amp;diff=29</id>
		<title>Kali-Linux installation using virtualbox</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Kali-Linux_installation_using_virtualbox&amp;diff=29"/>
		<updated>2025-08-12T13:43:27Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==Setup== Download the iso file for kali-Linux. You can download it from [https://www.kali.org/downloads/ here] ===Creating virtual machine=== * Open virtual box * Click on &amp;#039;&amp;#039;&amp;#039;new&amp;#039;&amp;#039;&amp;#039; * Select type as &amp;quot;linux&amp;quot; and version as &amp;quot;other linux(64-bit)&amp;quot; center * Select ram 1.00 GB * Create virtual hard drieve -&amp;gt; vdi -&amp;gt; dynamic allocation -&amp;gt; 20GB center * Now go to settings of the machine * Go to &amp;#039;&amp;#039;&amp;#039;storage&amp;#039;&amp;#039;&amp;#039;  *...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Setup==&lt;br /&gt;
Download the iso file for kali-Linux. You can download it from [https://www.kali.org/downloads/ here]&lt;br /&gt;
===Creating virtual machine===&lt;br /&gt;
* Open virtual box&lt;br /&gt;
* Click on &#039;&#039;&#039;new&#039;&#039;&#039;&lt;br /&gt;
* Select type as &amp;quot;linux&amp;quot; and version as &amp;quot;other linux(64-bit)&amp;quot;&lt;br /&gt;
[[File:Kl 4.png|720px|thumbnail|center]]&lt;br /&gt;
* Select ram 1.00 GB&lt;br /&gt;
* Create virtual hard drieve -&amp;gt; vdi -&amp;gt; dynamic allocation -&amp;gt; 20GB&lt;br /&gt;
[[File:Kl 3.png|720px|thumbnail|center]]&lt;br /&gt;
* Now go to settings of the machine&lt;br /&gt;
* Go to &#039;&#039;&#039;storage&#039;&#039;&#039; &lt;br /&gt;
* Select empty, controller:IDE and choose iso file of kali linux&lt;br /&gt;
* Click on &#039;&#039;&#039;ok&#039;&#039;&#039;&lt;br /&gt;
[[File:Kl 2.png|720px|thumbnail|center]]&lt;br /&gt;
* Now start the machine&lt;br /&gt;
* Select &#039;&#039;&#039;install&#039;&#039;&#039; option using arrow keys and press enter&lt;br /&gt;
[[File:Kl 1.png|720px|thumbnail|center]]&lt;br /&gt;
* Now follow the instructions&lt;br /&gt;
&lt;br /&gt;
* After installation shutdown the virtual machine&lt;br /&gt;
* Go to storage and remove the iso file&lt;br /&gt;
* Now start the virtual machine&lt;br /&gt;
* Then you can see login screen to kali-linux, login with username as &amp;quot;root&amp;quot;&lt;br /&gt;
[[File:Kl 7.png|720px|thumbnail|center]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=OpenSUSE_installation_using_virtualbox&amp;diff=28</id>
		<title>OpenSUSE installation using virtualbox</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=OpenSUSE_installation_using_virtualbox&amp;diff=28"/>
		<updated>2025-08-12T13:42:33Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;&amp;lt;big&amp;gt;About openSUSE&amp;lt;/big&amp;gt;  OpenSUSE is free and Linux-based operating system. Some Features - * Multiple desktop environments. * Default OpenJDK. * Default Virtual globe. * Many image viewing and editing softwares.   &amp;lt;big&amp;gt;Creating virtual machine&amp;lt;/big&amp;gt;  1. download 32 bit (or 64 bit) iso image of opensuse from official opensuse website. Open virtual box and click on &amp;#039;new&amp;#039; at top. In the field &amp;#039;name&amp;#039; enter any name. In the type field, select Linux and in version select &amp;#039;o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;About openSUSE&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSUSE is free and Linux-based operating system.&lt;br /&gt;
Some Features -&lt;br /&gt;
* Multiple desktop environments.&lt;br /&gt;
* Default OpenJDK.&lt;br /&gt;
* Default Virtual globe.&lt;br /&gt;
* Many image viewing and editing softwares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Creating virtual machine&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. download 32 bit (or 64 bit) iso image of opensuse from official opensuse website. Open virtual box and click on &#039;new&#039; at top. In the field &#039;name&#039; enter any name. In the type field, select Linux and in version select &#039;openSUSE (32 bit)&#039; or &#039;openSUSE (64 bit)&#039;. Click next.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
2. Select RAM size. Recommended size is 512 MB. Select 1 GB since it is recommended on official website of openSUSE. It can be changed after installation.&lt;br /&gt;
&lt;br /&gt;
[[File:suse2.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
3. Click on &#039;Create a virtual hard drive now&#039;. If you have .vdi file of openSUSE downloaded from internet, select &#039;Use an existing virtual drive now&#039;. In this case, installation is not needed.&lt;br /&gt;
&lt;br /&gt;
[[File:suse3.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
4. Choose VDI (VirtualBox Disk Image) and click &#039;next&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:suse4.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
5. Choose Dynamically allocated or Fixed size and click &#039;next&#039;. Fixed size is used for fast use. Dynamic allocation is used if hard drive has less available space.&lt;br /&gt;
&lt;br /&gt;
[[File:suse5.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
6. Recommended size of hard drive for openSUSE is 8 GB. OpenSUSE requirres minimum 3GB hard disk for installation and minimum 5GB hard disk for graphical display. Additional space will be requirred to install softwares in OS. Hence, click on &#039;create&#039; with recommended size of 8 GB.&lt;br /&gt;
&lt;br /&gt;
[[File:suse6.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Installation&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. In virtual box, click on &#039;start&#039; at the top. Select a path to iso image file of openSUSE.&lt;br /&gt;
&lt;br /&gt;
[[File:suse7.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
2. Welcome screen will appear.&lt;br /&gt;
&lt;br /&gt;
[[File:suse8.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
3. Select on &#039;installation&#039; and press Enter.&lt;br /&gt;
&lt;br /&gt;
[[File:suse9.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
4. Select language as &#039;English (US)&#039; and keyboard layout as &#039;English (US)&#039;. Click on &#039;next&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:suse10.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
5. Select &#039;New Installation&#039; and click &#039;next&#039;.&lt;br /&gt;
&lt;br /&gt;
6. Select Time Zone by zooming on map and select Kolkata as Time Zone. Click &#039;next&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:suse11.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
7. OpenSUSE offers many desktop environments. Mostly KDE or Gnome is used. Select any desktop and click on &#039;next&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:suse12.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
8. Partitions can be created or edited. Or click &#039;next&#039; with suggested partitioning.&lt;br /&gt;
&lt;br /&gt;
9. Enter full name, user name and password and click &#039;next&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:suse13.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
10. Installation setting will be displayed. Select change to prevent software from installing or click &#039;install&#039; to install with default settings.&lt;br /&gt;
&lt;br /&gt;
[[File:suse14.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
11.Installation will start.&lt;br /&gt;
&lt;br /&gt;
[[File:suse15.png|400px|thumb|center]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Slackware_installation_using_VirtualBox&amp;diff=27</id>
		<title>Slackware installation using VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Slackware_installation_using_VirtualBox&amp;diff=27"/>
		<updated>2025-08-12T13:42:08Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;* Select &amp;#039;&amp;#039;&amp;#039;‘New‘&amp;#039;&amp;#039;&amp;#039; then click&amp;#039;&amp;#039;&amp;#039; ‘Next‘&amp;#039;&amp;#039;&amp;#039;. You should then be at the VM Name and OS Type screen so type in your version of Slackware, (Slackware 13.0) in the name, bring down the OS tab and click Linux then the version tab and enter Other Linux. center * It’ll set the memory at 256MB but if you have enough spare RAM double it to 512MB. center * Virtual Hard...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Select &#039;&#039;&#039;‘New‘&#039;&#039;&#039; then click&#039;&#039;&#039; ‘Next‘&#039;&#039;&#039;. You should then be at the VM Name and OS Type screen so type in your version of Slackware, (Slackware 13.0) in the name, bring down the OS tab and click Linux then the version tab and enter Other Linux.&lt;br /&gt;
[[File:Virtual box image.png|1000px|thumb|center]]&lt;br /&gt;
* It’ll set the memory at 256MB but if you have enough spare RAM double it to 512MB.&lt;br /&gt;
[[File:Virtual box image setting memory.png|1000px|thumb|center]]&lt;br /&gt;
* Virtual Hard Disk. Set this to dynamically use your current partition so you don’t have to re-partition your hard drive and lose space. Check &#039;&#039;&#039;‘Boot Hard Disk (Primary Master)‘&#039;&#039;&#039; and select &#039;&#039;&#039;‘Create new hard disk‘&#039;&#039;&#039;.&lt;br /&gt;
[[File:Virtual box image create.png|1000px|thumb|center]]&lt;br /&gt;
[[File:Virtual Machine.png|1000px|thumb|center]]&lt;br /&gt;
* Click&#039;&#039;&#039; ‘Next‘&#039;&#039;&#039; until you see&#039;&#039;&#039; Hard Disk Storage Type&#039;&#039;&#039; at the top and select &#039;&#039;&#039;‘Dynamically expanding storage‘&#039;&#039;&#039;.&lt;br /&gt;
[[File:Virtual Machine Dynamic storage.png|1000px|thumb|center]]&lt;br /&gt;
* Virtual Disk Location and Size. You can set Location and Size to whatever you want, just make sure you don’t put more size than your hard drive has total (minimum 5.00GB).&lt;br /&gt;
[[File:Virtual box image size.png|1000px|thumb|center]]&lt;br /&gt;
* Select&#039;&#039;&#039; Finish&#039;&#039;&#039;. On Summary select Finish again.&lt;br /&gt;
*  Right click on the newly created Slackware and select the Slackware ISO in &#039;&#039;&#039; &#039;Select Installation Media dialogue box &#039; &#039;&#039;&#039;.&lt;br /&gt;
[[File:Virtual box media selection.png|1000px|thumb|center]]&lt;br /&gt;
* Select&#039;&#039;&#039; OK&#039;&#039;&#039;.Select “Slackware” from the left and click “Start”.&lt;br /&gt;
[[File:Virtual box start screen.png|1000px|thumb|center]]&lt;br /&gt;
* From the text in the screenshot below, it’s asking if we want to install with extra parameters. In this case we don’t, so simply hit &amp;lt;ENTER&amp;gt; without typing anything.&lt;br /&gt;
[[File:Virtual box boot.png|1000px|thumb|center]]&lt;br /&gt;
* Now time to setup root account and partition.&lt;br /&gt;
:slackware login:&#039;&#039;&#039; root&#039;&#039;&#039;&lt;br /&gt;
:root@slackware:/#&#039;&#039;&#039;cfdisk /dev/hda &#039;&#039;&#039;&lt;br /&gt;
[[File:Virtual box command prompt.png|1000px|thumb|center]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*There are a lot of steps to be done after this during the setup that involve creating Linux swap partitions, selecting keyboard maps,etc.&lt;br /&gt;
*This video is very useful for the same &#039;&#039;&#039;https://www.youtube.com/watch?v=mwYIW8sFvxo&#039;&#039;&#039;&lt;br /&gt;
* Follow all the steps in the video which shows the setup process from the start in VirtualBox.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Once install is complete, turn off the Virtual machine, click&#039;&#039;&#039; Machine -&amp;gt; Close… -&amp;gt; Power off the virtual machine&#039;&#039;&#039; from VirtualBox’s top menu bar.&lt;br /&gt;
[[File:Virtual box power off screen.png|1000px|thumb|center]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Solaris_11.1_installation_using_VirtualBox&amp;diff=26</id>
		<title>Solaris 11.1 installation using VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Solaris_11.1_installation_using_VirtualBox&amp;diff=26"/>
		<updated>2025-08-12T13:41:54Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;This page explains how to install Oracle Solaris 11.1 (text based) on VirtualBox.&amp;lt;br /&amp;gt; == Create Solaris 11 Virtual Machine == # Download the Solaris 11.1 iso file. # Open Oracle VirtualBox and click on &amp;#039;&amp;#039;&amp;#039;New&amp;#039;&amp;#039;&amp;#039;.&amp;lt;br /&amp;gt; # Enter the name of your VM. Depending on the name, VirtualBox may autocomplete the Type and Version for you but make sure the Type is Solaris and the Version is Oracle Solaris 10 10/09 and later (64 bit). # Select the RAM size in MB. Usually, the recomm...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to install Oracle Solaris 11.1 (text based) on VirtualBox.&amp;lt;br /&amp;gt;&lt;br /&gt;
== Create Solaris 11 Virtual Machine ==&lt;br /&gt;
# Download the Solaris 11.1 iso file.&lt;br /&gt;
# Open Oracle VirtualBox and click on &#039;&#039;&#039;New&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
# Enter the name of your VM. Depending on the name, VirtualBox may autocomplete the Type and Version for you but make sure the Type is Solaris and the Version is Oracle Solaris 10 10/09 and later (64 bit).&lt;br /&gt;
# Select the RAM size in MB. Usually, the recommended size is enough. It can be changed later, but it should not be so small that the OS can&#039;t be booted. &lt;br /&gt;
# To add a hard drive, select the default option &#039;&#039;&#039;Create a virtual hard drive&#039;&#039;&#039; unless you have an existing hard drive file you want to use. Select the size according to your requirements.&lt;br /&gt;
# Choose &#039;&#039;&#039;VDI (VirtualBox Disk Image)&#039;&#039;&#039; as your hard drive file type. If you are also using VMware Workstation, then you can save it as a VMDK file. &lt;br /&gt;
# Select &#039;&#039;&#039;Dynamically Allocated&#039;&#039;&#039; for the storage on physical hard drive. This ensures that the space will keep filling up during the installation up to a maximum fixed size. Fixed size directly allocates the amount of space specified.&lt;br /&gt;
# Create the VM.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
== Adding iso file ==&lt;br /&gt;
# Go to &#039;&#039;&#039;Settings&#039;&#039;&#039; and select &#039;&#039;&#039;System&#039;&#039;&#039; from the menu on the left. In the &#039;&#039;&#039;Motherboard&#039;&#039;&#039; tab, make sure CD/DVD and Hard Disk are checked and the boot order shows CD/DVD booting before the Hard Disk.&lt;br /&gt;
# To load the iso file, go to &#039;&#039;&#039;Storage&#039;&#039;&#039;, select &#039;&#039;&#039;Empty&#039;&#039;&#039; and click on the CD/DVD icon on the right. Choose the iso file for Solaris.&lt;br /&gt;
# Review other settings before proceeding.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
== Installing Solaris ==&lt;br /&gt;
# Start the Solaris 11 VM.&lt;br /&gt;
# Select keyboard layout and language. &lt;br /&gt;
# Enter 1 to install Oracle Solaris in the installation menu. This gives a screen showing the control keys required.&lt;br /&gt;
# Select &#039;&#039;&#039;Local Disks&#039;&#039;&#039;. It will give you a summary of the hard disk you have selected and will recommend a partitioning arrangement. &lt;br /&gt;
# If you want to change the size of partitions, add or remove partitions, select the second option. Otherwise, use the entire disk.&lt;br /&gt;
# For network configurations, enter a name and a configuration method. Select &#039;&#039;&#039;Automatically&#039;&#039;&#039; to allow automatic set up. You will have to enter the IP Address and other information if you select &#039;&#039;&#039;Manually&#039;&#039;&#039;.  &lt;br /&gt;
# Select your region, location and time zone. &lt;br /&gt;
# Enter root password and create a user account. All passwords must include at least one numeric or special character.&lt;br /&gt;
# Provide your email and password if you wish to receive updates via Oracle Support. &lt;br /&gt;
# Select a network configuration. Confirm the details of your installation. &lt;br /&gt;
# The installation will start. At around 99%, the installation may take further 15-20 minutes.&lt;br /&gt;
# To complete the installation, you will have to reboot the VM. Make sure you remove the iso file before rebooting, otherwise it will proceed to the installation instead of booting the hard drive directly.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
== Using Solaris ==&lt;br /&gt;
Login with your username and password to start using Solaris.&lt;br /&gt;
You may face the following issues:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
If &#039;sendmail&#039; has not been configured properly, it might give the error &#039;unable to qualify my own domain name - using short name&#039;. To disable sendmail, run the command &lt;br /&gt;
&lt;br /&gt;
 svcadm disable sendmail&lt;br /&gt;
&lt;br /&gt;
You might need to be a privileged user to install certain packages. To login as root, run the command &lt;br /&gt;
&lt;br /&gt;
 su - root&lt;br /&gt;
&lt;br /&gt;
Enter your root password.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing a GUI ==&lt;br /&gt;
The version of Solaris 11 that is being used here is a text based version. This means that all you will see is a command prompt. A Graphical User Interface (GUI) can be separately installed. To upgrade to a Graphical Environment from a text environment we make use of the Solaris Boot Environments. A boot environment is nothing but a bootable instance of a Solaris OS image along with any other application software packages that have been installed into that image. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
1. When the command prompt opens you will see &#039;solaris11 console login:&#039; (solaris11 is my host name). Enter your username and press Enter. Then you will see &#039;password:&#039;. Type in your password and press Enter. Now you have successfully logged in.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2. Once you log in, run the command and enter your password and you will now be logged onto root and will have superuser privileges.&lt;br /&gt;
&lt;br /&gt;
 su&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. To see the boot environment that we start off with by default, run the following command.  As we are logged onto &#039;root&#039; we do not need to use &#039;sudo&#039; before the command. The output will show the list of boot environments along with some information about them. By default the only boot environment is &#039;solaris&#039; and in the active column you see &#039;NR&#039;, this indicates that it is active now (N) and that it will be active on the next reboot (R)&lt;br /&gt;
&lt;br /&gt;
  beadm list&lt;br /&gt;
&lt;br /&gt;
 BE         Active   Mountpoint   Space   Policy   Created&lt;br /&gt;
 Solaris    NR       /            2.27G  Static   2015-01-15  20:18&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Now we create a boot environment for our GUI by running the following command. GUI is the name given to our newly created boot environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  beadm create GUI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. You can see that GUI has been created by running the following command. You will see that GUI has nothing in the &#039;Active&#039; column. This is because solaris is still active.&lt;br /&gt;
&lt;br /&gt;
 beadm list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Now we have to mount our graphical boot environment into the /mnt folder. &lt;br /&gt;
&lt;br /&gt;
  beadm mount GUI /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Now to install the GUI.&lt;br /&gt;
  &lt;br /&gt;
 bootadm /mnt install babel_install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Once this is done if you see the list of boot environments, you will see the Mountpoint for GUI as &#039;/mnt&#039; and there will be a considerable increase in its &#039;Space&#039;.  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9. Now we must update the boot archive, &lt;br /&gt;
&lt;br /&gt;
 bootadm update-archive -R /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. The next step is to unmount the boot environment, &lt;br /&gt;
&lt;br /&gt;
  beadm umount GUI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11. After this we must activate the GUI boot environment,&lt;br /&gt;
&lt;br /&gt;
  beadm activate GUI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12. If you now run beadm list, you will see an &#039;R&#039; in the &#039;Active&#039; column for GUI indicating that it will become active on the next reboot. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
13. To check that GUI is marked as the default entry in the grub loader run the following command. You will see a &#039;1&#039; to the left of GUI indicating that it is the default option. &lt;br /&gt;
&lt;br /&gt;
  bootadm list-menu &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14. To enter into the GUI we must reboot the system. To do so, run the following command (-g is for adding grace time, in this case 10 seconds. -i is to indicate the run level, it is set to 6 for reboot)&lt;br /&gt;
&lt;br /&gt;
  shutdown -g 10 -i 6 &lt;br /&gt;
&lt;br /&gt;
15. Now you will see a log in screen appear as you have successfully entered the GUI environment.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=BackBox_OS_Setup_using_Virtual_Box&amp;diff=25</id>
		<title>BackBox OS Setup using Virtual Box</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=BackBox_OS_Setup_using_Virtual_Box&amp;diff=25"/>
		<updated>2025-08-12T13:41:40Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==BackBox OS== BackBox is an Ubuntu based Linux distribution. It was designed with the intent of doing network and informatic system analysis. It comes with a complete set of tools for ethical hacking and security testing. For more information visit [http://www.backbox.org/ www.backbox.org]. &amp;lt;br&amp;gt; ==Getting the Virtual Box== To run the virtual machine, you’ll first need to download and install VirtualBox. Use the following command on your shell -        sudo apt-get ins...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==BackBox OS==&lt;br /&gt;
BackBox is an Ubuntu based Linux distribution. It was designed with the intent of doing network and informatic system analysis. It comes with a complete set of tools for ethical hacking and security testing. For more information visit [http://www.backbox.org/ www.backbox.org].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Getting the Virtual Box==&lt;br /&gt;
To run the virtual machine, you’ll first need to download and install VirtualBox.&lt;br /&gt;
Use the following command on your shell - &lt;br /&gt;
&lt;br /&gt;
     sudo apt-get install virtualbox&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or you can download it from this link -&lt;br /&gt;
https://www.virtualbox.org/wiki/Linux_Downloads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
You will need a BackBox ISO file. The latest stable version is 4.0. It can be found at http://www.backbox.org/downloads.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Setting up BackBox OS on Virtual Box==&lt;br /&gt;
&lt;br /&gt;
1. Open VirtualBox and click the New button to create a new virtual machine. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2. In the &#039;Name&#039; field enter the name of your OS. Eg. &#039;BackBox&#039;. In the &#039;Type&#039; field select Linux. In the &#039;Version&#039; field select Ubuntu. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3. Increase the RAM to 1024kB for optimal performance. Don&#039;t increase it beyond the green portion. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
4. You will now see a page titled &#039;Hard Drive&#039;. Click on the option that reads &#039;Create a virtual hard drive now&#039;. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
5. You will now see a list of hard drive types. Select &#039;VDI (Virtual Disk Image)&#039;. Click &#039;Next&#039;. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
6. &#039;Storage on Physical Hard Drive&#039; is the page you will now see. Select &#039;Dynamically Allocated&#039;. Click &#039;Next&#039;. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
7. Select the file location and size by entering the appropriate path name and disk size of your choice. Ideally around 20GB should suffice. Click on &#039;Create&#039;. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
8. Go to &#039;Settings&#039; for your BackBox OS. Go to &#039;Storage&#039;. Under &#039;Controller IDE&#039;, click on &#039;Empty&#039;. There will be an &#039;Attributes&#039; field on the right hand side of the window. Click on the disk shaped icon and in the drop down menu select the option that reads &#039;Choose a virtual CD/DVD disk file...&#039; A file explorer will open, select the path to the BackBox ISO. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
9. Click on &#039;Ok&#039; and then start the BackBox OS. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
10. Once you start the OS, you will be taken through the setup step by step.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Chrome_OS_Setup_using_Virtual_Box&amp;diff=24</id>
		<title>Chrome OS Setup using Virtual Box</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Chrome_OS_Setup_using_Virtual_Box&amp;diff=24"/>
		<updated>2025-08-12T13:41:28Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==Chrome OS== Chrome OS is an operating system based on the Linux kernel and designed by Google to work with web applications and installed applications. &amp;lt;br&amp;gt; ==Getting the Virtual Box== To run the virtual machine, you’ll first need to download and install VirtualBox. Use the following command on your shell -        sudo apt-get install virtualbox  &amp;lt;br&amp;gt;  ==Getting the Chrome ISO==  The ISO can be obtained from the following link &amp;lt;br/&amp;gt; [http://foss.coep.org.in/vdisks/is...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Chrome OS==&lt;br /&gt;
Chrome OS is an operating system based on the Linux kernel and designed by Google to work with web applications and installed applications.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Getting the Virtual Box==&lt;br /&gt;
To run the virtual machine, you’ll first need to download and install VirtualBox.&lt;br /&gt;
Use the following command on your shell - &lt;br /&gt;
&lt;br /&gt;
     sudo apt-get install virtualbox&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Getting the Chrome ISO==&lt;br /&gt;
&lt;br /&gt;
The ISO can be obtained from the following link&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://foss.coep.org.in/vdisks/iso/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installing Chrome OS on Virtual Box==&lt;br /&gt;
&lt;br /&gt;
1. Open VirtualBox and click the New button to create a new virtual machine. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2.There’s no Chrome OS option in VirtualBox, therefore choose Linux &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3. Increase RAM to 1024kB for optimal performance &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
4. In Virtual HardDisk Create New Hard Disk with VDI file type. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
5. In Storage Details choose Dynamically allocated &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
6.Choose an appropriate location in the next step to save your virtual hard disk of any size (&#039;&#039;&#039;Optimally 3GB&#039;&#039;&#039;). If less it will FAIL &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
7. Click Create &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
8. Power On the Chrome OS you just created by double clicking on it (remember to disable network before starting) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
9.You&#039;ll find 4 options &lt;br /&gt;
*Chrome Os &amp;lt;br&amp;gt;&lt;br /&gt;
*Failsafe -- Chrome OS&lt;br /&gt;
*Boot From HardDisk&lt;br /&gt;
*Memory Test&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Choose Chrome OS. The Chrome OS will now boot. It has no install operation as such&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Choose a default search and double click Live Installer on the Desktop. (password is &amp;quot;root&amp;quot;)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
11.Let the default settings remain , accept the licence agreement and click next &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
12. Select the Region as Asia and the TimeZone as Kolkata. Click Next. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
13. Keep the default settings on the next page with &amp;quot;partition based&amp;quot; radio button selected. Click Next&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
14. Create a new username and password of your choice. (atleast 2 characters) Click Next. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
15. Click Install. You&#039;re Chrome OS will now install.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
16. After Installation Click reboot now. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
17. Now Select Boot From Hard Disk to go to the Configuration Screen&lt;br /&gt;
18. Wait for Installation &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Your Chrome OS has been installed&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Android_Setup_using_Virtual_Box&amp;diff=23</id>
		<title>Android Setup using Virtual Box</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Android_Setup_using_Virtual_Box&amp;diff=23"/>
		<updated>2025-08-12T13:41:14Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;== Download Virtual Box== Open the terminal and type virtualbox. The application will open if Virtualbox is already installed on your pc. If not then click on the link to install virtual box. https://www.virtualbox.org/wiki/Downloads &amp;lt;br&amp;gt; Choose the correct version for your computer. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;  ==What is Android?== Android is a mobile operating system (OS) based on the Linux kernel and currently developed by Google. With a user interface based on direct manipulation, And...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Virtual Box==&lt;br /&gt;
Open the terminal and type virtualbox. The application will open if Virtualbox is already installed on your pc. If not then click on the link to install virtual box.&lt;br /&gt;
https://www.virtualbox.org/wiki/Downloads &amp;lt;br&amp;gt;&lt;br /&gt;
Choose the correct version for your computer. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What is Android?==&lt;br /&gt;
Android is a mobile operating system (OS) based on the Linux kernel and currently developed by Google. With a user interface based on direct manipulation, Android is designed primarily for touchscreen mobile devices such as smartphones and tablet computers, with specialized user interfaces for televisions (Android TV), cars (Android Auto), and wrist watches (Android Wear). &amp;lt;br&amp;gt;&lt;br /&gt;
Android is popular with technology companies which require a ready-made, low-cost and customizable operating system for high-tech devices.[25]Android&#039;s &#039;&#039;open nature&#039;&#039; has encouraged a large community of developers and enthusiasts to use the open-source code as a foundation for community-driven projects, which add new features for advanced users[26] or bring Android to devices which were officially released running other operating systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to Install Android on Virtual Box?==&lt;br /&gt;
*Once you have virtual box on your pc, type virtualbox on the terminal.A window will appear. &amp;lt;br&amp;gt; This window is called the &#039;&#039;&#039;Virtual Box Manager&#039;&#039;&#039;. On the left, you will see a pane that is currently empty but will later list out all your virtual machines.&lt;br /&gt;
*Click on the link to download the ISO file for android : http://foss.coep.org.in/vdisks/iso/ Select &#039;&#039;&#039;android.iso&#039;&#039;&#039; and save it on your computer.&lt;br /&gt;
*Open the Virtual Box Manager and click on &#039;&#039;&#039;Machine&#039;&#039;&#039; and then &#039;&#039;&#039;New&#039;&#039;&#039; found the left side of the title bar.&lt;br /&gt;
*A Window named &#039;&#039;&#039;Create New Virtual Machine&#039;&#039;&#039; will appear. Click on &#039;&#039;&#039;Next&#039;&#039;&#039;.&lt;br /&gt;
*Give your OS a name by filling in the Name space such as &#039;&#039;&#039;android(name)&#039;&#039;&#039;.&lt;br /&gt;
*Select the Operating System as &#039;&#039;&#039;Linux&#039;&#039;&#039; and Version as &#039;&#039;&#039;Linux 2.6&#039;&#039;&#039;.&lt;br /&gt;
[[File:A_Kitkat1.png|400px|thumb|center]]&lt;br /&gt;
*Select the Memory space as &#039;&#039;&#039;1500 MB&#039;&#039;&#039;. Click on Next.&lt;br /&gt;
[[File:A_Kitkat2.png|400px|thumb|center]]&lt;br /&gt;
*Choose &#039;&#039;&#039;Create New hard disk&#039;&#039;&#039;. Click on next.&lt;br /&gt;
[[File:A_Kitkat3.png|400px|thumb|center]]&lt;br /&gt;
*Choose File type as &#039;&#039;&#039;VDI&#039;&#039;&#039; and click on next.&lt;br /&gt;
[[File:A_Kitkat4.png|400px|thumb|center]]&lt;br /&gt;
*You can choose storage details as either dynamic or fixed. Select one of them and click on next.&lt;br /&gt;
[[File:A_Kitkat5.png|400px|thumb|center]]&lt;br /&gt;
*Change the location and the size of the hard disk to atleast 8GB and click on next.&lt;br /&gt;
[[File:A_Kitkat6.png|400px|thumb|center]]&lt;br /&gt;
*Click on &#039;&#039;&#039;Create&#039;&#039;&#039;. &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:A_Kitkat8.png|400px|thumb|center]]&lt;br /&gt;
Once the virtual machine is created you can view it on the Virtual Box Manager. It will currently say &#039;&#039;Powered Off&#039;&#039;. Double Click on the Machine Name and the &#039;&#039;&#039;First Run Wizard&#039;&#039;&#039; will open. &amp;lt;br&amp;gt; Follow the steps to complete the installation.&lt;br /&gt;
*Click &#039;&#039;&#039;next&#039;&#039;&#039;.&lt;br /&gt;
*By clicking on the folder picture, select the ISO file that you had previously downloaded and click next.&lt;br /&gt;
*Click &#039;&#039;&#039;Start&#039;&#039;&#039;. &amp;lt;br&amp;gt;&lt;br /&gt;
A window will open. &lt;br /&gt;
*Using the down arrow key select the &#039;&#039;&#039;installation&#039;&#039;&#039; option and press &#039;&#039;&#039;enter&#039;&#039;&#039;.&lt;br /&gt;
[[File:A_Kitkat59.png|400px|thumb|center]]&lt;br /&gt;
*To make a partition, Choose &#039;&#039;&#039;create/modify partition&#039;&#039;&#039; option and press &#039;&#039;&#039;ok&#039;&#039;&#039;.&lt;br /&gt;
[[File:A_Kitkat60.png|400px|thumb|center]]&lt;br /&gt;
*Use the left/right arrow keys to select &#039;&#039;&#039;New&#039;&#039;&#039;. Press Enter.&lt;br /&gt;
[[File:A_Kitkat61.png|400px|thumb|center]]&lt;br /&gt;
*Select &#039;&#039;&#039;Primary&#039;&#039;&#039; and press Enter.&lt;br /&gt;
*Press Enter.&lt;br /&gt;
[[File:A_Kitkat62.png|400px|thumb|center]]&lt;br /&gt;
*Use the left/right arrow keys to select &#039;&#039;&#039;Write&#039;&#039;&#039;. Press Enter.&lt;br /&gt;
[[File:A_Kitkat67.png|400px|thumb|center]]&lt;br /&gt;
*Use keyboard to type &#039;&#039;&#039;yes&#039;&#039;&#039; and press enter.&lt;br /&gt;
[[File:A_Kitkat68.png|400px|thumb|center]]&lt;br /&gt;
*Select &#039;&#039;&#039;quit&#039;&#039;&#039; and press enter.&lt;br /&gt;
*Select &#039;&#039;&#039;sda1&#039;&#039;&#039; and press enter.&lt;br /&gt;
[[File:A_Kitkat71.png|400px|thumb|center]]&lt;br /&gt;
*Use down arrow key to select &#039;&#039;&#039;ext3&#039;&#039;&#039; and press enter.&lt;br /&gt;
[[File:A_Kitkat72.png|400px|thumb|center]]&lt;br /&gt;
*Select &#039;&#039;&#039;yes&#039;&#039;&#039; and press enter.&lt;br /&gt;
[[File:A_Kitkat73.png|400px|thumb|center]]&lt;br /&gt;
*Select &#039;&#039;&#039;yes&#039;&#039;&#039; to install GRUB.&lt;br /&gt;
[[File:A_Kitkat75.png|400px|thumb|center]]&lt;br /&gt;
*Select &#039;&#039;&#039;yes&#039;&#039;&#039; to read/write. &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:A_Kitkat76.png|400px|thumb|center]]&lt;br /&gt;
The installation will take place. &amp;lt;br&amp;gt;&lt;br /&gt;
Now, Select &#039;&#039;&#039;Run-Android&#039;&#039;&#039; and press enter. &amp;lt;br&amp;gt;&lt;br /&gt;
The installation is now complete.&lt;br /&gt;
Before rebooting the android again go to the setting/storage remove the iso of android from CD drive.&lt;br /&gt;
[[File:A_Kitkat80.png|400px|thumb|center]]&lt;br /&gt;
*Select Language and wait for a while.&amp;lt;br&amp;gt;&lt;br /&gt;
*Select Wi-Fi &#039;&#039;&#039;Skip&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Skip Anyway&#039;&#039;&#039; &lt;br /&gt;
[[File:A_Kitkat84.png|400px|thumb|center]]&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; if you found Connecting for long time then GO to Machine-&amp;gt; setting -&amp;gt; network -&amp;gt; under Advanced uncheck cable connected. -&amp;gt; OK.(try again skip Wi-Fi)&lt;br /&gt;
*Select Location&lt;br /&gt;
[[File:A_Kitkat85.png|400px|thumb|center]]&lt;br /&gt;
*Next&lt;br /&gt;
[[File:A_Kitkat86.png|400px|thumb|center]]&lt;br /&gt;
*Next&lt;br /&gt;
[[File:A_Kitkat87.png|400px|thumb|center]]&lt;br /&gt;
*OK&lt;br /&gt;
[[File:A_Kitkat89.png|400px|thumb|center]]&lt;br /&gt;
*OK&lt;br /&gt;
[[File:A_Kitkat90.png|400px|thumb|center]]&lt;br /&gt;
*Here is your Andorid Kitkat&lt;br /&gt;
[[File:A_Kitkat91.png|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
==How to enable the mouse? ==&lt;br /&gt;
At the bottom side of the home page,left to the home key,there is a option of mouse integration..we can enable or disable the mouse by that option.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Must_Visit_Websites&amp;diff=22</id>
		<title>Must Visit Websites</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Must_Visit_Websites&amp;diff=22"/>
		<updated>2025-08-12T13:33:26Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;*[http://www.debian.org http://www.debian.org] *[http://www.debian.org/devel/wnpp/ http://www.debian.org/devel/wnpp/] *[http://www.bugzilla.org http://www.bugzilla.org] *[http://www.bugzilla.mozilla.org http://www.bugzilla.mozilla.org] *[http://www.gnu.org http://www.gnu.org] *[http://www.gnu.org/software/libc http://www.gnu.org/software/libc] *[http://www.videolan.org http://www.videolan.org] *[http://www.ubuntu.com http://www.ubuntu.com] *[http://www.releases.ubuntu.co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://www.debian.org http://www.debian.org]&lt;br /&gt;
*[http://www.debian.org/devel/wnpp/ http://www.debian.org/devel/wnpp/]&lt;br /&gt;
*[http://www.bugzilla.org http://www.bugzilla.org]&lt;br /&gt;
*[http://www.bugzilla.mozilla.org http://www.bugzilla.mozilla.org]&lt;br /&gt;
*[http://www.gnu.org http://www.gnu.org]&lt;br /&gt;
*[http://www.gnu.org/software/libc http://www.gnu.org/software/libc]&lt;br /&gt;
*[http://www.videolan.org http://www.videolan.org]&lt;br /&gt;
*[http://www.ubuntu.com http://www.ubuntu.com]&lt;br /&gt;
*[http://www.releases.ubuntu.com http://www.releases.ubuntu.com]&lt;br /&gt;
*[http://developer.ubuntu.com http://developer.ubuntu.com]&lt;br /&gt;
*[http://www.launchpad.net http://www.launchpad.net]&lt;br /&gt;
*[http://www.launchpad.net/builders http://www.launchpad.net/builders]&lt;br /&gt;
*[http://www.kernel.org http://www.kernel.org]&lt;br /&gt;
*[http://www.github.com http://www.github.com]&lt;br /&gt;
*[http://www.sourceforge.net http://www.sourceforge.net]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=FOSS_Workshop_(December_2014)&amp;diff=21</id>
		<title>FOSS Workshop (December 2014)</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=FOSS_Workshop_(December_2014)&amp;diff=21"/>
		<updated>2025-08-12T13:33:14Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;* Introduction * Agenda * Must Visit Websites * [http://foss.coep.org.in/coepwiki/index.php/Softwares Open Source Packages] * Presentations by Students * Packages selected for work by students&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Introduction]]&lt;br /&gt;
* [[Agenda]]&lt;br /&gt;
* [[Must Visit Websites]]&lt;br /&gt;
* [http://foss.coep.org.in/coepwiki/index.php/Softwares Open Source Packages]&lt;br /&gt;
* [[Presentations by Students]]&lt;br /&gt;
* [[Packages selected for work by students]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Main_Page&amp;diff=20</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Main_Page&amp;diff=20"/>
		<updated>2025-08-12T13:32:24Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Departments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:CoEP_Main_Hall_1.jpg|thumb|right|300px|The Main Hall of College of Engineering, Pune]]&lt;br /&gt;
Welcome to &amp;lt;b&amp;gt;COEP Wiki&amp;lt;/b&amp;gt;. You can use your LDAP authentication (the one used for Internet proxy and Moodle) for logging in to the COEP Wiki. &lt;br /&gt;
&lt;br /&gt;
A Wiki is a web site developed collaboratively by a community of users, allowing any user to add and edit content.You can read more about wiki [http://www.mediawiki.org/wiki/How_does_MediaWiki_work%3F here] This Wiki is set up to help carry out assignments for students of [http://www.coep.org.in College of Engineering Pune ].&lt;br /&gt;
&lt;br /&gt;
You can create pages, discuss assignments on these pages, upload images(currently only is specific formats), etc. the way you want. However using the portals and course pages given below is suggested. &lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
You can read the wiki pages without login. For creating or editing the pages you need to login into wiki. You can login with your Moodle user name and passsword (or one which you use for Internet proxy). &amp;lt;br /&amp;gt;&lt;br /&gt;
Only members of College of Engineering, Pune can login into this wiki. If you are not a member then you can still read all the pages but cannot edit them.&lt;br /&gt;
&lt;br /&gt;
After login first time you are suggested to create user page and talk page so that there will be a communication between users of wiki.&lt;br /&gt;
&lt;br /&gt;
= Courses = &lt;br /&gt;
* [[Introduction to Inquiry, Thinking and Research]]&lt;br /&gt;
* [[Data Structures (Odd Semester 2014)]]&lt;br /&gt;
* [[Operating Systems]] (Even Semester 2012)&lt;br /&gt;
* [[FOSS Workshop (December 2014)]]&lt;br /&gt;
* [[Operating Systems 2015]]&lt;br /&gt;
* [[Introduction to Inquiry, Thinking and Research Sem IV 2015 ]]&lt;br /&gt;
* [[Open Technologies Workshop Oct 2015]]&lt;br /&gt;
* [[FOSS Development 2016]]&lt;br /&gt;
* [[Debian Packaging workshop 2nd Jan to 8th Jan 2017]]&lt;br /&gt;
* [[FOSS Development 2017]]&lt;br /&gt;
* [[Computer Networks 2020]]&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Tutorials and FAQs = &lt;br /&gt;
Various [[Tutorials]] created by COEP Students.&lt;br /&gt;
* [[COEP Moodle FAQ]]&lt;br /&gt;
* [[COEP IT Handbook]]&lt;br /&gt;
* [[Important FOSS resources]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Important_FOSS_resources&amp;diff=19</id>
		<title>Important FOSS resources</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Important_FOSS_resources&amp;diff=19"/>
		<updated>2025-08-12T13:31:44Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;Here is a list of some important resources related to the world of Free Software.   = Free Software Philosophy =  * [http://moglen.law.columbia.edu/ Everything by Eben Moglen]  == Articles == * [https://www.gnu.org/philosophy/free-sw.html What is Free Software on gnu.org] * [http://en.wikiquote.org/wiki/Eben_Moglen Quotes by Eben Moglen]  == Videos &amp;amp; Audio Resources == * [https://www.youtube.com/watch?v=Ag1AKIl_2GM Youtube: Free software, free society: Richard Stallman a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a list of some important resources related to the world of Free Software. &lt;br /&gt;
&lt;br /&gt;
= Free Software Philosophy = &lt;br /&gt;
* [http://moglen.law.columbia.edu/ Everything by Eben Moglen]&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
* [https://www.gnu.org/philosophy/free-sw.html What is Free Software on gnu.org]&lt;br /&gt;
* [http://en.wikiquote.org/wiki/Eben_Moglen Quotes by Eben Moglen]&lt;br /&gt;
&lt;br /&gt;
== Videos &amp;amp; Audio Resources ==&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ag1AKIl_2GM Youtube: Free software, free society: Richard Stallman at TEDxGeneva 2014 ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Licenses ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses Comparison of Open Source Licenses]&lt;br /&gt;
* [http://choosealicense.com/licenses/ Choose a License]&lt;br /&gt;
* [ https://www.gnu.org/licenses/quick-guide-gplv3.html Quick Guide to GPL3]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Creative_Commons_license Creative Commons License]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Apache_License Apache License on Wikipedia]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/MIT_License  MIT License]&lt;br /&gt;
&lt;br /&gt;
== License Texts ==&lt;br /&gt;
* [http://www.gnu.org/copyleft/gpl.html GNU GPL]&lt;br /&gt;
* [http://www.gnu.org/licenses/ GNU Licenses: GPL, LGPL, AGPL, etc. ]&lt;br /&gt;
* [http://www.apache.org/licenses/LICENSE-2.0 Apache License Text]&lt;br /&gt;
* [http://opensource.org/licenses/MIThttp://opensource.org/licenses/MIT MIT License]&lt;br /&gt;
* [http://creativecommons.org/licenses/ Creative Common Licenses]&lt;br /&gt;
&lt;br /&gt;
== Other resources ==&lt;br /&gt;
&lt;br /&gt;
= Command line environment = &lt;br /&gt;
== Beginners ==&lt;br /&gt;
* [http://www.cs.unb.ca/~aubanel/cs2023/unix.pdf Basics of the Unix System ] [http://web.archive.org/web/20160513164903/http://www.cs.unb.ca/~aubanel/cs2023/unix.pdf Alternate link]&lt;br /&gt;
* [http://linuxcommand.org Basics of Linux Commands, Files, Directory structure ]&lt;br /&gt;
&lt;br /&gt;
== Shell programming ==&lt;br /&gt;
* [http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html Bash Tutorial on The Linux Documentation Project TDLP]&lt;br /&gt;
&lt;br /&gt;
= Linux System Administration = &lt;br /&gt;
* [http://www.tldp.org/LDP/sag/html/index.html Linux system Administration Guide on TDLP ]&lt;br /&gt;
* [http://web.archive.org/web/20160513164955/http://www.tldp.org/LDP/sag/html/index.html Alternative link to LSAG on TDLP]&lt;br /&gt;
* [http://linux-training.be/files/books/LinuxAdm.pdf Linux System Administration by Paul Cobbaut(PDF) ]&lt;br /&gt;
&lt;br /&gt;
== Network Administration == &lt;br /&gt;
* [http://www.tldp.org/LDP/nag2/nag2.pdf Linux Network Administrator&#039;s Guide (PDF) on TDLP ]  [http://web.archive.org/web/20160513165003/http://www.tldp.org/LDP/nag2/nag2.pdf Alternative link ]&lt;br /&gt;
* [http://www.oreilly.com/openbook/linag2/book/ Linux Network Administrator&#039;s Guide by O&#039;Reilly]  [http://web.archive.org/web/20160513171130/http://www.oreilly.com/openbook/linag2/book/ Alternative link]&lt;br /&gt;
&lt;br /&gt;
== Apache Web Server Administration ==&lt;br /&gt;
&lt;br /&gt;
== Mysql Database Server Administration ==&lt;br /&gt;
== LDAP Administration == &lt;br /&gt;
* [http://archive.oreilly.com/pub/a/perl/excerpts/system-admin-with-perl/ten-minute-ldap-utorial.html 10 Minute LDAP tutorial]&lt;br /&gt;
* [https://help.ubuntu.com/lts/serverguide/openldap-server.html Ubuntu Open LDAP Guide ]&lt;br /&gt;
* [http://courses.cs.vt.edu/cs5204/fall05-kafura/Papers/Naming/PagesFromUnderstandingLDAP.pdf Understanding LDAP (PDF) ]&lt;br /&gt;
&lt;br /&gt;
== NFS Administration == &lt;br /&gt;
*[https://help.ubuntu.com/lts/serverguide/network-file-system.html ubuntu NFS Server Guide ]&lt;br /&gt;
*[https://help.ubuntu.com/community/NFSv4Howto Ubuntu NFS V4 HOWTO ]&lt;br /&gt;
*[https://help.ubuntu.com/community/SettingUpNFSHowTo Ubuntu NFS HOWTO]&lt;br /&gt;
&lt;br /&gt;
= Editors (vi, emacs, etc) =&lt;br /&gt;
* [http://heather.cs.ucdavis.edu/~matloff/UnixAndC/Editors/ViIntro.html Extremely Simple &amp;amp; Short VI Tutorial]&lt;br /&gt;
* [http://www.gnu.org/software/emacs/tour/ GNU Emacs Tour &amp;amp; Tutorial]&lt;br /&gt;
* [http://www.jesshamrick.com/2012/09/10/absolute-beginners-guide-to-emacs/ Absolute Beginners Guide to Emacs]&lt;br /&gt;
&lt;br /&gt;
= Free Software Development = &lt;br /&gt;
== Make ==&lt;br /&gt;
* [http://www.tutorialspoint.com/makefile/ Some Basics of Linking, etc &amp;amp; Makefile]&lt;br /&gt;
&lt;br /&gt;
* [http://mrbook.org/tutorials/make/ Simple Tutorial on Make]&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/software/make/manual/make.pdf GNU Make Manual]&lt;br /&gt;
&lt;br /&gt;
== Writing portable programs ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cs.princeton.edu/courses/archive/spr06/cos217/lectures/24portable.pdf Writing Portable C programs, Lecture from Princeton]&lt;br /&gt;
* [https://www.sourceware.org/autobook/autobook/autobook_110.html Writing Portable C programs with GNU Autotools]&lt;br /&gt;
* [https://www.lrde.epita.fr/~adl/dl/autotools-handout-4.pdf Pages in Using GNU Autotools by Alexandre Duret-Lutz : PDF]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Autotools ==&lt;br /&gt;
* [http://cs.anu.edu.au/~./Danny.Robson/autotools.pdf A short Introduction to Autoools by Danny Robson: PDF]&amp;lt;br /&amp;gt;&lt;br /&gt;
* [https://www.lrde.epita.fr/~adl/dl/autotools-handout-4.pdf Using GNU Autotools by Alexandre Duret-Lutz : PDF]&amp;lt;br /&amp;gt;&lt;br /&gt;
* [http://www.gnu.org/software/automake/manual/html_node/index.html GNU Automake Manual on gnu.org]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Coding Standards == &lt;br /&gt;
* [http://www.gnu.org/prep/standards/ GNU Coding Standards]&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
* [https://git-scm.com/book/en/v2 Pro Git Book]&lt;br /&gt;
* [https://vimeo.com/14629850 Video: Getting Git by Scott Chacon]&lt;br /&gt;
* [https://try.github.io/levels/1/challenges/1 Git in 15 Minutes]&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/ Become a Git guru]&lt;br /&gt;
&lt;br /&gt;
== Join Debian Development ==&lt;br /&gt;
* [https://www.debian.org/devel/join/ How you can Join Debian]&lt;br /&gt;
* [https://www.debian.org/devel/wnpp/ WNPP: Work Needed and Prospective Packages]&lt;br /&gt;
* [https://www.debian.org/Bugs/ Debian Bugs]&lt;br /&gt;
* [https://www.debian.org/devel/ Debian Developer&#039;s Corner]&lt;br /&gt;
* [https://wiki.debian.org/HowToPackageForDebian How to Package a .deb file]&lt;br /&gt;
&lt;br /&gt;
= Programming Technologies =&lt;br /&gt;
= Understanding the computer system =&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Booting UEFI (Unified Extended Firmware Interface) ]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GUID_Partition_Table GPT (GUID Partition Table) ]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=COEP_IT_Handbook&amp;diff=18</id>
		<title>COEP IT Handbook</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=COEP_IT_Handbook&amp;diff=18"/>
		<updated>2025-08-12T13:31:29Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;This handbook is created with the purpose of having information about all IT services in COEP in one place. COEP provides three &amp;quot;accounts&amp;quot; to all the students and staff members. These are * Email account * MIS account * Moodle account (also called as LDAP account)  &amp;#039;&amp;#039;&amp;#039;Note that each of these accounts has a different login id and password.&amp;#039;&amp;#039;&amp;#039;   == Moodle Account (openLDAP account) ==  openLDAP enables us to use single login/password pair for many websites within COEP....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This handbook is created with the purpose of having information about all IT services in COEP in one place.&lt;br /&gt;
COEP provides three &amp;quot;accounts&amp;quot; to all the students and staff members. These are&lt;br /&gt;
* Email account&lt;br /&gt;
* MIS account&lt;br /&gt;
* Moodle account (also called as LDAP account)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that each of these accounts has a different login id and password.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
== Moodle Account (openLDAP account) == &lt;br /&gt;
openLDAP enables us to use single login/password pair for many websites within COEP. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a diagram explaining how the COEP openLDAP is used. &lt;br /&gt;
[[File:Coep-ldap.png|thumb|COEP LDAP : Illustration]]&lt;br /&gt;
&lt;br /&gt;
Typically the login id for students is their MIS ID.For staff, generally, it matches with their email account &#039;&#039;user id&#039;&#039;. Remember, your email account is still a different entity and has a different login id + password. For example, if the email id for staff is  xyz.dept@coep.ac.in then the openLDAP login id will be xyz.dept  (without the @coep.ac.in part) with a different password. &lt;br /&gt;
&lt;br /&gt;
If you have forgotten your openLDAP password, please ask data center to reset it. &lt;br /&gt;
&lt;br /&gt;
The services accessible using your openLDAP (or also called as the Moodle) account, i.e. same login-password pair, are: &lt;br /&gt;
* COEP moodle (http://moodle.coep.org.in)&lt;br /&gt;
* COEP wiki - this website. (http://foss.coep.org.in/coepwiki)&lt;br /&gt;
* COEP web proxy&lt;br /&gt;
* Kpoint software (http://kpoint.coep.org.in)&lt;br /&gt;
* Helpdesk services (http://helpdesk.coep.org.in)&lt;br /&gt;
* COEP Website (http://www.coep.org.in) &lt;br /&gt;
* COEP Students Suggestions Portal (http://www.coep.org.in/suggestionportal) &lt;br /&gt;
* COEP Nextcloud (http://nextcloud.coep.org.in) &lt;br /&gt;
&lt;br /&gt;
To change your password, [http://moodle.coep.org.in/moodle/login/change_password.php?id=1 visit this page(click).]&lt;br /&gt;
&lt;br /&gt;
Note that this is NOT the wi-fi access facility. For wi-fi access you need to contact the data centre. &lt;br /&gt;
 &lt;br /&gt;
For more details see [[COEP Moodle FAQ]]&lt;br /&gt;
&lt;br /&gt;
== Email Account ==&lt;br /&gt;
For students the email account has login id like  surnamesomeone08.it@coep.ac.in. This account is provided and managed by the data centre. For faculty and staff, the email id is given by data centre as per the request.&lt;br /&gt;
  &lt;br /&gt;
This account is accessible on  https://outlook.office.com/coep.ac.in&lt;br /&gt;
&lt;br /&gt;
If you want an email account, then you should write to helpdesk - at - coep - dot - ac - dot - in.&lt;br /&gt;
&lt;br /&gt;
== MIS Account == &lt;br /&gt;
For academic purposes like credits registration, dropping courses, accessing results, the Management Information System (MIS) is used. For students and staff the login id is their MIS ID.&lt;br /&gt;
&lt;br /&gt;
This account is accessible on http://portal.coep.org.in:9093  or http://10.1.11.31:2020/Login.aspx&lt;br /&gt;
&lt;br /&gt;
If you want this account, then you should contact the MIS team on mishelp - at - coep - dot - ac - dot - in. &lt;br /&gt;
(Email id written like that to avoid spammers)&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=COEP_Moodle_FAQ&amp;diff=17</id>
		<title>COEP Moodle FAQ</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=COEP_Moodle_FAQ&amp;diff=17"/>
		<updated>2025-08-12T13:31:09Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;COEP Moodle is available at [http://moodle.coep.org.in COEP Moodle.   &amp;#039;&amp;#039;&amp;#039;To login&amp;#039;&amp;#039;&amp;#039;   a) (for students) use your MIS ID as login-id and the default password sent to you on email (You&amp;#039;ll have to search your emails for that, check for announcements regarding moodle).   b) (for faculty), use your email-id without the @coep.ac.in part (e.g. abhijit.comp and not abhijit.comp@coep...) and use the password sent to you on email.  = Questions/Complaints and Answers =   == I have...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;COEP Moodle is available at [http://moodle.coep.org.in COEP Moodle. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To login&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
a) (for students) use your MIS ID as login-id and the default password sent to you on email (You&#039;ll have to search your emails for that, check for announcements regarding moodle). &lt;br /&gt;
&lt;br /&gt;
b) (for faculty), use your email-id without the @coep.ac.in part (e.g. abhijit.comp and not abhijit.comp@coep...) and use the password sent to you on email.&lt;br /&gt;
&lt;br /&gt;
= Questions/Complaints and Answers = &lt;br /&gt;
&lt;br /&gt;
== I have forgotten my password == &lt;br /&gt;
* Send an email to helpdesk __ at __ coep __ dot __ ac __ dot __ in (In this description of email remove the __ and replace the at and dot with @ and . respectively; also do not update the email on this wiki). &lt;br /&gt;
* If you do not get a reply then you can go to data centre &lt;br /&gt;
&lt;br /&gt;
== My password is not working == &lt;br /&gt;
* You should not forget one of your most important passwords!&lt;br /&gt;
* Check the caps lock button on your keyboard. &lt;br /&gt;
* The passwords are case-sensitive. This means &#039;a&#039; and &#039;A&#039; are not the same.&lt;br /&gt;
* See the question &amp;quot;I have forgotten my password&amp;quot; &lt;br /&gt;
&lt;br /&gt;
== I do not know anything about moodle. What to do? ==&lt;br /&gt;
* Moodle is a website which hosts various courses and allows online submission, online exam etc. &lt;br /&gt;
* COEP moodle is located at [https://moodle.coep.org.in]. To login (for students) use your MIS ID as login-id and the default password sent to you on email (You&#039;ll have to search your emails for that, check for announcements regarding moodle). To login(for faculty), use your email-id without the @coep.ac.in part (e.g. abhijit.comp and not abhijit.comp@coep...) and use the password sent to you on email. &lt;br /&gt;
* Search the web for &amp;quot;moodle tutorials&amp;quot;&lt;br /&gt;
* Visit [https://www.moodle.org Moodle.org] and [https://demo.moodle.org demo.moodle.org] to know more.&lt;br /&gt;
&lt;br /&gt;
== I can not find the course, what to do? == &lt;br /&gt;
* Click on &amp;quot;Home&amp;quot; link&lt;br /&gt;
* Select the appropriate department or &amp;quot;institute elective&amp;quot; depending on the nature of course&lt;br /&gt;
* Select the appropriate semester. (Sem-4, sem-7, etc)&lt;br /&gt;
* If you do not see your course, ask your faculty incharge to send a request using request facility on Moodle. &lt;br /&gt;
* When you click on the course link, it will ask you to Enroll for the course. Say &amp;quot;Enrol me&amp;quot;. Now you are part of the course. &lt;br /&gt;
&lt;br /&gt;
== I do not see a link for uploading/submitting my files == &lt;br /&gt;
* Check that you have enrolled for the course. You will find the &amp;quot;Enrol me&amp;quot; link in the left-column on your Moodle page. Click on that link.&lt;br /&gt;
* The deadline for the assignment may be over. Contact your teacher for showing you mercy and giving an extension. &lt;br /&gt;
&lt;br /&gt;
== The deadline for my submission is over. What should I do? == &lt;br /&gt;
Contact your course teacher and plead for mercy. &lt;br /&gt;
&lt;br /&gt;
== I want Moodle to be used for XYZ course. == &lt;br /&gt;
Ask your course teacher to contact Moodle administrators. &lt;br /&gt;
&lt;br /&gt;
== I can not access Moodle from home. ==&lt;br /&gt;
Contact data centre. The COEP DNS server may be dead. &lt;br /&gt;
&lt;br /&gt;
== I got this error &amp;quot;LDAP-module cannot connect to any servers&amp;quot; == &lt;br /&gt;
Contact data center and ask them to turn ON the LDAP machine. It might be down due to some reason. &lt;br /&gt;
&lt;br /&gt;
== What is this LDAP thing? == &lt;br /&gt;
LDAP is Lightweight Directory Access Protocol. Essentially it is a piece of software which can &#039;store&#039; information about users (like login-passwords) and provides the information when queries. In COEP we are running an LDAP server which stores your login-passwords. The moodle-server contacts the LDAP server to &amp;quot;authenticate&amp;quot; (verify your login-password) when you login to moodle. &lt;br /&gt;
&lt;br /&gt;
We can host many &amp;quot;services&amp;quot; using the same LDAP server, enabling use of same login password. For example this wiki website also allows access using the same login-password as used for moodle. &lt;br /&gt;
&lt;br /&gt;
= More Resources for Learning =&lt;br /&gt;
Both the links given below allow you to use Moodle in various possible ways. Try it !&lt;br /&gt;
* http://demo.moodle.net/ Moodle Demo Website&lt;br /&gt;
* http://school.demo.moodle.net/ School Moodle Demo Website]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Introduction_to_Inquiry,_Thinking_and_Research_Sem_IV_2015&amp;diff=16</id>
		<title>Introduction to Inquiry, Thinking and Research Sem IV 2015</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Introduction_to_Inquiry,_Thinking_and_Research_Sem_IV_2015&amp;diff=16"/>
		<updated>2025-08-12T13:30:48Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;Introduction to Inquiry, Thinking and Research is an elective course offered to second year students of COEP in the even semester &amp;#039;&amp;#039;&amp;#039;2015&amp;#039;&amp;#039;&amp;#039;.   The course aims at fostering very important skills of &amp;quot;inquiry&amp;quot; among budding engineers, to nurture their personality and engineering acumen.   = Course Advertisement = Advertisement  = FAQ = == Is it related to my branch? == Yes. It is related to all branches. Inquiry is a part of each discipline of sc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Introduction to Inquiry, Thinking and Research is an elective course offered to second year students of COEP in the even semester &#039;&#039;&#039;2015&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The course aims at fostering very important skills of &amp;quot;inquiry&amp;quot; among budding engineers, to nurture their personality and engineering acumen. &lt;br /&gt;
&lt;br /&gt;
= Course Advertisement =&lt;br /&gt;
[[File:Iitr-2015-adv.png|Advertisement]]&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
== Is it related to my branch? ==&lt;br /&gt;
Yes. It is related to all branches. Inquiry is a part of each discipline of science and engineering. &lt;br /&gt;
&lt;br /&gt;
== Who is going to teach the course ? ==&lt;br /&gt;
The course, to be true, will not &amp;quot;teach&amp;quot; you any new knowledge. It will rather, aim at inculcating the skills of inquiry, arguing, theory creation, various ways of reasoning, etc. among you. The course will be coordinated by Prof. Abhijit A. M. and assisted partly by a number of &amp;quot;inquirers&amp;quot; including Prof. K. P. Mohanan from IISER, Pune and others (mathematicians, historians, science educators, linguists, etc). &lt;br /&gt;
&lt;br /&gt;
== Is this course only for those who want to do research ? ==&lt;br /&gt;
No. It will definitely help greatly to those want to do research, however knowing the process of inquiry is important for any good engineer. It will help you solve the real life practical problems better. &lt;br /&gt;
&lt;br /&gt;
== What is this course all about? ==&lt;br /&gt;
The  course will  not give you &amp;quot;new knowledge&amp;quot; or test your existing knowledge. This is a unique course, designed to &amp;quot;create abilities&amp;quot; and &amp;quot;test abilities&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Science has evolved historically &lt;br /&gt;
because of the naturally curious nature of human beings. The process of discovering new knowledge starts with asking basic, fundamental questions about things around us. The process of seeking answers also involves making rational arguments, gathering and presenting facts, creating statistics, doing some mathematics, creatively thinking new theories, etc. This is common to all branches of knowledge.&lt;br /&gt;
&lt;br /&gt;
== Isn&#039;t it a final year or M.Tech. elective offered to second year students by mistake ? ==&lt;br /&gt;
Absolutely  no. Experience with school children with the same course has been fantastic. See https://www.youtube.com/channel/UCApqaCflm3mVTnfh9VBfAPg&lt;br /&gt;
&lt;br /&gt;
== Does it involve lot of knowledge about Physics? ==&lt;br /&gt;
No. The course content is generic for all fields of knowledge. Problems of physics may be discussed in the course as part of general discussions about inquiry.&lt;br /&gt;
&lt;br /&gt;
== Do I need to be a 9 pointer to opt for this course? ==&lt;br /&gt;
Absolutely  No. However you should have a genuine interest in knowing about inquiry  and research. You should be willing to put in the efforts expected by the instructors.&lt;br /&gt;
&lt;br /&gt;
== The Syllabus has a long list of reference books. I am scared. ==&lt;br /&gt;
You will have to,read the material prescribed in the class, which may include some articles, papers, few books, etc. The list given in syllabus is list of reference books, for those who want to venture more and increase the depth of understanding. Knowing more always helps. However the course does not assume you to have read these books or will read all these books.  &lt;br /&gt;
&lt;br /&gt;
== How does it help in my career? Will it get me a better job? ==&lt;br /&gt;
Yes. Being a good inquirer helps in all domains of knowledge.&lt;br /&gt;
&lt;br /&gt;
== I Want to know more. Where do I go? == &lt;br /&gt;
Have  a look at these videos on youtube: [https://www.youtube.com/channel/UCApqaCflm3mVTnfh9VBfAPg K P Mohanan&#039;s Scied Youtube Channel]&lt;br /&gt;
&lt;br /&gt;
Also see &lt;br /&gt;
[https://wiki.nus.edu.sg/display/aki/Home;jsessionid=D814AD4B8B24AC428B98B6BB8175AD5B Academic Knowledge and Inquiry course and NUS by Prof. Mohanan]&lt;br /&gt;
&lt;br /&gt;
One of the better options is: Ask the Non-electrical branch students, who opted for this course in the Sem-III.&lt;br /&gt;
&lt;br /&gt;
== What are the expectations from the students? Is it a demanding course? ==&lt;br /&gt;
We expect honesty, curiosity and hard work from students. &#039;&#039;&#039;Yes, it is a demanding course and you are expected to invest hard work; but&#039;&#039;&#039; it will not demand mugging up pages nor will it demand late night preparations for exam - it will rather demand continuous, serious mental engagement in the debates and discussions in class, regular attempts at non-trivial assignments, non-trivial quizzes, self-study, group-work, and so on.&lt;br /&gt;
&lt;br /&gt;
== My question has not been answered here. What should I do? ==&lt;br /&gt;
Contact Prof. Abhijit on &amp;quot;abhijit . comp @ coep . ac . in&amp;quot; or call him on +91 9422308125.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Operating_Systems&amp;diff=15</id>
		<title>Operating Systems</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Operating_Systems&amp;diff=15"/>
		<updated>2025-08-12T13:30:12Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;CT 315 Operating Systems, Sem VI, Year 2013.   == Instructor == Abhijit A.M.  is the instructor.  == Syllabus == == Scheme of Evaluation == == Compiling Linux Kernel == ADDING SYSTEM-CALLS TO THE KERNEL AND THEN COMPILING IT.&amp;lt;br/&amp;gt; All the process is carried out in Guest OS.&amp;lt;br/&amp;gt; 1.Install Virtual-box.&amp;lt;br/&amp;gt;         $sudo apt-get install virtual-box 2.Install ubuntu OS in the virtual-box.(make the appropriate correct partitions while installing ubuntu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CT 315&lt;br /&gt;
Operating Systems, Sem VI, Year 2013. &lt;br /&gt;
&lt;br /&gt;
== Instructor ==&lt;br /&gt;
[[User:Abhijit.comp|Abhijit A.M.]]  is the instructor.&lt;br /&gt;
&lt;br /&gt;
== Syllabus ==&lt;br /&gt;
== Scheme of Evaluation ==&lt;br /&gt;
== Compiling Linux Kernel ==&lt;br /&gt;
ADDING SYSTEM-CALLS TO THE KERNEL AND THEN COMPILING IT.&amp;lt;br/&amp;gt;&lt;br /&gt;
All the process is carried out in Guest OS.&amp;lt;br/&amp;gt;&lt;br /&gt;
1.Install Virtual-box.&amp;lt;br/&amp;gt;&lt;br /&gt;
        $sudo apt-get install virtual-box&lt;br /&gt;
2.Install ubuntu OS in the virtual-box.(make the appropriate correct partitions while installing ubuntu)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.Download any current stable version of linux kernel file i.e linux-3.13.1.tar.xz file and move to any folder like home, /usr/src etc.&amp;lt;br/&amp;gt;&lt;br /&gt;
4.Extract the tar.xz file using&amp;lt;br/&amp;gt;&lt;br /&gt;
        $tar xvf file_name.&lt;br /&gt;
&lt;br /&gt;
5.Go to syscalls folder and open  syscalls32.tbl file &amp;lt;br/&amp;gt; &lt;br /&gt;
        $cd linux-3.13.1/arch/x86/syscalls/ &amp;lt;br/&amp;gt;&lt;br /&gt;
        $vim syscalls32.tbl&lt;br /&gt;
6.Add the system call at the end of the file through following line.&amp;lt;br/&amp;gt;&lt;br /&gt;
        eg. 351 i386 mycall sys_mycall  /*here sys_mycall is the name of the system call to be added*/&lt;br /&gt;
7.open syscalls.h file&amp;lt;br/&amp;gt;&lt;br /&gt;
        $vim include/linux/syscalls.h&lt;br /&gt;
8.add the following prototype in the .h file&amp;lt;br/&amp;gt;&lt;br /&gt;
        asmlinkage int sys_mycall(void);&lt;br /&gt;
9.open fork.c file in kernel folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
        $cd linux-3.13.1/kernel/ &lt;br /&gt;
        $vim fork.c&lt;br /&gt;
10.Add the following function at the end of the fork.c file i.e it is the function of the syscall which we want to add in the kernel.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        asmlinkage int sys_mycall(void)&lt;br /&gt;
        {&lt;br /&gt;
               return 211; /*we can write printf statements also but syntax are different as it is a kernel file*/&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
Instead of adding function in the fork.c file , we can make our .c file in the kernel folder and then write the function in it. In addition to this, we have to add makefile and run it.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11.Make &amp;quot;try.c&amp;quot; file in home folder and write our code which will be used to check whether syscall is added or not.&lt;br /&gt;
A substitute to embedding assembly code in the C program is to use the syscall(int number, ...) system call which allows us to invoke our own system call and pass arguments to it. Here, the &amp;quot;number&amp;quot; refers to the system call number you have added in the syscalls32.tbl file.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         /* try.c */&lt;br /&gt;
         #include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
         #include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
         int my_call(){&lt;br /&gt;
              int rel;&lt;br /&gt;
              __asm__(&amp;quot;movl $350, %eax&amp;quot;); /*instead of 350 you write your added system call number*/&lt;br /&gt;
              __asm__(&amp;quot;int $0x80&amp;quot;);&lt;br /&gt;
              __asm__(&amp;quot;movl %eax, -4(%ebp)&amp;quot;);&lt;br /&gt;
               /*instead of the above 3 lines we can use syscall(350); (assuming 350 is you added system call number) */&lt;br /&gt;
              return rel;&lt;br /&gt;
         }&lt;br /&gt;
         int main()&lt;br /&gt;
         {&lt;br /&gt;
       	      int rel;&lt;br /&gt;
              printf(&amp;quot;invoking system call\n&amp;quot;);&lt;br /&gt;
              rel = my_call();&lt;br /&gt;
              printf(&amp;quot;%d&amp;quot;, rel);&lt;br /&gt;
              if(rel &amp;lt; 0)&lt;br /&gt;
                    exit(1);&lt;br /&gt;
              return 0;&lt;br /&gt;
         }&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
12.Now compile the kernel.&lt;br /&gt;
        $ cd ~/linux-3.13.1&lt;br /&gt;
        $ make defconfig  /*it will generate the .config file*/&lt;br /&gt;
        $ make -j6 /*so that it will execute 6files at a time*/  &lt;br /&gt;
        $ sudo make modules_install&lt;br /&gt;
        $ sudo make install&lt;br /&gt;
13.reboot the system&lt;br /&gt;
        $sudo reboot&lt;br /&gt;
14.now compile and execute the try.c file&lt;br /&gt;
        $cc try.c -o try&lt;br /&gt;
        $./try&lt;br /&gt;
output :- 211. (this shows syscall has been added to the kernel-3.13.1)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
note:-whenever any changes and updation is  made in the kernel, every time we have to compile and reboot it.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugfs ==&lt;br /&gt;
debugfs is a file system debugger tool. To know ext2 file system debugging, &lt;br /&gt;
Try following command:&lt;br /&gt;
First of all,  format your pendrive :&lt;br /&gt;
 &lt;br /&gt;
 $mount                                 //it attaches file system found on some device to &lt;br /&gt;
                                          the big file tree&lt;br /&gt;
 $umount /media/pendrive_name/ &lt;br /&gt;
 $sudo mkfs -t ext2 /dev/sdb1            /create ext2 filesystem in your pendrive &lt;br /&gt;
 $mkdir /tmp/x                           //create a directory&lt;br /&gt;
 $sudo mount -t ext2 /dev/sdb1 /tmp/x    //ext2 filesystem in /tmp/x&lt;br /&gt;
 $ls /tmp/x                              //see content of /tmp/x&lt;br /&gt;
 $cp /etc/passwd /tmp/x                  //after copying passwd file to /tmp/x&lt;br /&gt;
 $ls -li /tmp/x&lt;br /&gt;
 $sudo debugfs /dev/sdb1                 //debugfs tool for your device file&lt;br /&gt;
 debugfs :stats&lt;br /&gt;
 debugfs :stat /passwd&lt;br /&gt;
 debugfs :stat /lost+found &lt;br /&gt;
&lt;br /&gt;
//stat &amp;lt;filename&amp;gt;   will give blockcount, linkcount, inode   etc.information related to file&lt;br /&gt;
//try &#039;sync&#039; command to synchronize data on disk with memory for any inconsistencies&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine Setup ==&lt;br /&gt;
Write your tutorials for setting up various virtual machines using the links given below. Click on the link and you can start working on the page. &lt;br /&gt;
&lt;br /&gt;
* [[Debian Setup using Virtualbox]]&lt;br /&gt;
* [[Minix Setup using Virtualbox]]&lt;br /&gt;
* [[Free RTOS Setup using Virtualbox]]&lt;br /&gt;
* [[Fedora Setup using Virtualbox]]&lt;br /&gt;
* [[Aix Setup using Virtualbox]]&lt;br /&gt;
* [[Bsd Unix Setup using Virtualbox]]&lt;br /&gt;
* [[Windows 8  Setup using Virtualbox]]&lt;br /&gt;
* [[Sackware Setup using Virtualbox]]&lt;br /&gt;
* [[Windows 7 Setup using Virtualbox]]&lt;br /&gt;
* [[Open solaris  Setup using Virtualbox]]&lt;br /&gt;
* [[Damn Small Setup using Virtualbox]]&lt;br /&gt;
* [[Tiny core linux  Setup using Virtualbox]]&lt;br /&gt;
* [[Chromium os  Setup using Virtualbox]]&lt;br /&gt;
* [[Gentoox Setup using Virtualbox]]&lt;br /&gt;
* [[Mac  Setup using Virtualbox]]&lt;br /&gt;
* [[Android Setup using Virtualbox]]&lt;br /&gt;
* [[Arch linux  Setup using Virtualbox]]&lt;br /&gt;
* [[Sun solaris  Setup using Virtualbox]]&lt;br /&gt;
* [[Red Hat Enterprise Linux 6 using VirtualBox]]&lt;br /&gt;
&lt;br /&gt;
== strace on ./helloworld&amp;quot; ==&lt;br /&gt;
Write the meaning of output of &amp;quot;strace helloworld&amp;quot; shown on stderr here.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we write helloworld program in C &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; style=&amp;quot;overflow:auto&amp;quot;&amp;gt;&lt;br /&gt;
               #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
               int main() {&lt;br /&gt;
                          printf(&amp;quot;Hello world!\n&amp;quot;);&lt;br /&gt;
                          return 0;&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
After compiling it, do on prompt &amp;gt; &#039;&#039;&#039;strace  ./helloworld&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
It will give you all the system calls made by helloworld program.&lt;br /&gt;
&lt;br /&gt;
==Output of $ strace ./hello==&lt;br /&gt;
 execve(&amp;quot;./hello&amp;quot;, [&amp;quot;./hello&amp;quot;], [/* 46 vars */]) = 0&lt;br /&gt;
 brk(0)   = 0x8966000&lt;br /&gt;
 access(&amp;quot;/etc/ld.so.nohwcap&amp;quot;, F_OK)      = -1 ENOENT (No such file or directory)&lt;br /&gt;
 mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb774a000&lt;br /&gt;
 access(&amp;quot;/etc/ld.so.preload&amp;quot;, R_OK)  = -1 ENOENT (No such file or directory)&lt;br /&gt;
 open(&amp;quot;/etc/ld.so.cache&amp;quot;, O_RDONLY|O_CLOEXEC) = 3&lt;br /&gt;
 fstat64(3, {st_mode=S_IFREG|0644, st_size=87978, ...}) =0&lt;br /&gt;
 mmap2(NULL, 87978, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7734000&lt;br /&gt;
 close(3)                                = 0&lt;br /&gt;
 access(&amp;quot;/etc/ld.so.nohwcap&amp;quot;, F_OK)      = -1 ENOENT (No such file or directory)&lt;br /&gt;
 open(&amp;quot;/lib/i386-linux-gnu/libc.so.6&amp;quot;, O_RDONLY|O_CLOEXEC) = 3&lt;br /&gt;
 read(3, &amp;quot;\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\226\1\0004\0\0\0&amp;quot;..., 512) = 512&lt;br /&gt;
 fstat64(3, {st_mode=S_IFREG|0755, st_size=1713640, ...}) = 0&lt;br /&gt;
 mmap2(NULL, 1723100, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb758f000&lt;br /&gt;
 mmap2(0xb772e000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19f) = 0xb772e000&lt;br /&gt;
 mmap2(0xb7731000, 10972, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7731000&lt;br /&gt;
 close(3)                                = 0&lt;br /&gt;
 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb758e000&lt;br /&gt;
 set_thread_area({entry_number:-1 -&amp;gt; 6, base_addr:0xb758e900, limit:1048575, seg_32bit:1, contents:0, &lt;br /&gt;
 read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0&lt;br /&gt;
 mprotect(0xb772e000, 8192, PROT_READ)   = 0&lt;br /&gt;
 mprotect(0x8049000, 4096, PROT_READ)    = 0&lt;br /&gt;
 mprotect(0xb776d000, 4096, PROT_READ)   = 0&lt;br /&gt;
 munmap(0xb7734000, 87978)               = 0&lt;br /&gt;
 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev = makedev(136, 3), ...}) = 0&lt;br /&gt;
 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7749000&lt;br /&gt;
 write(1, &amp;quot;Hello world!\n&amp;quot;, 13Hello world!)          = 13&lt;br /&gt;
 exit_group(13)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Each line of the o/p is a system call along with the arguments.The values to the right of the system calls indicate their return values.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==strace==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;strace&#039;&#039;&#039; is a tool to trace the system calls and signals. strace is used as a diagnostic and debugging tool. It runs the specified command until it exists. Tracing system calls using strace help in bug isolation and capturing race conditions. It runs the specified command and records the system calls made by the process as well as signals received by the process. It can trace all the system calls of programs even when the source code is not available. &lt;br /&gt;
Trace is helpful when we are getting some errors continuously in our program and if our program is not doing what it actually meant to be or if our program crashes continually.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate Statistics Report of System Calls Using Option -c==&lt;br /&gt;
Using option -c, strace provides useful statistical report for the execution trace. The “calls” column in the following output indicated how many times that particular system call was executed.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Hello World% time     seconds  usecs/call     calls    errors syscall&lt;br /&gt;
&lt;br /&gt;
------ ----------- ----------- --------- --------- ----------------  &amp;lt;br&amp;gt;-nan    0.000000           0         1           read  &amp;lt;br&amp;gt;-nan    0.000000           0         1           write  &amp;lt;br&amp;gt;-nan    0.000000           0         2           open  &amp;lt;br&amp;gt;-nan    0.000000           0         2           close  &amp;lt;br&amp;gt;-nan    0.000000           0         1           execve  &amp;lt;br&amp;gt;-nan    0.000000           0         3         3 access  &amp;lt;br&amp;gt;-nan    0.000000           0         1           brk  &amp;lt;br&amp;gt;-nan    0.000000           0         1           munmap  &amp;lt;br&amp;gt;-nan    0.000000           0         4           mprotect  &amp;lt;br&amp;gt;-nan    0.000000           0         7           mmap2 &amp;lt;br&amp;gt; -nan    0.000000           0         3           fstat64  &amp;lt;br&amp;gt;-nan    0.000000           0         1           set_thread_area &amp;lt;br&amp;gt;------ ----------- ----------- --------- --------- ----------------&amp;lt;br&amp;gt;100.00    0.000000                    27         3 total&lt;br /&gt;
&lt;br /&gt;
==Sequencing and meaning of signals in strace==&lt;br /&gt;
&lt;br /&gt;
1.&#039;&#039;&#039;execve(&amp;quot;./hello&amp;quot;, [&amp;quot;./hello&amp;quot;], [/* 46 vars */])&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
Basically this signal is used for execution of the file which is passed as an argument to it.(here,&amp;quot;./hello&amp;quot;).The third argument passed to the signal denotes the number of environment variables(set of values that affect the way running processes behave on a computer. For eg date,time,random) supported by the system(here 46).The list of these variables can be checked by making use of environ variable.&lt;br /&gt;
&lt;br /&gt;
2.&#039;&#039;&#039;brk(0)   = 0x8966000&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
brk signal is used to change the size of the data segment or we can say that to change the program break which points to the end of data segment.Here it is used with an incremental zero,which gives the current value of the program break i.e. current end of data segment.&lt;br /&gt;
&lt;br /&gt;
3.&#039;&#039;&#039;access(&amp;quot;/etc/ld.so.nohwcap&amp;quot;, F_OK)&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
access() checks whether the calling process can access the file given as the first argument. ld.so loads the shared libraries needed by a program,prepares the program to run and then runs it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/ld.so.nohwcap file is used for dynamic linking of the program whenever the program is incomplete(mostly links the libraries). The second argument specifies the accessibility check(s) to be performed.(here &amp;quot;F_OK&amp;quot;. F_OK tests for the existence of the file.) On success 0 is returned while on failure -1 is returned and errno is set accordingly( here &amp;quot;ENOENT&amp;quot; which indicates a component of &amp;quot;/etc/ld.so.nohwcap&amp;quot; does not exist or is a dangling symbolic link.)&lt;br /&gt;
Here we don&#039;t need any linking to our program.Thus we can avoid these unnecessary access checks by using -static command while compiling the program.This improves the launch time.&lt;br /&gt;
&lt;br /&gt;
4.&#039;&#039;&#039;mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb774a000&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
This signal is used to map memory for files and devices.The first argument is NULL which means that the kernel will decide the address from where mapping is to be started.The next is the size of the memory which is mapped by this signal.This memory is read-write memory.The flags are kept private as well as anonymous so that we can take backup of this memory if required.The next argument is fd which is kept -1 to support some applications supported by anonymous flag.The last argument is offset.which is 0 here.&lt;br /&gt;
&lt;br /&gt;
5.&#039;&#039;&#039;access(&amp;quot;/etc/ld.so.preload&amp;quot;, R_OK) &#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
.preload file is used to override functions in some other libraries. This is called preloading a library (preloading a library means that its functions will be used before others of the same name in later libraries). R_OK checks if the file exists and grants the permission to read if it does. Again this is returning -1 with errorno as ENOENT indicating that a component of &amp;quot;/etc/ld.so.preload&amp;quot; does not exist. We don&#039;t need this file too. So this access check can also be avoided by using -static. &lt;br /&gt;
&lt;br /&gt;
6.&#039;&#039;&#039;open(&amp;quot;/etc/ld.so.cache&amp;quot;, O_RDONLY|O_CLOEXEC) = 3&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
ld.so.cache file contains an ordered list of libraries found in the directories specified in /etc/ld.so.conf, which shows the list of directories. Thus this file contains the list of all the libraries and when a program requires a library, this file gives the library (i.e. if it contains that library) to ld.so which then loads the library and makes it available to the requesting program. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
student@foss-01:~$ cat /etc/ld.so.conf.d/*&amp;lt;br /&amp;gt;&lt;br /&gt;
/usr/lib/i386-linux-gnu/mesa-egl&amp;lt;br /&amp;gt;&lt;br /&gt;
/usr/lib/i386-linux-gnu/mesa&amp;lt;br /&amp;gt;&lt;br /&gt;
Multiarch support&amp;lt;br /&amp;gt;&lt;br /&gt;
/lib/i386-linux-gnu&amp;lt;br /&amp;gt;&lt;br /&gt;
/usr/lib/i386-linux-gnu&amp;lt;br /&amp;gt;&lt;br /&gt;
/lib/i686-linux-gnu&amp;lt;br /&amp;gt;&lt;br /&gt;
/usr/lib/i686-linux-gnu&amp;lt;br /&amp;gt;&lt;br /&gt;
libc default configuration&amp;lt;br /&amp;gt;&lt;br /&gt;
/usr/local/lib&amp;lt;br /&amp;gt;&lt;br /&gt;
cache file is opened to check the libraries supported by the system.This is binary file.&lt;br /&gt;
&lt;br /&gt;
7.&#039;&#039;&#039;fstat64(3, {st_mode=S_IFREG|0644, st_size=87978, ...}) =0&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
This signal provides information about the file whose fd is passed to it as an argument.Here it gives information about the .cache files.This signal is used here to get the size of the .cache file so that it can map that much memory using mmap2.st_mode=S_IFREG states that the file is a regular file.It returns 0 on success.&lt;br /&gt;
&lt;br /&gt;
8.&#039;&#039;&#039;mmap2(NULL, 87978, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7734000&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
This signal is used to map 87978 bytes of memory for .cache file.It is mapped from the address b7734000.This area is read only memory so that no one can change the contents oh this file.The flag is also kept private so that backup of this memory can be taken.&lt;br /&gt;
&lt;br /&gt;
9.&#039;&#039;&#039;close(3)&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
This signal is used to close the file having fd 3 i.e. .cache file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. &lt;br /&gt;
&#039;&#039;&#039;open(&amp;quot;/lib/i386-linux-gnu/libc.so.6&amp;quot;, O_RDONLY|O_CLOEXEC) = 3&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Libc file shows which files are in C library. &amp;lt;br /&amp;gt;&lt;br /&gt;
i386 specifies which processor. &amp;lt;br /&amp;gt;&lt;br /&gt;
linux specifies which operating system.&amp;lt;br /&amp;gt;&lt;br /&gt;
gnu is the compiler which compile programs using gcc.&amp;lt;br /&amp;gt;&lt;br /&gt;
lib/i386-linux-gnu/libc.so.6 shows all standard libraries that are used by nearly all programs.&amp;lt;br /&amp;gt;&lt;br /&gt;
And the second argument is to open these libraries as read only and can also enable multithreading.&amp;lt;br /&amp;gt;&lt;br /&gt;
So here the system call open is to open those libraries and load them in file descriptor 3.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
11.&#039;&#039;&#039;read(3, &amp;quot;\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\226\1\0004\0\0\0&amp;quot;..., 512) = 512&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
This system call is made to read some binary file upto 512 bytes into file descriptor 3. As it is binary file, it can not be read by user. And as part of return it returns those 512 bytes.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
12. &#039;&#039;&#039;fstat64(3, {st_mode=S_IFREG|0755, st_size=1713640, ...}) = 0&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
This call provides the information of the file descriptor 3. Here it gives information about the .cache files. It is used here to get the size of that .cache file so that it can map that much area using mmap2. Second argument states that file is a regular file.&amp;lt;br /&amp;gt;&lt;br /&gt;
st_mode contains file attributes.&amp;lt;br /&amp;gt;&lt;br /&gt;
S_IFREG marks a file as a regular one. Then it is binary added to 0755 value, being normal file permissions and is written in octal format.&amp;lt;br /&amp;gt;&lt;br /&gt;
Final argument is the size.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
13.&#039;&#039;&#039;mmap2(NULL, 1723100, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb758f000&#039;&#039;&#039;&lt;br /&gt;
First argument NULL specifies kernel will decide the address from where mapping is to be done.&amp;lt;br /&amp;gt;&lt;br /&gt;
Second argument maps 1723100 size of memory. &amp;lt;br /&amp;gt;&lt;br /&gt;
Third argument shows this memory is readable and executable. &amp;lt;br /&amp;gt;&lt;br /&gt;
Fourth shows that the flags are kept private as well as they cannot be rewritten.&lt;br /&gt;
They are usually ignored. &amp;lt;br /&amp;gt;&lt;br /&gt;
Next argument gives the file descriptor value which is 3.&amp;lt;br /&amp;gt;&lt;br /&gt;
Last argument gives offset value referring fd means to start from 0th position.&amp;lt;br /&amp;gt;&lt;br /&gt;
Return value is the address from where the mapping is to be started.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
14. &#039;&#039;&#039;mmap2(0xb772e000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19f) = 0xb772e000&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Here the first argument is the address from where mapping is to be started. That is received by adding size of above mmap2 to address returned by it.&amp;lt;br /&amp;gt;&lt;br /&gt;
Second gives size that is to be mapped from this address.&amp;lt;br /&amp;gt;&lt;br /&gt;
Third argument tells memory it is readable and writeable.&amp;lt;br /&amp;gt;&lt;br /&gt;
Fourth argument tells rights for flags. They are private. MAP_FIXED tells they map exactly at that address. MAP_DENYWRITE tells that flags can be ignored.&amp;lt;br /&amp;gt;&lt;br /&gt;
Then the file descriptor value 3.&lt;br /&gt;
Last argument tells to map from that address.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
15. &#039;&#039;&#039;mmap2(0xb7731000, 10972, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7731000&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
It is same as above with given address and size of memory. The memory is readable and writeable. Flags are private and tells to map exactly at given address. They can also be anonymous that is we can take back up of that file if required. Next argument is is fd. It is set to -1 because of MAP_ANONYMOUS (it is necessary to keep fd as -1 for some purpose).&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
16. &#039;&#039;&#039;close(3)&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
This signal is used to close the file with file descriptor 3 which is .cache file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
17. &#039;&#039;&#039;mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb758e000&#039;&#039;&#039; &amp;lt;br /&amp;gt; Here &amp;quot;NULL&amp;quot; indicating that the kernel will select the address at which to create the mapping. The second argument specifies the length (in bytes) of the mapping(here &amp;quot;4096&amp;quot;). Here the pages may be read or written. The third argument is used to determine if updates to the mapping will be visible to the other processes which are mapping to the same region and if they are carried through to the underlying file.(here bitwise ORing of MAP_PRIVATE and MAP_ANONYMOUS. MAP_PRIVATE shows that updates to the mapping will not be visible to the other processes mapping to the same region and that they are not carried through to the underlying file. MAP_ANONYMOUS shows that the mapping maps an area of the process&#039;s virtual memory which is not backed by any file.) The fourth argument is the file descriptor of the file to be mapped(here &amp;quot;-1&amp;quot; because MAP_ANONYMOUS is used). The fifth argument is the offset into the file to be mapped in 4096-byte units. The offset is constrained to be aligned on a page boundary. The return value is the address at which the mapping was placed. &amp;lt;br  /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
18. &#039;&#039;&#039;set_thread_area({entry_number:-1 -&amp;gt; 6, base_addr:0xb77e06c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
set_thread_area()  sets  an  entry in the current thread&#039;s Thread Local Storage (TLS) array.  The TLS array entry set by set_thread_area() corresponds  to  the  value of u_info-&amp;gt;entry_number passed in by the user.If this value is in bounds, set_thread_area() copies the TLS descriptor pointed to by u_info into the thread&#039;s TLS array.When  set_thread_area() is passed an entry_number of -1, it uses a free TLS entry.  If set_thread_area() finds a free TLS entry, the  value  of u_info-&amp;gt;entry_number  is  set  upon  return  to  show  which  entry was changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
19. &#039;&#039;&#039; mprotect(0xb772e000, 8192, PROT_READ)   = 0&#039;&#039;&#039; &amp;lt;br  /&amp;gt;&lt;br /&gt;
mprotect() is basically used to change the protection rights of the memory mapping. The first argument shows the starting address from where the protection rights are to be changed.(here &amp;quot;0xb772e000&amp;quot;). The second argument indicates the length(here &amp;quot;8192&amp;quot;). The pages of the process&#039; address space acquired through the mmap2() used earlier get affected. All the pages starting from the start address till (start address + length -1) change their protection rights to that specified by the third argument(here &amp;quot;PROT_READ&amp;quot;). So these concerned pages are now allowed to be read. Since it is successful in changing the protection rights, it returns 0. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
20. &#039;&#039;&#039;munmap(0xb7734000, 87978)               = 0&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
While mmap2() is used to establish a mapping, mumap() does exactly the reverse. The first argument is the starting address(here &amp;quot;0xb7734000&amp;quot; that was allocated using the second mmap2()). The second argument is the length. Thus munmap() removes any mapping for entire pages starting from the start address upto the length. Any future reference to this memory will result in SIGSEGV signal to the process. Since the memory space it is trying to remove was defined as PRIVATE in the mmap2() call, modifications made in this address range are discarded. It returns 0 as it is successful. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System calls==&lt;br /&gt;
System calls are implemented in the Linux kernel. A system call is not an ordinary function call, a special procedure is required to transfer control to the kernel. Currently in Linux there are about 200 system calls. You can see the list of system calls in &amp;quot;/usr/include/asm-generic/unistd.h&amp;quot;.&lt;br /&gt;
===execve()===&lt;br /&gt;
execve(&amp;quot;./hello&amp;quot;, [&amp;quot;./hello&amp;quot;, &amp;quot;-o&amp;quot;, &amp;quot;output&amp;quot;], [/* 45 vars */]) = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  int execve(const char *filename, char *const argv[],char *const envp[]); &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we know that, when we type in a command or a object file to be executed, the shell spawns a child shell (we can say child process) and this child shell performs the execution. This is done by system call &#039;execve&#039;.&lt;br /&gt;
The first argument to the execve is the binary executable file. The second and the third argument is an array of strings passed to the new program. The first of this strings is file to be executed. The third argument is of the form key = value, is used to create the operating environment for the program. &amp;lt;br/&amp;gt;&lt;br /&gt;
On success execve() does not return and in error case -1 is returned and errno is set accordingly.&lt;br /&gt;
&lt;br /&gt;
===brk()=== &lt;br /&gt;
&lt;br /&gt;
brk(0) = 0x9e7c000   &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  int brk(void *addr);   &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
brk() is used to change the size of the process&#039;s data segment. brk() actually changes the program break, which point&#039;s the end of the process&#039;s data segment. brk() sets the end of data segment to the value specified by addr, this addr is the first location beyond end of data segment . However, this increment to process&#039;s data segment&#039;s size is subject to the availability of memory, maximum limit of program&#039;s data size, etc.&amp;lt;br/&amp;gt;&lt;br /&gt;
brk() returns 0 on success. On error, brk() sets errno and returns -1. However, the actual Linux system call returns the new program break on success and current break on failure. In the above example, the current program value is returned. &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===mmap2()===&lt;br /&gt;
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb774a000 &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;  &lt;br /&gt;
    void *mmap2(void *addr, size_t length, int prot, int flags, int fd, off_t pgoffset);&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Memory mapping is a process in which a portion of file or the entire file on disk, is mapped to the address space of the application. This is done in such a way that it can be accessed as if it were a part of memory. Memory mapping improves efficiency of code and provides faster file access.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
mmap2 is used to map the calling process in the virtual memory at an address specified by addr.The  address specified by addr must be a multiple of the page size. In the above case, addr is set to NULL because kernel chooses mapping address if the addr is set to NULL. Therefore, setting addr to NULL, eventually increases the portability of the program. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The second argument of mmap2() specifies the no of bytes to be initialised while mapping. These bytes are available at an offset represented by the last argument pgoffset. pgoffset specifies the offset in terms of 4096-byte units.The pgoffset is refered by the argument fd which is a file descriptor.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The third argument prot specifies the protection of the mapping. Here, PROT_READ | PROT_WRITE - means the pages can be read or write. The other possible values are PROT EXEC AND PROT NONE.PROT EXEC means pages may be executed while PROT NONE means pages may not be accessed. &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The fourth argument of mmap2 is flags. This argument determines whether the updates to the mapping are to be shared with other process which are mapping the same file. In the above example, bitwise ORing of two flags is done. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
MAP_PRIVATE means that updates are kept private and they won&#039;t be visible to others. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
MAP_ANONYMOUS means that area of process&#039;s virtual memory is not backed up by file. As no backup file is needed, there is no need for file descriptor and page offset argument. Therefore, these arguments are ignored when flag is set to MAP_ANONYMOUS. Generally, for this flag fd is set to -1 and it&#039;s contents initialised to 0.  &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that similar to the fds, even memory mapping is preserved across fork(). &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mmap2() returns pointer to the mapped area on success (This can be seen in the above example). On failure, -1 is returned and errno is appropriately set.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===access()===&lt;br /&gt;
&lt;br /&gt;
access(&amp;quot;/etc/ld.so.nohwcap&amp;quot;, F_OK)      = -1 ENOENT (No such file or directory)&amp;lt;br/&amp;gt;access(&amp;quot;/etc/ld.so.preload&amp;quot;, R_OK)  = -1 ENOENT (No such file or directory)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  int access(const char *pathname, int mode);&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
access() performs various access check(s) as specified by mode on the file specified by *pathname for the calling process. &lt;br /&gt;
Various modes are -&amp;lt;br/&amp;gt; &lt;br /&gt;
&lt;br /&gt;
F_OK - tests whether the file exists&amp;lt;br/&amp;gt;R_OK - tests whether the file grants read permission &amp;lt;br/&amp;gt;W_OK - tests whether the file grants write permission&amp;lt;br/&amp;gt;X_OK - tests whether the file grants execute permission&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The tests depend on permissions of directories occuring in the path to file, as given in pathname.&lt;br /&gt;
It returns 0 on success. On failure it sets errno appropriately and returns -1.&amp;lt;br/&amp;gt;Here the program tries to access two files &lt;br /&gt;
- &amp;lt;br/&amp;gt;&lt;br /&gt;
1 /etc/ld.so.nohwcap&amp;lt;br/&amp;gt;&lt;br /&gt;
2 /etc/ld.so.preload&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and in both cases the return value is -1 and error related to existence of such files. This is because - &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
the programs ld.so and ld-linux.so* find and load the shared libraries needed by a program, prepare the program to run, and then run it.And this is to be explicitly specified via the -static option to ld during compilation. For our simple program of &amp;quot;hello&amp;quot;, we dont need any of such libraries. So did not use -static option. So the return value was -1 as we did not specify any such -static option.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===fstat64()===&lt;br /&gt;
fstat64(3, {st_mode=S_IFREG|0644, st_size=87978, ...}) =0&lt;br /&gt;
&amp;lt;br/&amp;gt;    &lt;br /&gt;
     int fstat64(int fd, struct stat64 *buf);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
fstat() is used to get the file status provided by the file descriptor fd(first argument). The value 3 in the first argument  is the file descriptor returned after opening the file /etc/ld.so.cache. It is a variant of stat() which is also used to get the status of a file. In stat instead of the descriptor, we provide the file path. To execute this calls, no permissions on the file istelf are required. However, in case of stat(), where we specify the path, search permissions on the directories specified in path are required.  These calls return information about the file in the second argument buf, which is a a pointer to the structure stat64. Some of the information fields in the structure stat of fstat() include - &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;1.ID of device which cotaining the file (st_dev)&amp;lt;br/&amp;gt;2.Protection mode (st_mode)&amp;lt;br/&amp;gt;3.No of sectors(512B) allocated to the file&amp;lt;br/&amp;gt;4.time of last access&amp;lt;br/&amp;gt;5.time of last modification, etc&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;In addition to a normal fstat, fstat64&#039;s structure stat64 has some additional information fields which include - &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;1.time of file creation(birth)&amp;lt;br/&amp;gt;2.int32_t st_lspare (Reserved: Not used)&amp;lt;br/&amp;gt;3.int64_t st_qspare[2] (Reserved: Not used)&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The return value on success is 0. Otherwise, -1 is returned and the errno is set appropriately.&lt;br /&gt;
&lt;br /&gt;
===close()===&lt;br /&gt;
close(3)                                = 0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
    int close(int fd);&lt;br /&gt;
&amp;lt;br/&amp;gt;close() call closes the file descriptor so that it no longer points to the file and that descriptor can be used again. Resources associated with the open file description are freed, if fd was the only descriptor pointing to the file. Here, above call closes the descriptor fd = 3, which was returned by open()&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===mprotect()===&lt;br /&gt;
mprotect(0xb772e000, 8192, PROT_READ)   = 0 &lt;br /&gt;
&lt;br /&gt;
     int mprotect(const void *addr, size_t len, int prot);&lt;br /&gt;
&lt;br /&gt;
mprotect() is used to change protection of the calling process&#039;s memory mapping to that specified by prot. The first argument gives the address starting from which the access protection is to be changed. It should be a multiple of the page size. The second argument is the address range given in bytes. The third argument specifies the new protection of the mapping. PROT_READ changes the protection from read and write (as specified in mmap2() for address 0xb772e000) to only read and returns a 0 on success. The other values for prot are:&amp;lt;br/&amp;gt;&lt;br /&gt;
PROT_NONE : No access allowed&amp;lt;br/&amp;gt;&lt;br /&gt;
PROT_WRITE : Write access allowed&amp;lt;br/&amp;gt;&lt;br /&gt;
PROT_EXEC : Memory execution allowed&amp;lt;br/&amp;gt;&lt;br /&gt;
SIGSEGV signal is generated if an attempt is made to access memory violating the protection norms. The function returns 0 on success and -1 on error.&lt;br /&gt;
&lt;br /&gt;
===munmap()===&lt;br /&gt;
munmap(0xb7734000, 87978)               = 0&lt;br /&gt;
&lt;br /&gt;
     int munmap(void *addr, size_t length);&lt;br /&gt;
munmap() is a system call which unmaps pages of memory from a process&#039;s address space. Memory mapping is done by the [[#mmap2()]] system call. On the other hand, munmap() deletes the mappings of all pages starting with the address specified in the first argument (addr) and of size in bytes equal to that specified in the second argument (length). The address must be aligned to a page boundary. Further references to these deleted pages generates the SIGSEGV signal. Memory mapped pages are deleted automatically when a process is terminated. However, closing file descriptor does not remove the mapping.The function returns 0 on success and -1 on failure and sets appropriate errno.   &lt;br /&gt;
&lt;br /&gt;
===write()===&lt;br /&gt;
write(1, &amp;quot;Hello world!\n&amp;quot;, 13Hello world!)          = 13;&lt;br /&gt;
&lt;br /&gt;
     ssize_t write(int fd, const void *buf, size_t count);&lt;br /&gt;
write() is a system call used to write a file pointed by the file descriptor(fd). The write() function writes count(third argument) bytes of buffer(the second argument) to the file pointed by fd. &lt;br /&gt;
&amp;lt;br/&amp;gt;fd = 0, 1, 2 by default point to standard input, standard output and standard error respectively. fd = 1, is the descriptor pointing to the standard output(monitor). This is the system call which is actually printing &amp;quot;hello world&amp;quot; on the screen.&lt;br /&gt;
&lt;br /&gt;
On success, write() returns the no of bytes written. While on failure, -1 is returned and errno is appropriately set.&lt;br /&gt;
&lt;br /&gt;
===exit_group()===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
exit_group(13);&lt;br /&gt;
    void exit_group(int status);&lt;br /&gt;
&lt;br /&gt;
exit_group() is similar to exit() however, unlike exit(), this function not only terminates the calling thread but, all the threads in the calling process. It does not return anything.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===pipe()===&lt;br /&gt;
&lt;br /&gt;
pipe(fd1);&lt;br /&gt;
      int pipe(int pipefd[2]);&lt;br /&gt;
&lt;br /&gt;
A pipe allows two processes to communicate . Mainly used for interprocess communication e.g. Producer Consumer Problem. It creates two file descriptors pointing to the end of file for reading and writing purpose. On success, returns 0 else 1 on error. Data which is written is buffered until it is read from the pipe (read end).&lt;br /&gt;
Two types of pipes are used in both Unix and Windows system- (1) Ordinary pipe, (2) Named pipes.&lt;br /&gt;
&lt;br /&gt;
(1) Ordinary pipes- allow two processes to communicate in standard producer-consumer fashion. This allows only one way communication. In Unix system these pipes are constructed using the function &amp;quot;pipe(int fd[])&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
(2) Named pipes- allow simple communication between a pair of processes. This allows bi-directional communication. Named pipes can be created using the mkfifo(const char *, mode_t) system call. See mkfifo(3).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===clone()===&lt;br /&gt;
     &lt;br /&gt;
      int clone (int (*fn) (void *), void *child_stack, int flags, void *arg);&lt;br /&gt;
&lt;br /&gt;
Clone() is a system call which creates new process as just fork() system call does. It creates a child process&lt;br /&gt;
which can share its execution code with parent. This system call is helpful in multi threading. Generally &lt;br /&gt;
this system call is not called directly, it can be called through pthread library. As shown in above syntax a&lt;br /&gt;
new thread starts with the function which is pointed by fn argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===chdir()===&lt;br /&gt;
Change working directory&lt;br /&gt;
     int chdir(const char *path); &lt;br /&gt;
&lt;br /&gt;
chdir() system call is used to change current working directory. This can be done through both functions shown&lt;br /&gt;
above. chdir function changes our current directory to that which is specified by path. And fchdir uses a&lt;br /&gt;
directory referenced by fd.&lt;br /&gt;
On success it returns 0 and on error -1 is returned.&lt;br /&gt;
&lt;br /&gt;
===fchdir===&lt;br /&gt;
     int fchdir(int fd);&lt;br /&gt;
&lt;br /&gt;
fchdir() is identical to chdir(); the only difference is that the directory is given as an open file descriptor.&lt;br /&gt;
&lt;br /&gt;
===vfork()===&lt;br /&gt;
     pid_t vfork(void);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vfork() is almost similar to fork(), it creates duplicate process as fork(). But  the only difference is when a duplicate process id created using vfork() parent process temporarily suspends. In this case child process might&lt;br /&gt;
borrow parent&#039;s memory space. But it should take care that parent&#039;s data should not be modified unexpectedly.&lt;br /&gt;
On success it returns 0 to child and process ID to parent process or -1 for error.&lt;br /&gt;
&lt;br /&gt;
==Synchronization==&lt;br /&gt;
&lt;br /&gt;
Synchronization means co-ordination of multiple simultaneous processes or threads in order to get correct runtime order and avoid race conditions. Race condition occurs when two or more processes access and manipulate data concurrently. In case of two processes each process has section of code in which the process may be changing common variables, updating the table. This section of code is known as critical section. The critical section problem is used to devise a protocol to help two or more processes co-operate. The solution to critical section must solve the three requirements viz Mutual exclusion, Progress, Bounded waiting. There are various solutions to the critical section problem one them is Peterson&#039;s solution. The Peterson&#039;s solution is valid in case of two processes. The main idea behind the Peterson&#039;s solution is that the processes&lt;br /&gt;
are alternately present in the critical section. Another solution to critical section problem the locking. So the process which currently has the lock can only enter the critical section other process has to wait until the lock is released. Solutions to synchronization problem at hardware level have been devised like the atomic test and set and atomic swap.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
*Linux manual pages - strace(), brk(2), execve(2), mmap(2), access(), fstat(),close(), mprotect(), munmap(), write(2), exit_group(2)&amp;lt;br/&amp;gt;&lt;br /&gt;
*http://en.wikipedia.org/wiki/Mmap&amp;lt;br/&amp;gt;&lt;br /&gt;
*http://en.wikipedia.org/wiki/Memory-mapped_file&amp;lt;br/&amp;gt;&lt;br /&gt;
*http://manpages.ubuntu.com/manpages/hardy/man8/ld.so.8.html&lt;br /&gt;
*http://unixhelp.ed.ac.uk/CGI/man-cgi?ld.so&lt;br /&gt;
*http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man2/fstat64.2.html&lt;br /&gt;
*http://www.linuxplanet.com/linuxplanet/tutorials/7229/1&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Data_Structures_(Odd_Semester_2014)&amp;diff=14</id>
		<title>Data Structures (Odd Semester 2014)</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Data_Structures_(Odd_Semester_2014)&amp;diff=14"/>
		<updated>2025-08-12T13:29:54Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;CT 205 Data Structures is offered to S.Y. B.Tech. Computer Engineering and I.T. students. It is a 4 credit course. The laboratory course CT 209 Data Structures Laboratory is a 2 credit course.  = Common Mistakes by Students in Assignments Submission =  == Writing the NUL character == The NUL character is written as &amp;#039;\0&amp;#039; and not as &amp;#039;/0&amp;#039;  == Copying pointers ==  When you say p = q, where p and q are both pointers, then p does not point to q, but p points to where q points....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CT 205 Data Structures is offered to S.Y. B.Tech. Computer Engineering and I.T. students. It is a 4 credit course. The laboratory course CT 209 Data Structures Laboratory is a 2 credit course.&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes by Students in Assignments Submission = &lt;br /&gt;
== Writing the NUL character ==&lt;br /&gt;
The NUL character is written as &#039;\0&#039; and not as &#039;/0&#039; &lt;br /&gt;
== Copying pointers == &lt;br /&gt;
When you say p = q, where p and q are both pointers, then p does not point to q, but p points to where q points.&lt;br /&gt;
E.g. &amp;lt;br /&amp;gt;&lt;br /&gt;
int a, *p, *q; &amp;lt;br/&amp;gt;&lt;br /&gt;
q = &amp;amp;a; &amp;lt;br/&amp;gt;&lt;br /&gt;
p = q; &amp;lt;br/&amp;gt;&lt;br /&gt;
means p points to a&lt;br /&gt;
== Forgetting use of &amp;amp; in scanf == &lt;br /&gt;
scanf expects the caller to pass the address of a variable in which scanf will store data. Students often forget to do it for non-array variables (for arrays, the name itself is the address)&lt;br /&gt;
For example: &amp;lt;br/&amp;gt;&lt;br /&gt;
int i; &amp;lt;br/&amp;gt;&lt;br /&gt;
scanf(&amp;quot;%d&amp;quot;, i) &amp;lt;br/&amp;gt;&lt;br /&gt;
instead of &amp;lt;br/&amp;gt;&lt;br /&gt;
scanf(&amp;quot;%d&amp;quot;, &amp;amp;i); &amp;lt;br/&amp;gt;&lt;br /&gt;
== Using O and Omega Notation in wrong place ==&lt;br /&gt;
The right way of using O and Omega notation is f(n) = O(g(n)) &amp;lt;br/&amp;gt;&lt;br /&gt;
Students often write it as  O(f(n)) = g(n) &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Another common mistake is writing &amp;lt;br/&amp;gt;&lt;br /&gt;
O is n or O = n &amp;lt;br/&amp;gt;&lt;br /&gt;
The correct way of saying it is f(n) = O(n)&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Introduction_to_Inquiry,_Thinking_and_Research&amp;diff=13</id>
		<title>Introduction to Inquiry, Thinking and Research</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Introduction_to_Inquiry,_Thinking_and_Research&amp;diff=13"/>
		<updated>2025-08-12T13:29:37Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;Introduction to Inquiry, Thinking and Research is an elective course offered to &amp;#039;&amp;#039;&amp;#039;Second Year Non Electrical Branch&amp;#039;&amp;#039;&amp;#039; students of COEP in the odd semester &amp;#039;&amp;#039;&amp;#039;2014&amp;#039;&amp;#039;&amp;#039;.   The course aims at fostering very important skills of &amp;quot;inquiry&amp;quot; among budding engineers, to nurture their personality and engineering acumen.   = Course Advertisement = Advertisement  = FAQ = == Is it related to my branch? == Yes. It is related to all branches. Inquiry is a part of each...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Introduction to Inquiry, Thinking and Research is an elective course offered to &#039;&#039;&#039;Second Year Non Electrical Branch&#039;&#039;&#039; students of COEP in the odd semester &#039;&#039;&#039;2014&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The course aims at fostering very important skills of &amp;quot;inquiry&amp;quot; among budding engineers, to nurture their personality and engineering acumen. &lt;br /&gt;
&lt;br /&gt;
= Course Advertisement =&lt;br /&gt;
[[File:Ad2.png|Advertisement]]&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
== Is it related to my branch? ==&lt;br /&gt;
Yes. It is related to all branches. Inquiry is a part of each discipline of science and engineering. &lt;br /&gt;
&lt;br /&gt;
== Is this course only for those who want to do research ? ==&lt;br /&gt;
No. It will definitely help greatly to those want to do research, however knowing the process of inquiry is important for any good engineer. It will help you solve the real life practical problems better. &lt;br /&gt;
&lt;br /&gt;
== What is this course all about? ==&lt;br /&gt;
The course will  not give you &amp;quot;new knowledge&amp;quot; or test your existing knowledge. This is a unique course, designed to &amp;quot;create abilities&amp;quot; and &amp;quot;test abilities&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Science has evolved historically because of the naturally curious nature of human beings. The process of discovering new knowledge starts with asking basic, fundamental questions about things around us. The process of seeking answers also involves making rational arguments, gathering and presenting facts, creating statistics, doing some mathematics, creatively thinking new theories, etc. This is common to all branches of knowledge.&lt;br /&gt;
&lt;br /&gt;
This course is about developing the skill of inquiry through a series of &#039;&#039;&#039;informal discussions among students, Prof. Mohanan, faculty members, some scientists, historians, mathematicians, etc&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Isn&#039;t it a final year or M.Tech. elective offered to second year students by mistake ? ==&lt;br /&gt;
Absolutely no. Experience with school children with the same course has been fantastic. See https://www.youtube.com/channel/UCApqaCflm3mVTnfh9VBfAPg&lt;br /&gt;
&lt;br /&gt;
== Does it involve lot of knowledge about Physics? ==&lt;br /&gt;
No. The course is being shown offered by Physics department only for the technical purpose of being listed under some department. The course content is generic for all fields of knowledge. Problems of physics may be discussed in the course as part of general discussions about inquiry.&lt;br /&gt;
&lt;br /&gt;
== Do I need to be a 9 pointer to opt for this course? ==&lt;br /&gt;
Absolutely  No. However you should have a genuine interest in knowing about inquiry  and research. You should be willing to put in the efforts expected by the instructors.&lt;br /&gt;
&lt;br /&gt;
== The Syllabus has a long list of reference books. I am scared. ==&lt;br /&gt;
You will have to,read the material prescribed in the class, which may include some articles, papers, small books, etc. The list given in syllabus is list of reference books, for those who want to venture more and increase the depth of understanding. Knowing more always helps. However the course does not assume you to have read these books or will read all these books.  &lt;br /&gt;
&lt;br /&gt;
== How does it help in my career? Will it get me a better job? ==&lt;br /&gt;
Yes. Being a good inquirer helps in all domains of knowledge.&lt;br /&gt;
&lt;br /&gt;
== I Want to know more. Where do I go? == &lt;br /&gt;
Have a look at these videos on youtube: [https://www.youtube.com/channel/UCApqaCflm3mVTnfh9VBfAPg K P Mohanan&#039;s Scied Youtube Channel]&lt;br /&gt;
&lt;br /&gt;
== My question has not been answered here. What should I do? ==&lt;br /&gt;
Contact Prof. Abhijit on &amp;quot;abhijit . comp @ coep . ac . in&amp;quot; or call him on +91 9422308125.&lt;br /&gt;
&lt;br /&gt;
=Session 4 (Non Mohanan Session)(What was Done in the session)=&lt;br /&gt;
The session was conducted by Abhijit as Mohanan was unable to conduct the lecture.&lt;br /&gt;
&lt;br /&gt;
The Session began with the problems of the students, which mainly revolved around the CoEP Wiki editing and what we are supposed to do on wiki.&lt;br /&gt;
      &lt;br /&gt;
Then we moved on to revising the various types of inquiry we discussed in class starting from mathematical inquiry(definition of straight line and circle), the pragmatic inquiry(definition of success) and then moved to conceptual inquiry(what is a solid?). We finally  discussed about the assignment which was given to the students.We had a short debate about Heliocentric theory and geocentric theory.&lt;br /&gt;
&lt;br /&gt;
We also discussed a more of a bit about the caste system and the definition of caste in today&#039;s sense, and finally the definition given by Abhijit had no counter-arguments and was  the end of the session. The definition of Caste was &#039;&#039;&#039; A closed group of people bound together by marriage relations&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=DNS_server_Project&amp;diff=12</id>
		<title>DNS server Project</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=DNS_server_Project&amp;diff=12"/>
		<updated>2025-08-12T13:29:16Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==Connection Timeout== The timeout set by the user can be set in the code using &amp;#039;&amp;#039;.timeout()&amp;#039;&amp;#039; function for the socket variable.  ==ptr Query Type== Reverse DNS lookups use the special domain &amp;#039;&amp;#039;in-addr.arpa&amp;#039;&amp;#039; for IPv6 and &amp;#039;&amp;#039;ip6.arpa&amp;#039;&amp;#039; for IPv6. For reverse queries, the IP address in the query must be reversed and the respective domain must be appended to it before sending the  query to the server. For converting the IP addresses to their expanded form &amp;#039;&amp;#039;.exploded&amp;#039;&amp;#039; from...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Connection Timeout==&lt;br /&gt;
The timeout set by the user can be set in the code using &#039;&#039;.timeout()&#039;&#039; function for the socket variable.&lt;br /&gt;
&lt;br /&gt;
==ptr Query Type==&lt;br /&gt;
Reverse DNS lookups use the special domain &#039;&#039;in-addr.arpa&#039;&#039; for IPv6 and &#039;&#039;ip6.arpa&#039;&#039; for IPv6. For reverse queries, the IP address in the query must be reversed and the respective domain must be appended to it before sending the  query to the server. For converting the IP addresses to their expanded form &#039;&#039;.exploded&#039;&#039; from the &#039;&#039;ipaddress&#039;&#039; library can be used&lt;br /&gt;
&lt;br /&gt;
==DNS Cache==&lt;br /&gt;
The DNS server cache can be implemented in the form of a text file containing a list of tuples storing query, response, time to live(ttl) and entry time. The entry time can be easily found using the &#039;&#039;time&#039;&#039; module. When the server program is run, the expired entries can be deleted before accepting queries from the client. Before sending an entry from the cache to the client, the ttl must be verified once so as not to send an expired entry. Only if the answer is not found in the cache, the server should send a query to further servers(hence the server acts a both, a server and a client).&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Bittorrent_Client&amp;diff=11</id>
		<title>Bittorrent Client</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Bittorrent_Client&amp;diff=11"/>
		<updated>2025-08-12T13:29:00Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;Bittorrent Tips,Tricks and FAQs.  == Overview ==  Here is an overview of the process involved in creating a torrent client.   * Parse torrent file.  * Connect to tracker. * Ask for list of peers. * Connect to peer. * Request for piece from peer (Most peers send bitfield and/or have messages when you connect for the first time, more on this later.) * Authenticate piece. * Save piece to file.  &amp;#039;&amp;#039; Note: If the piece is large, then you are supposed to first request for a blo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bittorrent Tips,Tricks and FAQs.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Here is an overview of the process involved in creating a torrent client. &lt;br /&gt;
&lt;br /&gt;
* Parse torrent file. &lt;br /&gt;
* Connect to tracker.&lt;br /&gt;
* Ask for list of peers.&lt;br /&gt;
* Connect to peer.&lt;br /&gt;
* Request for piece from peer (Most peers send bitfield and/or have messages when you connect for the first time, more on this later.)&lt;br /&gt;
* Authenticate piece.&lt;br /&gt;
* Save piece to file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Note: If the piece is large, then you are supposed to first request for a block (basically a part of the piece). Once you receieve all the blocks of a piece, you can authenticate and save to file. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parsing torrent files ==&lt;br /&gt;
&#039; Note: Some sources refer to the torrent file as the &amp;quot;Metainfo File&amp;quot;. They are the same thing. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All torrent files are bencoded. Read more about bencoding [https://en.wikipedia.org/wiki/Bencode here].&lt;br /&gt;
A python module to help with this is [https://pypi.org/project/bencode.py/ bencode.py].&lt;br /&gt;
If you are doing your project in JS, then [https://www.npmjs.com/package/bencode this] npm library will come handy to parse bencoded files.&lt;br /&gt;
&lt;br /&gt;
You need to get all the important information like list of trackers, file names, file paths, file sizes, piece length. So, the keys of interest are &#039;info&#039;, &#039;announce&#039; and &#039;announce-list&#039;. While the &#039;announce&#039; key is a mandatory part of the format of the torrent file, the &#039;announce-list&#039; is not part of the official specification, but an optional extension. Even so, I would recommend checking for its presence and including those additional tracker URLs in the tracker list also. Since some trackers turn out to be unresponsive, a list of alternatives comes in handy.&lt;br /&gt;
&lt;br /&gt;
*Info Dictionary structure&lt;br /&gt;
This is a dictionary that we use to understand the structure of the actual file that the torrent file is created for. The format is different for single-file torrents versus multi-file torrents, as described [[https://wiki.theory.org/BitTorrentSpecification#Info_Dictionary|here]]. It is useful to understand [[Bittorrent_Client#Making_Torrent_Files|how multi-file torrents are built]] when using the information gathered from the info dictionary of a multi-file torrent. &lt;br /&gt;
&lt;br /&gt;
As described [[https://wiki.theory.org/BitTorrentSpecification#Info_in_Multiple_File_Mode|here]], the value of the &#039;path&#039; key in each of the dictionaries in the &#039;files&#039; list in the Info dictionary of a multi-torrent file is a bencoded list of strings specifying the path and file name for that file. The list does not include the name of the top level directory being shared, but paths starting at directories/files within it.&lt;br /&gt;
&lt;br /&gt;
== Connecting to trackers ==&lt;br /&gt;
There is a well defined process to connect to a tracker, and it is fairly simple. Here is a link that tells you all about [http://bittorrent.org/beps/bep_0015.html UDP trackers] (which are most commonly used) and another one for [https://wiki.theory.org/BitTorrentSpecification#Tracker_HTTP.2FHTTPS_Protocol HTTP/HTTPS].&lt;br /&gt;
&lt;br /&gt;
You are mainly interested in connect and announce requests, so you can skip the scrape request section.&lt;br /&gt;
&lt;br /&gt;
Tracker gives a list of peers we can connect to. This list of peers can be either compact or non-compact.&lt;br /&gt;
Compact version gives ip and port number of the peer in (4 + 2) bytes. Hence, for a list of n peers, there will be 6n bytes in the tracker response for peer list.&lt;br /&gt;
If it gives a non-compact response, the peer id will also be included. The peer id given by the tracker is usually a character string of 20 byte length, like &#039;-AB0707-0a1kf7aDTbLO&#039;. However, I found in my testing that occasionally, the peer id is a UTF-8 encoded bytes object. Both cases need to be taken into account while authenticating the handshake later, as a type mismatch will cause a problem.&lt;br /&gt;
For compact responses, the peer id of the peer can be obtained by slicing the handshake response of the peer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Important: In my testing, there were many cases where trackers did not respond (could be due to any reason), so do not fret over it. Try to connect to all the trackers given in the file and you will get one that responds, assuming your request format is correct.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Also, important to note that there are several fields in announce request which are dynamic like - left etc. which keep on changing while you are downloading, so make sure to update them in subsequent tracker announce request messages! I figured it quite late&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Peer States ==&lt;br /&gt;
According to the [https://wiki.theory.org/index.php/BitTorrentSpecification#Peer_wire_protocol_.28TCP.29 Peer Wire Message](PWM) Protocol, every peer maintains its state which facilitates the exchange of pieces among other peers. The BitTorrent client maintains the states as given below&lt;br /&gt;
* &#039;&#039;&#039;am_choking&#039;&#039;&#039;: this client is choking the peer&lt;br /&gt;
* &#039;&#039;&#039;am_interested&#039;&#039;&#039;: this client is interested in the peer&lt;br /&gt;
* &#039;&#039;&#039;peer_choking&#039;&#039;&#039;: peer is choking this client&lt;br /&gt;
* &#039;&#039;&#039;peer_interested&#039;&#039;&#039;: peer is interested in this client&lt;br /&gt;
&lt;br /&gt;
Any block or piece can only be downloaded by the client only if the client is interested and peer is not choking the client and similarly we can infer that block or piece can be uploaded by the client only if the peer is interested in the client and the client is not choking the peer. Note that when client is choked by the peer the client requests to the peer will be rejected and client needs to wait until unchoke message is given by peer. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: In my testing, sometimes I used to get choke message after receiving certain pieces and even after initial handshake, since BitTorrent client protocol works on tit for tat strategies. Also sometimes keep alive messages are given by the peer indicating to keep connection open for some more time. So in order to handle all such cases one try developing Finite State Machine. Interpreting the  client states, we can design an Finite State Machine for client to download or upload. The downloading FSM given  [https://linkpicture.com/q/downloading_state_diagram.png here] can give you any idea, however it is not complete to handle all cases. The approach I found useful was to identify every message received by looking at the 5th byte of the message that gives the message id(exception-keepalive). Then look at the length of the payload(first 4 bytes network-order packed integer) and only receive those many bytes ahead. That lets you avoid the mess of finding the end of a received message in your buffer and receiving messages broken into parts. Refer this [[https://wiki.theory.org/BitTorrentSpecification#Messages|specification]] for the unique format of every type of message.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Connecting to peers ==&lt;br /&gt;
Now we are entering the main part of the protocol. Once you have the list of peers from the tracker, you have to open a tcp connection with them. After you have done this, you will enter the handshake stage.&lt;br /&gt;
&lt;br /&gt;
=== Handshake ===&lt;br /&gt;
The format for handshake can be seen [https://wiki.theory.org/BitTorrentSpecification#Handshake here]. Please follow the conventions for peer id, I did not do this and faced a lot of problems. Just like trackers, peers also may not respond to handshakes, and this is fairly common, all one can do is keep trying.&lt;br /&gt;
&lt;br /&gt;
In addition to authenticating the infohash in the reply handshake, we also need to verify that the peer id received in the reply handshake is the same as the peer id given by the tracker for that IP and port. Note the possible types for the peer id as pointed out [[Bittorrent Client#Connecting to trackers|in this section]].&lt;br /&gt;
&lt;br /&gt;
A successful handshake response usually (According to my testing, 8/10 times) includes bitfield or have messages at the end of the handshake. &lt;br /&gt;
&lt;br /&gt;
=== Bitfield ===&lt;br /&gt;
Peers which include a bitfield are being very helpful to us, as they are giving us all the information we need very conveniently. However, there is a huge disparity between peers sending bitfield and have messages.&lt;br /&gt;
&lt;br /&gt;
According to this [https://wiki.theory.org/BitTorrentSpecification#bitfield:_.3Clen.3D0001.2BX.3E.3Cid.3D5.3E.3Cbitfield.3E website], bitfields are sent immediately after the handshake, but I have noticed something entirely different in my testing. The peers were sending the bitfield as one of the below methods (this may not be an exhaustive list!):&lt;br /&gt;
&lt;br /&gt;
* Bitfield length, Bitfield id and bitfield all appended to the end of the handshake.&lt;br /&gt;
* Bitfield length, Bitfield id appended at end of handshake and bitfield sent in the next message.&lt;br /&gt;
* All 3 sent in the message right after the handshake.&lt;br /&gt;
* One of the above, followed by a variable amount of [https://wiki.theory.org/BitTorrentSpecification#have:_.3Clen.3D0005.3E.3Cid.3D4.3E.3Cpiece_index.3E have messages] appended to the message.&lt;br /&gt;
&lt;br /&gt;
A reasonable sequence of messages to expect would be-&lt;br /&gt;
1. P1(initiator wishing to download) sends handshake to P2.&lt;br /&gt;
2. P2 sends reply handshake.&lt;br /&gt;
3. P2 sends bitfield and/or have(s).&lt;br /&gt;
4. P1 sends interested message.&lt;br /&gt;
5. P2 sends unchoke.&lt;br /&gt;
6. P1 sends requests for one block at a time until choked by P2 or until download is complete.&lt;br /&gt;
7. P2 sends the requested blocks to P1 until it decides to choke P1 or until requests stop or P1 sends &#039;not interested&#039; message.&lt;br /&gt;
&lt;br /&gt;
Note that this is not necessarily how every exchange would go, but simply a typical ideal scenario.&lt;br /&gt;
&lt;br /&gt;
An important thing to note is bitfield length is always in multiples of 8.&lt;br /&gt;
Hence, say if number of pieces is 5, and the peer sends occurrence of all pieces it has in the bitfield, then the last 3 buts (8 - 5) are extra. These extra bits have to be zero because these pieces do not exist. If any of these extra bits is 1, then that means the peer has sent an invalid bitfield. &lt;br /&gt;
&lt;br /&gt;
To observe this by yourself, run wireshark when you have reached this stage and analyse the responses of peers to your handshake.&lt;br /&gt;
&lt;br /&gt;
=== Interested ===&lt;br /&gt;
Once you have completed the handshake, send an [https://wiki.theory.org/BitTorrentSpecification#interested:_.3Clen.3D0001.3E.3Cid.3D2.3E interested] message, and usually(but not necesarily) the peer will [https://wiki.theory.org/BitTorrentSpecification#unchoke:_.3Clen.3D0001.3E.3Cid.3D1.3E unchoke] you.&lt;br /&gt;
&lt;br /&gt;
=== Piece Request ===&lt;br /&gt;
You have made it to the last part of the downloading process. You have to now request a piece from the peer. This topic is disputed, as observable on [https://wiki.theory.org/BitTorrentSpecification#request:_.3Clen.3D0013.3E.3Cid.3D6.3E.3Cindex.3E.3Cbegin.3E.3Clength.3E this page].&lt;br /&gt;
&lt;br /&gt;
The format of the request is fixed, however this dispute is regarding the acceptable piece size for a piece request. Note that piece length of a torrent can vary. A torrent file usually contains 1500 pieces atmost, which means for larger torrents, piece sizes can be pretty big. Thus, pieces are further broken down into blocks. When you are sending a &amp;quot;piece request&amp;quot;, you are not exactly requesting for a piece, rather you are requesting for a block. The block size could be less than or equal to the piece size.&lt;br /&gt;
&lt;br /&gt;
Since the page is not very clear about what size to follow, you can experiment by yourself and find out. However the piece size that worked for me in almost all cases is 2^14 bytes, which is 16384 bytes. This size was also recommended by [http://www.kristenwidman.com/blog/71/how-to-write-a-bittorrent-client-part-2/ this source].&lt;br /&gt;
&lt;br /&gt;
In some cases, if the file length is not divisible by the piece length, the piece length of the last piece may be different for the rest. Including a check for the last piece is useful.&lt;br /&gt;
&lt;br /&gt;
Since you are requesting a block that can be quite small compared to the piece length, you may have multiple blocks. Keep in mind that when you request for the last block of the piece, the size may not be 16384 bytes, but lesser. This depends on whether your piece length is divisible by 16384.&lt;br /&gt;
&lt;br /&gt;
Applying the same logic as above, the last piece also may not be the same size as the other pieces, so it is essential you address this in your program.&lt;br /&gt;
&lt;br /&gt;
== Saving to File ==&lt;br /&gt;
Once you have all the blocks of a piece, it is important you save that piece to the file, as you cannot keep all the pieces of a file unsaved, it would eat up a huge amount of your RAM.&lt;br /&gt;
&lt;br /&gt;
It is recommended that you test out the entire process with a single peer first, and once this is done, you can use multithreading to connect to multiple peers at the same time. For this section, I will assume you have included multithreading in your program.&lt;br /&gt;
&lt;br /&gt;
Now that you have the piece, you can calculate its SHA1 hash. &lt;br /&gt;
Calculating the hash can be tricky. For each response of a block request, the response will have around first 13 bytes as header field. Check if the requested block offset is same as the received block offset. If they match, exclude the first 13 bytes a that is the header of the block response. The part from index 13 is the actual payload. Append the payloads of all such block responses. Then, calculate the sha1 hash of all these bytes appended.&lt;br /&gt;
 &lt;br /&gt;
Once you have done this, compare it to the hash value in your torrent file. The hash values of all pieces are saved as a long string in the file, so you need to go to the index of the piece that you currently have. This can be calculated as &#039;&#039;20*index value&#039;&#039; as SHA1 hashes have 20 characters. If the hash values match, you can save this piece, or else you need to discard it.&lt;br /&gt;
&lt;br /&gt;
Now you need to think about how you will maintain the accuracy of the file. As the program is multithreaded, you can have multiple threads attempting to access this file. For this purpose, you may consider using [http://effbot.org/zone/thread-synchronization.htm locks].&lt;br /&gt;
&lt;br /&gt;
Once you have acquired the lock, open file in binary mode, seek to the part of the file you need (piece index * piece length) and write the piece. Voilà, you have succesfully downloaded a piece of the file.&lt;br /&gt;
&lt;br /&gt;
*Working with multi file torrents&lt;br /&gt;
&lt;br /&gt;
Working with multifile torrents can be a bit tricky.As when the torrent file is built up, bytes in all the files will be appended one after another and then pieces are constructed and hashes calculated. So it can be a bit tricky to deal when a piece arrives. So, a piece can spread across multiple files together. In that case, you have to be very careful while saving the correct number of bytes in correct files.&lt;br /&gt;
This looks trivial to listen but can be catchy when the files are also of few bytes and a single piece can cover many files, so in that case, you have to write many files togther for a piece.&lt;br /&gt;
&lt;br /&gt;
== Making Torrent Files ==&lt;br /&gt;
&lt;br /&gt;
Before making torrent file, the structure of the file should be clear.There is a good reading resource [https://en.wikipedia.org/wiki/Torrent_file here] which explains the file structure of torrents quite well.&lt;br /&gt;
&lt;br /&gt;
A torrent file is a bencoded dictionary. The dictionary has fields like info, announce,announce list creation date, created by etc.&lt;br /&gt;
Beginning with announce, the announce containes the URL of the primary tracker to which peers connect.Announce list is the list of alternate trackers.&lt;br /&gt;
Info is the most important key. It contains information of various files - thier name and sizes, piece length, pieces etc.&lt;br /&gt;
&lt;br /&gt;
For a single file torrent, name field is the name of the file itself while for multifile torrents, it is the name of the directory being shared.&lt;br /&gt;
Similarly, for length field is only present in single file torrents depicting the length of file in bytes. For multifile torrents, files field has a list of files. Each entry of the list is in turn a dictionary with 3 fields - &#039;length&#039;, &#039;md5sum&#039;(you can ignore this one) and &#039;path&#039;.&lt;br /&gt;
&lt;br /&gt;
* Making pieces&lt;br /&gt;
&lt;br /&gt;
Prior to this step, you have to decide the piece length which is commonly used as 256 KiB but there is a lot of controversy on this point. Piece length should be chosen optimally so that the torrent files don&#039;t become so large and also the pieces should not be so large to be able to download after a lot of blocks.&lt;br /&gt;
&lt;br /&gt;
Aftter deciding piece length, if it is single file torrent, then just read the file and divide the file into segements each of size piece length.The last piece will be smaller than the piece length.&lt;br /&gt;
Now calculate SHA1 hash of each piece which is a 160 Bit or 20KB value. The hashes are appended one after another to make up pieces field of info.&lt;br /&gt;
&lt;br /&gt;
In case of multiple files,just read and append multiple files one after another to make up a single large byte sequence and perform the same actions as for singlr file. The total length in bytes is the sum of the values of the &#039;length&#039; key for every file. Its interesting to note that the entire structure of the folder( multifiles) is depicted in the files list of info value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: For multi-file torrents, the complete byte sequence is treated as if it were a single file and pieces are made from the entire byte sequence AFTER the concatenation. So, piece boundaries are not at all sensitive to the original file boundaries and pieces may stretch over multiple files. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important Point: All strings must be UTF-8 encoded, except for pieces, which contains binary data. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Seeding across NAT ==&lt;br /&gt;
&lt;br /&gt;
Since your client is deep inside NAT, it is not possible for peers to connect to you directly. For this, we need STUN server to relay the traffic from our local machine to the outside world.&lt;br /&gt;
There is a work around for doing this without implementing STUN server. That is through TCP port forwarding for RAW packets and SSH Tunneling. You will need a remote machine with public IP to listen to requests from outside world on a port, say external port.&lt;br /&gt;
Setup NginX on the remote machine and edit the nginx.conf file in /etc/nginx/ directory. Add the following lines on the top of file below include statements : &lt;br /&gt;
&lt;br /&gt;
 stream {&lt;br /&gt;
  upstream backend {&lt;br /&gt;
  server 127.0.0.1:5000;&lt;br /&gt;
 }&lt;br /&gt;
 server {&lt;br /&gt;
  listen 6887;&lt;br /&gt;
  proxy_pass backend;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
Here 6887 is the port on which NginX server will be listening for requests from outside world.This is the port you need to advertise to the tracker during annouce request. Also, advertise your public IP as the IP of the remote server IP while connecting to the tracker. This will make sure that the peers connect to our server with public IP which will in turn relay packets to our client running on our local machine.&lt;br /&gt;
&lt;br /&gt;
And 5000 is any arbitrarily chosen port on(or from) which we will be forwarding raw TCP packets from outside world.Lets call this relay port.&lt;br /&gt;
&lt;br /&gt;
Now, save and close the file and restart nginx for changes to take place.&lt;br /&gt;
&lt;br /&gt;
Now, move on to local machine where your torrent client is running and fire a command in terminal to start SSH tunnel between the port on which your torrent application is listening for connections (say 6887) and the relay port. &lt;br /&gt;
So the command goes like this - &lt;br /&gt;
&lt;br /&gt;
 ssh -R 5000:localhost:6887 -N username@remote_machine_ip &lt;br /&gt;
&lt;br /&gt;
Where username and ip is of the remote server to which you must have access and ssh server must be runnging on that.&lt;br /&gt;
&lt;br /&gt;
Keep this terminal running.What we achieved is - &lt;br /&gt;
Now the peers will connect to you using the public IP of the remote machine and external port advertised to tracker. NginX will forward the packets to the relay port to which we have established an SSH tunnel to forward those packets to our application.&lt;br /&gt;
&lt;br /&gt;
For detailed guide, head on to [https://vasusharma7.medium.com/relay-tcp-raw-packets-across-nat-97586813042b this] blog post.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips and Resources ==&lt;br /&gt;
&lt;br /&gt;
* In Python, you will be using struct a lot, so read the [https://docs.python.org/2/library/struct.html man page] carefully.&lt;br /&gt;
&lt;br /&gt;
*The os.path module [[https://docs.python.org/3/library/os.path.html]] provides methods that will be useful whenever you need to work with file paths and directory structures.&lt;br /&gt;
&lt;br /&gt;
* For Javascript (Node JS) , use [https://nodejs.org/api/net.html this] for tcp and [https://nodejs.org/api/dgram.html this] for udp connections.&lt;br /&gt;
&lt;br /&gt;
* This [http://www.kristenwidman.com/blog/33/how-to-write-a-bittorrent-client-part-1/ article] helped me a lot in my project.&lt;br /&gt;
&lt;br /&gt;
* Use Wireshark ALL the time. Use the bittorrent filter to see whether your code is working as intended.&lt;br /&gt;
&lt;br /&gt;
* Keep this [https://wiki.theory.org/BitTorrentSpecification page] bookmarked. You will need it all the time.&lt;br /&gt;
&lt;br /&gt;
* Be smart while testing. Use a small sized torrent with large amount of seeders (atleast 300+). To do this, head over to your favourite torrent website (Like ThePirateBay) and go to the ebooks section. Sort the list according to seeders. You will easily find ebooks which are small and have a large amount of seeders. Use an online epub reader to see if your file has downloaded correctly. &#039;&#039;Note: This may be illegal and I am not encouraging you to do this for anything other than educational purposes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Download any torrent on transmission or any other client first, before trying it with your own client. This will not only confirm it is working, it will also give you a completed file, which you can use for comparing your downloaded file.&lt;br /&gt;
* First try to connect to one peer at a time and download your file completely, then move on to multiple peers. If you are confident, you can skip this.&lt;br /&gt;
&lt;br /&gt;
* Messages sent as one from the peer may not arrive as one to you, so keep this in mind. Make sure you are looking for this when interacting with any peer. This is especially true for piece requests.&lt;br /&gt;
* Some peers unchoke right after sending the bitfield, so you need to skip the interested message if you want to download from them. Usually if they have unchoked you already, they may not unchoke you again when you send your interested message.&lt;br /&gt;
&lt;br /&gt;
* Testing the client for seeding, I would recommend to open free account on AWS educate and get EC2 Linux virtual machine and eventually configure the virtual machine to receive TCP traffic on specific ports. Start seeding over the virtual machine however, be careful use the public IP address of our virtual machine and not the private IP address for connecting to seeder, simple reason is the virtual machine will be behind gateway and will be NATed.&lt;br /&gt;
&lt;br /&gt;
* From implenentation point,you can choose between asynchronous programming and multi-threaded programming. NodeJS can also be a good option.It is single threaded and everything is asynchronous by default and also is recommended for network oriented tasks.&lt;br /&gt;
&lt;br /&gt;
* If doing your project in JavaScript, then be cautious of 64 bit integers as JS cannot handle 64 bit integers quite well.So have to write them carefully in torrent requests [https://stackoverflow.com/questions/14730980/nodejs-write-64bit-unsigned-integer-to-buffer This] link helped me a lot in doing so.&lt;br /&gt;
&lt;br /&gt;
* Since you cannot make your torrent client to seed to external world as you are behind the NATed network and don&#039;t have public IP, so for this you can explore TCP port forwarding for raw packets and ssh tunnelling by configuring NginX. This just tries to replicate STUN server functionality.Bit tricky but fun to do.&lt;br /&gt;
&lt;br /&gt;
* The bencodepy library may not directly decode the torrent file for you but there is another library called bcoding which worked for me. Link to the library: https://pypi.org/project/bcoding/&lt;br /&gt;
&lt;br /&gt;
* I noticed that if you try to connect to too many peers or try to establish too many connections using multithreading the client becomes unstable so try to keep less number of maximum peers.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=IMAP_Server_Project&amp;diff=10</id>
		<title>IMAP Server Project</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=IMAP_Server_Project&amp;diff=10"/>
		<updated>2025-08-12T13:28:45Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;== Getting inspiration == Install Alpine or Mutt (email clients) to see how they work.  == Setup == The first thing you need to do is to [https://www.youtube.com/watch?v=zlBFZ0ZY6_c setup] Postfix(Mail Server) and Dovecot(IMAP Server) on your machine.  I would mention one more link for the above mentioned procedure =&amp;gt; [https://www.youtube.com/watch?v=zlBFZ0ZY6_c&amp;amp;t=1266s setup_link_video].  Next [https://wiki.dovecot.org/TestInstallation test] your Dovecot&amp;#039;s installation....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting inspiration ==&lt;br /&gt;
Install Alpine or Mutt (email clients) to see how they work.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
The first thing you need to do is to [https://www.youtube.com/watch?v=zlBFZ0ZY6_c setup] Postfix(Mail Server) and Dovecot(IMAP Server) on your machine.&lt;br /&gt;
&lt;br /&gt;
I would mention one more link for the above mentioned procedure =&amp;gt; [https://www.youtube.com/watch?v=zlBFZ0ZY6_c&amp;amp;t=1266s setup_link_video].&lt;br /&gt;
&lt;br /&gt;
Next [https://wiki.dovecot.org/TestInstallation test] your Dovecot&#039;s installation. If everything&#039;s working well, you&#039;re all set! If not, check whether you did the installation steps correctly and some  [https://www.linode.com/docs/guides/troubleshooting-problems-with-postfix-dovecot-and-mysql/ troubleshooting] will help.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; You can also install other IMAP servers like Courier but Dovecot is fast, lightweight and efficient and hence recommended. Dovecot also supports SSL in case you choose IMAP/SSL. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Note: Check the Dovecot server before running your code. Make this a habit throughout the project development! It is a good practice. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Working ==&lt;br /&gt;
Check out [https://tools.ietf.org/html/rfc3501 IMAP 3501 RFC]. You need not read the document line by line but check the commands and their respective responses. Note that for testing Dovecot installation you used these commands and saw their responses in action. Throughout your working you&#039;ll need to refer these, so keep them bookmarked.&lt;br /&gt;
&lt;br /&gt;
If using Python, you should preferably not use inbuilt libraries like imaplib. Use the socket library for connecting to the IMAP server. Parse the responses which you get after running the commands.&lt;br /&gt;
&lt;br /&gt;
Keep checking Wireshark for IMAP packets if there is some trouble in connections or a bug in code.&lt;br /&gt;
&lt;br /&gt;
For talking witht the Dovecot IMAP server, you can telnet to port 143 at localhost. You can use this to try out various commands by referring  [https://tools.ietf.org/html/rfc3501 IMAP 3501 RFC].&lt;br /&gt;
&lt;br /&gt;
For sending mail you can [https://www.thomas-krenn.com/en/wiki/Test_TCP_Port_25_(smtp)_access_with_telnet telnet to port 25](SMTP).&lt;br /&gt;
&lt;br /&gt;
My recommendation to you would be to first try all the possible commands (that are relevant to your project) by taking reference from [https://tools.ietf.org/html/rfc3501 IMAP 3501 RFC]. First try these commands by telnetting to 127.0.0.1:143 and observe the responses for different scenarios. Then proceed to writing the raw code just to implement all the commands that you learnt! Once you do this, then you can proceed to writing the actual code that is exepcted by the project.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Note: Important alert! This is the problem I faced, whenever you send a message(i.e. a command) to the server make sure your command has a carriage return and line feed (i.e. \r\n) at the end of the command line. If you forget to put that in, then the server won&#039;t send any reply because it couldn&#039;t understand your command at the first place which was due to the absence of \r\n at the end of the command. In case everything is working alright and your configurations of Dovecot are also upto mark, but still you aren&#039;t getting any reply from the IMAP server then please check the status of the Dovecot server by doing running &amp;quot;systemctl status dovecot&amp;quot; as a sudoer&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Tip: Don&#039;t wait for all of the things to get cleared. Just start working with your project, you&#039;ll figure out things as you move on. &#039;&#039;&lt;br /&gt;
&#039;&#039; Tip: Don&#039;t keep searching from help from peers! The best way to get through the project will be you yourself figuring out things. &#039;&#039;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=HTTP_Server_Project&amp;diff=9</id>
		<title>HTTP Server Project</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=HTTP_Server_Project&amp;diff=9"/>
		<updated>2025-08-12T13:28:28Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;==How to have standard HTTP Server Running on Localhost to cross-check your project?==  - Open Terminal  - Navigate to the directory you want to have the root directory.  - Run python -m http.server 8000  - Go to http://127.0.0.1:8000/ ( localhost )   You can perform tests on HTTP server running on localhost from browser or Postman. (depending on you.)   @ Postman: https://www.postman.com/  @ http.server docs : https://docs.python.org/3/library/http.server.html  ==Common...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==How to have standard HTTP Server Running on Localhost to cross-check your project?==&lt;br /&gt;
&lt;br /&gt;
- Open Terminal&lt;br /&gt;
&lt;br /&gt;
- Navigate to the directory you want to have the root directory.&lt;br /&gt;
&lt;br /&gt;
- Run python -m http.server 8000&lt;br /&gt;
&lt;br /&gt;
- Go to http://127.0.0.1:8000/ ( localhost )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can perform tests on HTTP server running on localhost from browser or Postman. (depending on you.)&lt;br /&gt;
&lt;br /&gt;
 @ Postman: https://www.postman.com/&lt;br /&gt;
 @ http.server docs : https://docs.python.org/3/library/http.server.html&lt;br /&gt;
&lt;br /&gt;
==Common guidelines for reading and interpreting the RFC&#039;s==&lt;br /&gt;
&lt;br /&gt;
Backus Naur Normal Form will be followed to describe all headers.&lt;br /&gt;
&lt;br /&gt;
Some examples of the following are:&lt;br /&gt;
&lt;br /&gt;
1. HTTP-VERSION = &amp;quot;HTTP&amp;quot; &amp;quot;/&amp;quot; 1*DIGIT &amp;quot;.&amp;quot; 1*DIGIT&lt;br /&gt;
&lt;br /&gt;
2. http_URL = &amp;quot;http:&amp;quot; &amp;quot;//&amp;quot; host [ &amp;quot;:&amp;quot; port ] [ abs_path [ &amp;quot;?&amp;quot; query ]]&lt;br /&gt;
&lt;br /&gt;
3. Content-Encoding = gzip | deflate | compress | identity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The literature here is similar to the grammar that have been studied in Theory of Computation.&lt;br /&gt;
Pay attention to the keywords that are applied with each description.&lt;br /&gt;
&lt;br /&gt;
==How to render images (or similar files) on browser ?==&lt;br /&gt;
&lt;br /&gt;
1. Divide response in two categories :&lt;br /&gt;
 Response headers(must end with blank line)&lt;br /&gt;
 Response body&lt;br /&gt;
&lt;br /&gt;
2. Set content-type (response header) accordingly (e.g. image/jpeg for .jpeg image). You may want to check this out: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types&lt;br /&gt;
&lt;br /&gt;
3. Set content-length (response header). You can use os.path.getsize() for this purpose.&lt;br /&gt;
&lt;br /&gt;
4. Read file as &#039;rb&#039; (response body)&lt;br /&gt;
&lt;br /&gt;
5. Response header is a string so after you created all necessary response headers encode them.&lt;br /&gt;
&lt;br /&gt;
6. Response body is nothing but file read in &#039;rb&#039; which is &#039;bytes&#039; object, so do not encode it.&lt;br /&gt;
&lt;br /&gt;
7. Now add response headers and response body and send together conn.send(response_headers+response_body) OR you can send them one after another&lt;br /&gt;
&lt;br /&gt;
==Some Useful Locations of Apache==&lt;br /&gt;
* &#039;&#039;&#039;/var/www/html/&#039;&#039;&#039; - The Document Root of apache for adding HTML pages or files for making requests.&lt;br /&gt;
* &#039;&#039;&#039;/etc/apache2&#039;&#039;&#039; - The Directory with all the configuration files of apache most important being apache2.conf&lt;br /&gt;
* &#039;&#039;&#039;/var/log/apache2/&#039;&#039;&#039; - The Directory with log-files of apache &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to look at requests sent by various HTTP Clients==&lt;br /&gt;
* Web Browsers&lt;br /&gt;
1. Enter the developer console window of your browser (Mostly by pressing F12).&lt;br /&gt;
&lt;br /&gt;
2. Switch to the Network tab of the console. It will start recording network activities.&lt;br /&gt;
&lt;br /&gt;
3. Visit a webpage(or localhost, for that matter) to send a get request to the server.&lt;br /&gt;
&lt;br /&gt;
4. A few logs will be displayed. Click on the very first log entry. You will say multiple tabs (response, headers, etc.)&lt;br /&gt;
&lt;br /&gt;
5. You will get every single detail of your request. (Click on &#039;view source&#039; to look at the raw text-based http request sent by browser)&lt;br /&gt;
&lt;br /&gt;
*Postman&lt;br /&gt;
1. In the postman window, open the console. (View -&amp;gt; Postman console; Alt+Ctrl+C; small console icon at bottom left)&lt;br /&gt;
&lt;br /&gt;
2. Send a request to your server. It will be logged on the console.&lt;br /&gt;
&lt;br /&gt;
3. Expand the request to see all details. (Click on &#039;show raw log&#039; to look at the raw text-based http request)&lt;br /&gt;
&lt;br /&gt;
==Working with Status Codes==&lt;br /&gt;
* &#039;&#039;&#039;403 Forbidden&#039;&#039;&#039;  - &lt;br /&gt;
This status code indicates that the server understood the request but refuses to authorize it.&lt;br /&gt;
To implement it you will have to check file permissions on the requested resource(filename) using the &#039;&#039;&#039;os&#039;&#039;&#039; library.  &lt;br /&gt;
If it doesn&#039;t have the required permissions, we set the status code to 403.&lt;br /&gt;
For example: &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Request&#039;&#039;&#039;&lt;br /&gt;
  GET /try.html HTTP/1.1&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;&lt;br /&gt;
  HTTP/1.1 403 Forbidden&lt;br /&gt;
  Date: Sun, 08 Nov 2020 13:31:51 GMT&lt;br /&gt;
  Server: Apache/2.4.41 (Ubuntu)&lt;br /&gt;
  Last_Modified: Wed,  Nov 18:47:18 4 GMT&lt;br /&gt;
  Accept-Ranges: bytes&lt;br /&gt;
  Content-Type: text/html&lt;br /&gt;
  Content-Length: 257&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;403 Forbidden vs 401 Unauthorized&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
401 Unauthorized is similar to 403 Forbidden, but it is used when authentication is required and it has failed.&lt;br /&gt;
&lt;br /&gt;
References: [https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Some Useful Libraries==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;datetime&#039;&#039;&#039; - Used in inter-conversion of date and time in different formats for header fields and some status codes. Reference - https://www.dataquest.io/blog/python-datetime-tutorial/  &lt;br /&gt;
* &#039;&#039;&#039;pytz&#039;&#039;&#039; - Used to get the timezone in GMT. Reference - https://www.geeksforgeeks.org/get-current-time-in-different-timezone-using-python/&lt;br /&gt;
* &#039;&#039;&#039;logging&#039;&#039;&#039; - Used for creating a log file with custom formats and levels of logging. Reference - https://docs.python.org/3/howto/logging.html &lt;br /&gt;
* &#039;&#039;&#039;threading&#039;&#039;&#039; - Used for Multi-threading. Reference - https://realpython.com/intro-to-python-threading/&lt;br /&gt;
* &#039;&#039;&#039;requests&#039;&#039;&#039; - Used for making HTTP requests through your server for testing your code. Reference - https://realpython.com/python-requests/&lt;br /&gt;
* &#039;&#039;&#039;os&#039;&#039;&#039; - Used for various file permissions and handling purposes. Reference - https://www.geeksforgeeks.org/os-module-python-examples/&lt;br /&gt;
* &#039;&#039;&#039;base64&#039;&#039;&#039; - Used for decoding username and password available in the Authorization header. Reference - https://www.geeksforgeeks.org/encoding-and-decoding-base64-strings-in-python/&lt;br /&gt;
* &#039;&#039;&#039;mimetypes&#039;&#039;&#039; - Used to guess the mime type of a file in Python. References -&lt;br /&gt;
 - https://docs.python.org/3/library/mimetypes.html &lt;br /&gt;
 - https://www.tutorialspoint.com/How-to-find-the-mime-type-of-a-file-in-Python&lt;br /&gt;
* &#039;&#039;&#039;uuid&#039;&#039;&#039; - Helps in generating random objects of 128 bits as ids. Reference - https://www.geeksforgeeks.org/generating-random-ids-using-uuid-python/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Some Useful Resources to get started==&lt;br /&gt;
&lt;br /&gt;
* [https://tools.ietf.org/html/rfc2616 RFC-2616]&lt;br /&gt;
* [https://tools.ietf.org/html/rfc7231 RFC-7231]&lt;br /&gt;
* [https://developer.mozilla.org/en-US/docs/Web/HTTP MDN HTTP Docs]&lt;br /&gt;
* [https://bhch.github.io/posts/2017/11/writing-an-http-server-from-scratch/ Basics of creating a HTTP Server]&lt;br /&gt;
* [https://realpython.com/intro-to-python-threading/ Mulithreading References]&lt;br /&gt;
* [https://www.dotcom-tools.com/web-server-performance-test.aspx Server Testing Tools]&lt;br /&gt;
&lt;br /&gt;
==Socket programming as a prerequisite==&lt;br /&gt;
&lt;br /&gt;
A basic explanation of socket and socket options:&lt;br /&gt;
* [https://docs.python.org/3/library/socket.html Socket module in python]&lt;br /&gt;
* [https://stackoverflow.com/questions/14388706/how-do-so-reuseaddr-and-so-reuseport-differ Port and address reusability]&lt;br /&gt;
&lt;br /&gt;
The TCP client-server assignment done as a part of the CN course provides a good base when it comes to socket programming in python. Make sure that the multithreaded TCP server implementation covers all the basic functionalities before actually teaching the TCP server how to use the HTTP protocol. Immediate port and address reusability is a required functionality in the project implementation. If you working on the project across operating systems i.e. Linux and Windows, then different implementations and socket APIs must be taken into account and exceptions should be made accordingly. Look into SO_REUSEADDR and SO_REUSEPORT and how and when socket connections are to be made and closed. Initially you might encounter several socket errors and exceptions while integrating multithreading, but make sure that this part is covered so that it will provide a strong foundation for HTTP implementation.&lt;br /&gt;
&lt;br /&gt;
==Logs Implementation==&lt;br /&gt;
&lt;br /&gt;
* Refer https://httpd.apache.org/docs/2.4/logs.html this official site of apache.&lt;br /&gt;
* If you have apache installed on your device then analyze the format of var/log/apache2/access.log and var/log/apache2/error.log with the format in the website.&lt;br /&gt;
* You will get Idea of how to implement.&lt;br /&gt;
&lt;br /&gt;
Two types of logs:&lt;br /&gt;
1. Access logs =&amp;gt; Keeps track of all the access requests made to the web server and the servers response to those requests&lt;br /&gt;
&lt;br /&gt;
2. Error logs =&amp;gt; Keeps a track of the errors encountered during any request response cycle and in general keeps track of the state of the server&lt;br /&gt;
&lt;br /&gt;
Common format of a log file:&lt;br /&gt;
&lt;br /&gt;
1. %&amp;gt;s HTTP status code for a request&lt;br /&gt;
&lt;br /&gt;
2. %U URL of the specified resource&lt;br /&gt;
&lt;br /&gt;
3. %a IP address of the client&lt;br /&gt;
&lt;br /&gt;
4. %T Time required to make the request&lt;br /&gt;
&lt;br /&gt;
5. %t Timestamp either in RFC 1123/1036/ANSI C time format&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Decide on a specified format that is read from the config file of the server.&lt;br /&gt;
Essentially keep two levels of logging =&amp;gt; One for the access and the other for the errors like apache2&lt;br /&gt;
&lt;br /&gt;
Also apache has an automatic log compressor that compresses the log file after a certain limit. Can add that to store old logs in a compressed format. &lt;br /&gt;
&lt;br /&gt;
==Cookies Implementation==&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies HTTP MDN Cookies]&lt;br /&gt;
* [https://tools.ietf.org/html/rfc6265 RFC-2625 State Management Mechanism]&lt;br /&gt;
&lt;br /&gt;
An HTTP cookie (web cookie, browser cookie) is a small piece of data that a server sends to the user&#039;s web browser. The browser may store it and send it back with later requests to the same server. Typically, it&#039;s used to tell if two requests came from the same browser — keeping a user logged-in, for example. It remembers stateful information for the stateless HTTP protocol.&lt;br /&gt;
It is mainly used for 3 purposes: Session Management, Personalization and Tracking.&lt;br /&gt;
Cookies are stored on the user&#039;s computer by the browser. Same cookies are not shared between browsers, but they may be used for tracking your activity across different browsers on a single computer e.g. Session Cookie which signifies the start and end of a specific session.&lt;br /&gt;
Cookies set by a certain website can be checked in Chrome DevTools or Firefox developer console. They are typically stored as a name-value pair.&lt;br /&gt;
&lt;br /&gt;
For a basic implementation of Cookies in your HTTP server:&lt;br /&gt;
The server should return a Set-Cookie header in the response which contains the cookie name-value pair. A cookie has several attributes as defined in the RFC like the Expires attribute which defines the time period after which the cookie will expire and the server will have to include the Set-Cookie header again, the Domain attribute which specifies all the hosts to which the cookie will be sent. An existing cookie value can be deleted by setting the Expires attribute to a date in the past. &lt;br /&gt;
As the user-agent(typically a browser) handles cookies on the client side, the server only needs to make sure that the Set-Cookie header is included in the response if the Cookie header is not included in the request. The cookie name and attributes can be specified in the config file of the server so that the cookie value can simply be set as a uuid. &lt;br /&gt;
&lt;br /&gt;
For further reference: (Not related to project implementation) There are several YouTube videos on authorization using cookies vs web tokens and its impact on security.&lt;br /&gt;
&lt;br /&gt;
==Server Configuration==&lt;br /&gt;
&lt;br /&gt;
The project expectation is to build an Apache-like server with some of its important functionalities. Apache server configuration by specifying configuration details in a config file like apache2.conf. Be sure to actually install apache2 in your system and explore it&#039;s file hierarchy and how basic configuration is done to get started. The config file contains important configurations like Document Root, Server name and other configs like cookies. The main functionality that the server code should provides whn it comes to the config file is parsing and setting the necessary specified configurations. Added support for comments inside the config file allow for a better documentation.&lt;br /&gt;
&lt;br /&gt;
== Parsing form data in POST request ==&lt;br /&gt;
&lt;br /&gt;
A POST request is usually sent by an HTML form and the type of the body of the request which contains the data to be sent is indicated by the Content-Type header. Most of the browsers usually support two MIME types in the Content-Type header, i.e. application/x-www-form-urlencoded and multipart/form-data. The main purpose of both the types is to send a list of name-value pairs to the HTTP server.&lt;br /&gt;
&lt;br /&gt;
In application/x-www-form-urlencoded, the name-value pairs are separated by &#039;&amp;amp;&#039; and the names and values are separated by &#039;=&#039;. The spaces between the texts are replaced by a &#039;+&#039; and non-alphanumeric characters are %-encoded. Here, parsing is pretty straight-forward and wouldn&#039;t be tough to handle.&lt;br /&gt;
&lt;br /&gt;
Multipart/form-data is where it gets a little complicated. It should be used for submitting forms that contain files, non-ASCII data, and binary data. Here, each value is sent as a block of data with a boundary string separating each part. We can get the boundary string for each request from the Content-Type header in the HTTP request. Each part has its own set of headers, mainly a Content-Disposition header with disposition type as &#039;form-data&#039;. The field name is given in the Content-Disposition header&#039;s &#039;name&#039; parameter. The headers and the value for each part are separated by a blank line. If file contents are submitted in a form, the media type of the file is specified in the Content-Type header. In this case, the filename is specified in the &#039;filename&#039; parameter of the Content-Disposition header.  &lt;br /&gt;
&lt;br /&gt;
To test both the types, you can set the &#039;enctype&#039; attribute to any one of these types in the HTML &amp;lt;form&amp;gt; element along with the &#039;method&#039; attribute set to &#039;POST&#039;.&lt;br /&gt;
&lt;br /&gt;
Sources - &lt;br /&gt;
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST&lt;br /&gt;
* https://tools.ietf.org/html/rfc2388&lt;br /&gt;
&lt;br /&gt;
==How to handle file upload in PUT/POST request ==&lt;br /&gt;
&lt;br /&gt;
Text or simple encoded files are easy to handle, whereas files like pdf or images are a little tricky. The key to ensure that files are uploaded without corruption, is to NOT decode them. Most file formats use special bytes to hide/encrypt certain information and normal encoding/decoding schemes might not work. This results in corrupted files being uploaded. Following instructions can ensure no data is lost while uploading files to the server:&lt;br /&gt;
&lt;br /&gt;
1. Get the request from the client. Make sure the size you are receiving is big enough, else you will lose data.&lt;br /&gt;
&lt;br /&gt;
2. Figure out the content-type from the http headers.&lt;br /&gt;
&lt;br /&gt;
3. For text(or simple encoding) based files:&lt;br /&gt;
&lt;br /&gt;
* Decode the complete request.&lt;br /&gt;
* Split the request in 2 Categories :-&lt;br /&gt;
       - Request headers&lt;br /&gt;
       - File data (separated by a new line)&lt;br /&gt;
* Open the file to be created in &#039;w&#039; mode.&lt;br /&gt;
* Write the file data in the newly created file.&lt;br /&gt;
4. For images(any binary) files :&lt;br /&gt;
* Split the request first into 2 Categories :-&lt;br /&gt;
       - Request headers&lt;br /&gt;
       - File data (separated by a new line)&lt;br /&gt;
* Decode the request headers.&lt;br /&gt;
* Create a byte string for the encoded file data.&lt;br /&gt;
* Get the size of file to be created and find the length of file data already received.&lt;br /&gt;
* Now, receive the data from client until the original file size is greater than the received data.&lt;br /&gt;
* Open the file to be created in &#039;wb&#039; mode(bytes).&lt;br /&gt;
* Write the encoded data directly into the newly created file.&lt;br /&gt;
&lt;br /&gt;
General tips on handling binary files:&lt;br /&gt;
&lt;br /&gt;
1. Never decode raw data you get from socket. Some information might be lost.&lt;br /&gt;
&lt;br /&gt;
2. Most of the times the &#039;Content-Length&#039; header will be accurate, but do not rely on it. Sometimes, the &#039;Content-Length&#039; in request will not match the actual size of the file.&lt;br /&gt;
&lt;br /&gt;
3. Instead, a better way to do that is to parse the headers, calculate the length of headers in the request and then subtract it from the total length of the entire request. This will give the exact number of bytes in the file. &lt;br /&gt;
&lt;br /&gt;
4. While writing into the file, use that part of the raw request data (which is not decoded) which contains the file bytes, directly.&lt;br /&gt;
&lt;br /&gt;
==How to handle file If-Modified-Since header in GET request ==&lt;br /&gt;
If-Modified-Since header indicates the time at which the browser had last downloaded the webpage.&lt;br /&gt;
&lt;br /&gt;
While parsing get request, if this header is received then follow these steps:&lt;br /&gt;
&lt;br /&gt;
1. This header contains date in the &amp;lt;day-name&amp;gt;, &amp;lt;day&amp;gt; &amp;lt;month&amp;gt; &amp;lt;year&amp;gt; &amp;lt;hour&amp;gt;:&amp;lt;minute&amp;gt;:&amp;lt;second&amp;gt; GMT format. It can be parsed using the datetime library.&lt;br /&gt;
&lt;br /&gt;
2. Find out the last modification date of the requested webpage using os.path.getmtime(filename).&lt;br /&gt;
&lt;br /&gt;
3. Add the last-modified header(contains the last modification date of webpage) in the response headers.&lt;br /&gt;
&lt;br /&gt;
4. If the requested webpage has been modified after the given date, send a response body with status code 200.&lt;br /&gt;
&lt;br /&gt;
5. If the requested web page has not been modified , send an empty response body with status code 304.&lt;br /&gt;
&lt;br /&gt;
In case you do not receive the if-modified-since header while using the browser, Postman can be used. Add If-Modified-Since header and date under the Headers section of Postman.&lt;br /&gt;
&lt;br /&gt;
== How to start and stop the HTTP server ==&lt;br /&gt;
* Must work just like the way Apache server starts and stops, i.e., with a &#039;&#039;&#039;single command.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Must run in &#039;&#039;&#039;background&#039;&#039;&#039;, i.e., even after closing the terminal.&lt;br /&gt;
&lt;br /&gt;
* Can make two shell scripts; start.sh and stop.sh&lt;br /&gt;
&lt;br /&gt;
* To stop the server from running in the background, kill the process using the process ID.&lt;br /&gt;
&lt;br /&gt;
* Useful resource for running a python program in &#039;&#039;&#039;background&#039;&#039;&#039; : https://www.geeksforgeeks.org/running-python-program-in-the-background/&lt;br /&gt;
&lt;br /&gt;
* Useful resource for killing a process : https://www.geeksforgeeks.org/kill-a-process-by-name-using-python/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated Testing ==&lt;br /&gt;
&lt;br /&gt;
Two libraries that are helpful for automatic testing of your code are:-&lt;br /&gt;
&lt;br /&gt;
* https://realpython.com/python-requests/#other-http-methods&lt;br /&gt;
* https://docs.python.org/3.5/library/webbrowser.html&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Using the requests module, we can implement all HTTP methods and test our code.&lt;br /&gt;
   For eg. For a GET request, requests.get(&#039;https://api.github.com&#039;) is used.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Webbrowser module is helpful if we want to test our code on the browser. We can give URL as the argument and it will open a new browser tab with that URL. &lt;br /&gt;
   For eg.  webbrowser.open_new_tab(&#039;https://api.github.com&#039;)&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Computer_Networks_2020&amp;diff=8</id>
		<title>Computer Networks 2020</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Computer_Networks_2020&amp;diff=8"/>
		<updated>2025-08-12T13:28:17Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;Computer Networks 2020 Course  * Notes and Tips on doing the projects *  HTTP Server Project  IMAP Server Project  Bittorrent Client  DNS server Project&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Computer Networks 2020 Course&lt;br /&gt;
&lt;br /&gt;
* Notes and Tips on doing the projects *&lt;br /&gt;
&lt;br /&gt;
[[HTTP Server Project]]&lt;br /&gt;
&lt;br /&gt;
[[IMAP Server Project]]&lt;br /&gt;
&lt;br /&gt;
[[Bittorrent Client]]&lt;br /&gt;
&lt;br /&gt;
[[DNS server Project]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=FOSS_Development_2017&amp;diff=7</id>
		<title>FOSS Development 2017</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=FOSS_Development_2017&amp;diff=7"/>
		<updated>2025-08-12T13:27:59Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;FOSS Development Elective course offered in Even Semester 2016-17.  List of activities done by students  {| class=&amp;quot;wikitable&amp;quot; |- ! MIS ID !! Student Name !! Links to Debian Packages !! Links to Localisation Done !! Links to VCS repos for project |- | 111403003 || Akash Sarda || https://qa.debian.org/developer.php?email=akashsarda3@gmail.com || https://gitlab.com/gnukhata/gkwebapp/merge_requests/374 || https://github.com/AkashSarda/UniTimetable |- | 111403033 || Example |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FOSS Development Elective course offered in Even Semester 2016-17.&lt;br /&gt;
&lt;br /&gt;
List of activities done by students&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MIS ID !! Student Name !! Links to Debian Packages !! Links to Localisation Done !! Links to VCS repos for project&lt;br /&gt;
|-&lt;br /&gt;
| 111403003 || Akash Sarda || https://qa.debian.org/developer.php?email=akashsarda3@gmail.com || https://gitlab.com/gnukhata/gkwebapp/merge_requests/374 || https://github.com/AkashSarda/UniTimetable&lt;br /&gt;
|-&lt;br /&gt;
| 111403033 || Example || Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| 111408024 || Gaurav Juvekar || [https://qa.debian.org/developer.php?email=gauravjuvekar@gmail.com Debian Package Overview (DDPO)] || [https://translations.launchpad.net/~gauravjuvekar Launchpad translations] || [https://bitbucket.org/gauravjuvekar/scons SCons on Bitbucket (hg clone)], &lt;br /&gt;
|-&lt;br /&gt;
| 111408057 || Siddhesh Rane || [https://qa.debian.org/developer.php?login=kingsid911%40gmail.com&amp;amp;comaint=yes Debian packages and bugs] || [https://github.com/phpmyadmin/phpmyadmin/commits?author=SiddheshRane phpMyAdmin Localization commits] || [https://github.com/SiddheshRane/UniTimetable UniTimetable]&lt;br /&gt;
|-&lt;br /&gt;
| 141508001 || Tushar Sandeep Agey || [https://qa.debian.org/developer.php?login=agey.tushar3@gmail.com&amp;amp;comaint=yes Debian packages and bug links]&lt;br /&gt;
|| [https://github.com/TusharAgey/gparted Gparted Localization github link]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://bugzilla.gnome.org/show_bug.cgi?id=778563 bugzilla bug report]&lt;br /&gt;
|| [https://github.com/TusharAgey/UniTimetable UniTimeTable]&lt;br /&gt;
|-&lt;br /&gt;
| 111408061 || Shirishkumar Togarla || [https://qa.debian.org/developer.php?email=shirishtogarla533%40gmail.com Link to debian packages] || [https://github.com/Shirish111/gnome-calendar Localisation] || [https://github.com/Shirish111/UniTimetable Link to vcs repos Unitimetable]&lt;br /&gt;
|-&lt;br /&gt;
| 111408034 || Abhishek Ramchandra Lolage || https://qa.debian.org/developer.php?email=abhisheklolage@gmail.com || https://github.com/abhisheklolage/gnome-commander || https://github.com/abhisheklolage/UniTimetable&lt;br /&gt;
|-&lt;br /&gt;
| 111408013 || Nikhil Gawande || [https://qa.debian.org/developer.php?login=nikhilgawande21@gmail.com&amp;amp;comaint=yes Debian packaging] || [https://gitlab.com/nikhilgawande/gkwebapp/tree/mr_localisation Gnukhata localisation] || [https://nikhilgawande@gitlab.com/nikhilgawande/gkwebapp.git   GnuKhata gkwebapp]&lt;br /&gt;
|-&lt;br /&gt;
| 111408070 || Aarti Kashyap || https://git.fosscommunity.in/users/kaarti.sr/projects || https://github.com/Debian/lintian/pull/3&lt;br /&gt;
 || https://github.com/constructorproblem/NextCloud-on-BeagleBone&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Debian_Packaging_workshop_2nd_Jan_to_8th_Jan_2017&amp;diff=6</id>
		<title>Debian Packaging workshop 2nd Jan to 8th Jan 2017</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Debian_Packaging_workshop_2nd_Jan_to_8th_Jan_2017&amp;diff=6"/>
		<updated>2025-08-12T13:27:31Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;= Debian Packaging Workshop overview = The workshop on Debian Packaging was scheduled between 2-8th Jan 2017 at COEP FOSS lab. The invited people who took the workshop are Pravin and Sruthi. Students have learn the way to package nodejs modules.  = Steps for packaging NodeJs modules = == Create a container ==  === What is a container === If you want to host more than one operating system at the same time on a machine, then there are many alternatives like Virtualbox, KVM...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Debian Packaging Workshop overview =&lt;br /&gt;
The workshop on Debian Packaging was scheduled between 2-8th Jan 2017 at COEP FOSS lab. The invited people who took the workshop are Pravin and Sruthi. Students have learn the way to package nodejs modules.&lt;br /&gt;
&lt;br /&gt;
= Steps for packaging NodeJs modules =&lt;br /&gt;
== Create a container == &lt;br /&gt;
=== What is a container ===&lt;br /&gt;
If you want to host more than one operating system at the same time on a machine, then there are many alternatives like Virtualbox, KVM, etc.  Containers are a very lightweight solutions. The LXC container is a solution implemented using the Linux kernel feature of cgroups. &lt;br /&gt;
&lt;br /&gt;
=== Steps for creating container ===&lt;br /&gt;
1)First create a container in your linux system. The container will basically be a place where we will do all the development process.&lt;br /&gt;
  i)Download lxc (a container manager)&lt;br /&gt;
  &#039;&#039;sudo apt-get install lxc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  ii)Create container&lt;br /&gt;
  &#039;&#039;sudo lxc-create -n debian-sid -t debian -- -r sid&#039;&#039;&lt;br /&gt;
Above command creates a container named debian-sid with the sid distribution&lt;br /&gt;
&lt;br /&gt;
2)Getting control over container&lt;br /&gt;
   &#039;&#039;sudo lxc-attach -n debian-sid&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3)Adding a new user&lt;br /&gt;
   &#039;&#039;adduser new-username&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4)Install the packaging tools&lt;br /&gt;
   &#039;&#039;apt-get install dh-make gem2deb npm2deb&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Steps for creating nodejs packages ==&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=FOSS_Development_2016&amp;diff=5</id>
		<title>FOSS Development 2016</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=FOSS_Development_2016&amp;diff=5"/>
		<updated>2025-08-12T13:27:13Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;FOSS Development Course offered in Even Semester 2015-16.  ==Objective of Course==  # Understand technical,legal,social issues of FOSS Development # Understand various popular models FOSS Development # Understand detail the process of packaging of different platforms # Contribute one of the ongoing FOSS project  == Course Topics== The following topics are covered over the length of the course: : # Debian Packaging # Moodle and It&amp;#039;s Development # A Basic introduction to P...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FOSS Development Course offered in Even Semester 2015-16.&lt;br /&gt;
&lt;br /&gt;
==Objective of Course==&lt;br /&gt;
&lt;br /&gt;
# Understand technical,legal,social issues of FOSS Development&lt;br /&gt;
# Understand various popular models FOSS Development&lt;br /&gt;
# Understand detail the process of packaging of different platforms&lt;br /&gt;
# Contribute one of the ongoing FOSS project&lt;br /&gt;
&lt;br /&gt;
== Course Topics==&lt;br /&gt;
The following topics are covered over the length of the course:&lt;br /&gt;
:&lt;br /&gt;
# Debian Packaging&lt;br /&gt;
# Moodle and It&#039;s Development&lt;br /&gt;
# A Basic introduction to PHP&lt;br /&gt;
# Open source Licenses&lt;br /&gt;
# Case studies on certain Free and Open Source Software&lt;br /&gt;
&lt;br /&gt;
== Various talks ==&lt;br /&gt;
The following talks arranged in this course:&lt;br /&gt;
:&lt;br /&gt;
# Hamara Linux &lt;br /&gt;
# The Wordpress Knowledge Exchange Group(Pune) : Saurabh Shukla&lt;br /&gt;
# The Big Blue Button talk &lt;br /&gt;
# [http://www.scet.ac.in/Krishnakant Krishnakant Mane]&lt;br /&gt;
&lt;br /&gt;
== Exploring different Free software projects ==&lt;br /&gt;
Each student selected a Free Software project of his/her choice and made a presentation on it after exploring it.&lt;br /&gt;
The presentations are intended to give following information about a Free software project:&lt;br /&gt;
:&lt;br /&gt;
# Introduction to what the software does&lt;br /&gt;
# A short demo of the software&#039;s features&lt;br /&gt;
# History of the development &lt;br /&gt;
# Key individual contributors to the project&lt;br /&gt;
# Companies involved in the project&lt;br /&gt;
# Licensing Terms&lt;br /&gt;
# Important Websites related to the software &lt;br /&gt;
# Current status of development&lt;br /&gt;
# Future roadmap of the project&lt;br /&gt;
# Debates / Controversies / Issues of concern / Debates about the software&lt;br /&gt;
# Comparison between its corresponding proprietary software&lt;br /&gt;
# Various technologies used in the code development&lt;br /&gt;
# Commercial Adoption&lt;br /&gt;
# History of forks&lt;br /&gt;
# Businesses built around this software&lt;br /&gt;
# Job &amp;amp; business opportunities in this software&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Serial no. !! Name of Free Software Project !! Made by !! About !! Link to Presentation&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||GIMP (GNU Image Manipulation Program) || Vaibhav Kurhe || GIMP is a full-fledged Raster Graphics Editor || [[https://drive.google.com/file/d/0B0BG1VCMcjDjUmhLeHlRa3BfMXM/view?usp=sharing| GIMP Presentation]]&lt;br /&gt;
|-&lt;br /&gt;
| 2|| Mozilla Firefox || Sushant Chavan || Firefox is free and open-source web browser || [[https://drive.google.com/file/d/0B1NurDIsINhdVHA1b3pBYm9aSFU/view?usp=sharing| Firefox Presentation]]&lt;br /&gt;
|-&lt;br /&gt;
| 3|| Audacity || Aseema Sulakhe|| Example || [https://docs.google.com/presentation/d/1LtpM7eTcKTxBTJMobYEi0aYd2FIL_I9GpK1FvuflR7Y/edit?usp=sharing Audacity_ppt]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || WordPress || Harshita Shivhare || Example || [https://drive.google.com/file/d/0B1gwODTDUkkBak8tNzZVaWZ2TDA/view?usp=sharing WordPress]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Drupal || Sanket Mehrotra || A quick look at Drupal || [[https://drive.google.com/file/d/0B90y5xpn5cgbazMwdTY3RUJ2T2s/view?usp=sharing Drupal(v0.8)]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || LibreOffice || Vaishnavi KOlhapure || Office Suite with several applications || [[https://drive.google.com/open?id=0ByLiahgpQxBRZDR2TGpqOEJlR2M/view?usp=sharing LibreOffice]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || VLC media player || Ajinkya Panaskar || VLC - A cross media player and streaming media server || [[https://drive.google.com/file/d/0BwVk6fiAiIW3VExhZlJkZVZob0E/view?usp=sharing VLC]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Mediawiki || Abhilash Mhaisne || World&#039;s most use wiki software || [[https://drive.google.com/file/d/0Bxoyzo1JAHpRVzd6aHNwU1liWDA/view?usp=sharing]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Thunderbird || Abhishek Notani || An email and chat client || [[https://drive.google.com/file/d/0BxPjP0r_9KGxeVg0Q3lod1lTdkU/view?usp=sharing Thunderbird]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Example || Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Example || Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Example || Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Example || Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Example || Example || Example || Example&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Slides made from &amp;quot;Introduction to Free Software&amp;quot; book ==&lt;br /&gt;
Each student chose a topic from the &amp;quot;Introduction to Free Software&amp;quot; book and made slides on that topic.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Topic Serial No. !! Topic Name !! Made by !! About !! Link to Presentation&lt;br /&gt;
|-&lt;br /&gt;
| 1|| Introduction || Ajinkya Panaskar || Example || [[https://drive.google.com/file/d/0BwVk6fiAiIW3MlVPeEZvaVVjelk/view?usp=sharing| Chapter 1 - Introduction|]]&lt;br /&gt;
|-&lt;br /&gt;
| 2|| A bit of history || Shrikrushna Kulkarni || Example || [[https://drive.google.com/file/d/0B88eaVLfJa6saEtOVUNwYWJMUmM/view?usp=sharing |Chapter 2 ]]&lt;br /&gt;
|-&lt;br /&gt;
| 3|| Legal Aspects || Abhishek Notani || Example || [[https://drive.google.com/file/d/0BxPjP0r_9KGxME9UNWtWblFFRVE/view?usp=sharing| Chapter 3]]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Developers &amp;amp; their motivations || Vaibhav Kurhe || Example || [[https://drive.google.com/file/d/0B0BG1VCMcjDjVXNWTHlncFI3dG8/view?usp=sharing| Presentation]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Economy || Aseema Sulakhe || Example || [https://drive.google.com/file/d/0B2XJ3U-t-49SQnBlTERiNzNhMWs/view?usp=sharing Economy]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Free software &amp;amp; public administrations || Harshita Shivhare || Example || [https://drive.google.com/file/d/0B1gwODTDUkkBMUl0VjJKend4UUk/view?usp=sharing Chapter 6]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Free software engineering || Sanket Mehrotra || Example || [[https://drive.google.com/file/d/0B90y5xpn5cgbM1NlT0dtS3EtVjQ/view?usp=sharing Free Software Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Development environments and technologies || Abhilash Mhaisne || Example ||  [[https://www.dropbox.com/s/aamwst3olv6ys6q/foss_present.odp?dl=0 | Development environment and technologies]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Case Studies || Sushant Chavan, Anurag Bhikane, Sagar Gomsale || Example || [[https://drive.google.com/file/d/0B1NurDIsINhdWm5GanRCOEpLQVk/view?usp=sharing| presentation]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Other free resources || Rohan Manatkar || Example || [[https://drive.google.com/open?id=0ByLiahgpQxBRZDR2TGpqOEJlR2M/view?usp=sharing]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Appendix || Sonam Galani , Vaishnavi Kolhapure || Example || [[https://drive.google.com/file/d/0ByLiahgpQxBRMWxBVFFNZ05oelk/view?usp=sharing Appendix]]}&lt;br /&gt;
|}&lt;br /&gt;
== Moodle bugs being worked on ==&lt;br /&gt;
Pairs of students worked on bugs in Moodle.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Serial No. !! Bug No. !! Bug Description !! Participants  !! Status&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MDL-53004 || No space between HTML divs || Anurag Bhikane, Sagar Gomsale || Open&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MDL-53151 || Undefined variable: e in course/modlib.php on line 132|| Abhishek Notani, Ajinkya Panaskar || Open&lt;br /&gt;
|-&lt;br /&gt;
| 3 || MDL-52483 || Help text for Password-change URL in auth plugins settings incorrectly says it will generate button on login page || Abhishek Notani, Ajinkya Panaskar || Open&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MDL-53823 || Expression always true || Sushant Chavan, Shrikrushna Kulkarni || Patch sent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || MDL-53603 ||  Quiz with shuffled questions:  manual grading pop-up shows the question number students saw during the attempt || Abhilash Mhaisne || Patch sent&lt;br /&gt;
|-&lt;br /&gt;
| 6|| MDL-52092 || &lt;br /&gt;
Log username instead of fullname() in the &#039;other&#039; property of user_loggedinas event&lt;br /&gt;
  || Sanket Mehrotra || Patch submitted&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Open_Technologies_Workshop_Oct_2015&amp;diff=4</id>
		<title>Open Technologies Workshop Oct 2015</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Open_Technologies_Workshop_Oct_2015&amp;diff=4"/>
		<updated>2025-08-12T13:26:50Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;Open Technologies Workshop  conducted from 12-15 October 2015.  = Assignment 1 = Pick up a software of your choice. Find the source code repository, the bug reporting website, the community discussion mailing list, Any other related websites and update it here.   Do it as a table. {| class=&amp;quot;wikitable&amp;quot; |- !Name !!MIS !! Application name !!Source Code Repository !! Bug Reporting Website!! Community Discussion Mailing List !! Discussion Forum |- | Nikita Paranjape || 111403...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Open Technologies Workshop  conducted from 12-15 October 2015.&lt;br /&gt;
&lt;br /&gt;
= Assignment 1 =&lt;br /&gt;
Pick up a software of your choice. Find the source code repository, the bug reporting website, the community discussion mailing list, Any other related websites and update it here. &lt;br /&gt;
&lt;br /&gt;
Do it as a table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!MIS !! Application name !!Source Code Repository !! Bug Reporting Website!! Community Discussion Mailing List !! Discussion Forum&lt;br /&gt;
|-&lt;br /&gt;
| Nikita Paranjape || 111403029 || gnuplot || http://gnuplot.cvs.sourceforge.net/viewvc/gnuplot/ || http://sourceforge.net/p/gnuplot/mailman/ || https://lists.sourceforge.net/lists/listinfo/gnuplot-beta || news://comp.graphics.apps.gnuplot&lt;br /&gt;
|-&lt;br /&gt;
| Saurabh Agrawal || 111403002 || GNOME Calculator || https://github.com/GNOME/gnome-calculator.git || https://bugs.launchpad.net/bugs/1230172  https://bugzilla.gnome.org/|| https://mail.gnome.org/mailman/listinfo/gcalctool-list || http://ubuntuforums.org/showthread.php?t=2129816&lt;br /&gt;
|-&lt;br /&gt;
| Shruti Dogra || 111403075 || Gedit || github.com/GNOME/gedit.git || bugzilla.gnome.org || mail.gnome.org/mailman/listinfo/gedit-list || plus.google.com/communities/104680683972837006235/s/gedit&lt;br /&gt;
|-&lt;br /&gt;
| Jassim Rahman || 111403019 || Lightbeam || https://github.com/mozilla/lightbeam || https://addons.mozilla.org/en-us/firefox/addon/lightbeam/ || https://www.mozilla.org/en-US/lightbeam/ || https://addons.mozilla.org/en-us/firefox/addon/lightbeam/&lt;br /&gt;
|-&lt;br /&gt;
| Aditya Malu || 111403023 || RhythmBox || https://github.com/GNOME/rhythmbox || https://bugs.launchpad.net/rhythmbox/+bug/|| https://mail.gnome.org/mailman/listinfo/rhythmbox-devel || Example&lt;br /&gt;
|-&lt;br /&gt;
| Sayali Salunke || 111403040 || GCC || https://gcc.gnu.org/git/ || https://gcc.gnu.org/bugs/ || https://gcc.gnu.org/lists.html || http://gcc.1065356.n5.nabble.com/&lt;br /&gt;
|-&lt;br /&gt;
| Sanket Unche || 141503016 || OpenJDK || http://hg.openjdk.java.net/jdk8u/jdk8u/ || https://bugs.openjdk.java.net/ || http://mail.openjdk.java.net/mailman/listinfo || http://planetjdk.org/&lt;br /&gt;
|-&lt;br /&gt;
| Rasika Bhave ||111403035 || DIA|| https://github.com/GNOME/dia || https://bugzilla.gnome.org/query.cgi?format=specific&amp;amp;product=dia&amp;amp;bug_status=__all__ ||  https://mail.gnome.org/mailman/listinfo/dia-list ||http://www.autoindustry563.blog.opensubscriber.com/messages/dia-list@gnome.org/topic4.html&lt;br /&gt;
|-&lt;br /&gt;
|Nupur Malpani ||111303028 ||gnu tar || http://git.savannah.gnu.org/cgit/tar.git || http://lists.gnu.org/archive/html/bug-tar/ || https://lists.gnu.org/mailman/listinfo || Example&lt;br /&gt;
|-&lt;br /&gt;
| Purva Tendulkar || 111403049 || Android || https://github.com/android/platform_frameworks_base || https://code.google.com/p/android/issues/advsearch || http://lists.qt-project.org/mailman/listinfo/android-development || http://androidforums.com/forums/android-questions.2400/&lt;br /&gt;
|-&lt;br /&gt;
| Sagar Panchmatia || 111403067 || Thunderbird || http://hg.mozilla.org/comm-central || http://bugzilla.mozilla.org || dev-apps-thunderbird@lists.mozilla.o || http://support.mozilla.org/en-US/thunderbird &lt;br /&gt;
|-&lt;br /&gt;
| Bhagyashri Kshirsagar|| 141503006 || Apache || http://www.apache.org/dev/version-control.html || http://tomcat.apache.org/bugreport.html || http://flex.apache.org/community-mailinglists.html || http://camel.apache.org/discussion-forums.html&lt;br /&gt;
|-&lt;br /&gt;
| | shubhangi rathod || 141503012 || git || https://github.com/git/git || https://gitreports.com/issue/schneidmaster/gitreports.com || https://git-scm.com/community|| https://forums.open.collab.net/servlets/Search?query=git&amp;amp;scope=domain&amp;amp;resultsPerPage=40&lt;br /&gt;
|-&lt;br /&gt;
| | Vaidehi Vasant Deshpande || 141508007 || Xfig || https://github.com/wavewave/xfigparser/blob/master/src/Text/Xfig.hs || epb.lbl.gov/xfig/frm_bugs_fixed.html || http://sourceforge.net/p/fink/mailman/message/13637475/ || https://bbs.archlinux.org/viewtopic.php?id=3301&lt;br /&gt;
|-&lt;br /&gt;
| Shivani Mogre || 141508008 || iceweasel || https://github.com/mdouchement/docker-iceweasel || https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=iceweasel;dist=unstable || https://www.reddit.com/r/debian/comments/3bfgz8/what_is_debian_doing_with_pocket_integration_in/ ||http://forums.debian.net/viewtopic.php?t=73796&lt;br /&gt;
|-&lt;br /&gt;
| Shreyash sherje || 111403043 || file-roller || http://github.com/GNOME/file-roller.git || http://bugs.debian.org/file-roller || http://mail-archieves.apache.org/mod-Mbox/file-roller || http:github.com/GNOME/file-roller/pulls&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Sumedh Kale || 111403062 || Libre Office ||https://github.com/LibreOffice || https://bugs.documentfoundation.org/ || https://www.libreoffice.org/get-help/mailing-lists/ || https://en.wikipedia.org/wiki/LibreOffic&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Ajinkya Geetanand Chavan || 141508005 || Eclipse || https://github.com/eclipse/eclipse.jdt.core ||  https://bugs.eclipse.org/bugs/ || https://dev.eclipse.org/mailman/listinfo || http://www.eclipse.org/forums/&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Bhargavi Neti || 111403066 || Vim editor ||https://github.com/vim/vim  || https://github.com/vim/vim/issues || https://github.com/vim/vim/issues || https://groups.google.com/forum/#!forum/comp.editors&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Pornima || 141403008 || Chromium Browser || https://chromium.googlesource.com/chromium/src.git || https://code.google.com/p/chromium/issues/list || https://www.chromium.org/developers/discussion-groups || https://lists.sourceforge.net/lists/listinfo/chromium-dev || Other links : http://www.linuxinsider.com/story/79510.html&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Rohan Patil || 111408046 || LINUX Kernel || https://github.com/torvalds/linux/tree/master/kernel/irq || https://bugzilla.kernel.org/ || https://lkml.org/ || http://www.linuxforums.org/forum/&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Aarti Kashyap|| 111408070|| Netbeans || https://netbeans.org/projects/platform/sources || https://netbeans.org/bugzilla/buglist.cgi?limit=25&amp;amp;order=Importance&amp;amp;product=platform ||https://netbeans.org/projects/platform/lists || Example&lt;br /&gt;
|-&lt;br /&gt;
| Aniket Kulkarni || 111403064 || LaTeX 3 || https://latex-project.org/svnroot/experimental/trunk/ || https://latex-project.org/bugs-upload.html || http://tug.org/mailman/listinfo/latex3-commits || http://www.latex-community.org/forum/&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Tushar Sandeep Agey || 141508001 || Moodle || https://github.com/moodle/moodle || https://tracker.moodle.org/secure/Dashboard.jspa || http://www.sourceforge.net/p/moodle/mailman/ || https://moodle.org/course/&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Shantanu Chandorkar || 111408055 || Nano || http://git.savannah.gnu.org/cgit/nano.git || http://savannah.gnu.org/bugs/?group=nano || http://mail.gnu.org/mailman/listinfo/nano-devel || http://ubuntuforums.org/showthread.php?t=1058698&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Samiran Kiran Deshmukh || 141508006 || MySQL || https://github.com/mysql || https://bugs.mysql.com/ || https://dev.mysql.com/doc/refman/5.1/en/mailing-lists.html || http://forums.mysql.com/&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Kiran Sonavane|| 111205059 || Sudoku Game || https://code.launchpad.net/sudoku-app || https://bugs.launchpad.net/sudoku-app/+bugs?field.tag=bitesize || https://lists.launchpad.net/ubuntu-touch-coreapps/ || &lt;br /&gt;
|-&lt;br /&gt;
| Amarpreet Singh Arora || 141508002 || Gparted || https://git.gnome.org/browse/gparted/ || http://gparted.org/bugs.php || http://sourceforge.net/p/gparted/mailman/gparted-devel/ || http://gparted-forum.surf4.info/ ||&lt;br /&gt;
|-&lt;br /&gt;
| Nikhil Sudhakar Gawande || 111408013 || Xine(video player) || http://anonscm.debian.org/hg/ || https://bugs.xine-project.org/enter_bug.cgi || http://www.sourceforge.net/p/xine/mailman/ || https://lists.sourceforge.net/lists/listinfo/xine-devel|https://http://sourceforge.net/p/xine/mailman/xine-announce/  ||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Anupam Nandkumar Godse || 111408016 || Terminal || https://github.com/GNOME/gnome-terminal https://git.gnome.org/browse/gnome-terminal || https://launchpad.net/ubuntu/+source/gnome-terminal/+bugs || https://mail.gnome.org/mailman/listinfo/gnome-list || http://ubuntuforums.org/showthread.php?t=2253173&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pritesh holani || 111403016 || pico || https://github.com/picocms/Pico || http://picocms.org/docs.html#blogging || pico-8.wikia.com/wiki/Board:General_Discussion || www.pico-dicussion.org/pico |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Akash Sarda || 111403003 || ERIC || eric-ide.python-projects.org/eric-code.html || http://picocms.org/docs.html#blogging || http://ubuntuforums.org/showthread.php?t=347637|| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Rohini Sable || 141508010 || ASCII || https://github.com/catsby/ascii || https://hub.qgis.org/issues/9573 || http://stagecraft.theprices.net/ ||&lt;br /&gt;
http://www.cfd-online.com/Forums/fluent/50333-automatic-data-export-ascii-format.html|| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Saket S Komawar || 111408029 || Emacs || https://github.com/emacs-mirror/emacs.git || https://lists.gnu.org/mailman/listinfo/bug-gnu-emacs ||https://savannah.gnu.org/git/?group=emacs||  https://savannah.gnu.org/git/?group=emacs || |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Aditya Karamchandani  || 111408067 || Linux Mint || http://packages.linuxmint.com/list.php?release=Rosa || https://bugs.launchpad.net/linuxmint || http://forums.linuxmint.com/viewtopic.php?f=152&amp;amp;t=73603 ||  http://forums.linuxmint.com/ || |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Assignment 2 = &lt;br /&gt;
&lt;br /&gt;
Make a good presentation on a topic of your choice. The topic can be from the ones disccused in the class. Your aim should be to use, customize and develop the software for a good use within COEP. &lt;br /&gt;
&lt;br /&gt;
Please list your name and software here. &lt;br /&gt;
&lt;br /&gt;
The task can be done in groups of two.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!MIS !! Application Name !!&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Sanket Unche  || 141503016 || MRBS&lt;br /&gt;
|-&lt;br /&gt;
| Tushar Agey || 141508001 || MRBS&lt;br /&gt;
|-&lt;br /&gt;
| Ajinkya Chavan || 141508005  || MRBS&lt;br /&gt;
|-&lt;br /&gt;
| Samiran Deshmukh || 141508006 || MRBS&lt;br /&gt;
|-&lt;br /&gt;
| Pornima  || 141403008 || COEP FOSS Server Website&lt;br /&gt;
|-&lt;br /&gt;
| Aniket Kulkarni  || 111403064 || LDAP - NFS - Samba&lt;br /&gt;
|-&lt;br /&gt;
| Sayali Salunke || 111403040 || Openstack &lt;br /&gt;
|-&lt;br /&gt;
| Nupur Malpani || 111303028 || Openstack &lt;br /&gt;
|-&lt;br /&gt;
| Anupam Godse || 111408016 || odoo&lt;br /&gt;
|-&lt;br /&gt;
| Nikhil Gawande || 111408013 || odoo&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Operating_Systems_2015&amp;diff=3</id>
		<title>Operating Systems 2015</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Operating_Systems_2015&amp;diff=3"/>
		<updated>2025-08-12T13:26:25Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;Operating Systems Sem VI Third Year B.Tech. Computer Engineering  ==Instructor== Prof. Abhijit A.M is the instructor for this course.  ==Virtual Box Resources== * Virtual Box Tricks * Virtual Machine Troubleshooting * Installing VirtualBox and Creating Virtual Machine * Windows 10(TechPreview) Setup using VirtualBox * Android Setup using Virtual Box * Chrome OS Setup using Virtual Box * BackBox OS Setup using Virtual Box * Solaris 11.1 insta...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Operating Systems&lt;br /&gt;
Sem VI&lt;br /&gt;
Third Year B.Tech. Computer Engineering&lt;br /&gt;
&lt;br /&gt;
==Instructor==&lt;br /&gt;
Prof. Abhijit A.M is the instructor for this course.&lt;br /&gt;
&lt;br /&gt;
==Virtual Box Resources==&lt;br /&gt;
* [[Virtual Box Tricks]]&lt;br /&gt;
* [[Virtual Machine Troubleshooting]]&lt;br /&gt;
* [[Installing VirtualBox and Creating Virtual Machine]]&lt;br /&gt;
* [[Windows 10(TechPreview) Setup using VirtualBox]]&lt;br /&gt;
* [[Android Setup using Virtual Box]]&lt;br /&gt;
* [[Chrome OS Setup using Virtual Box]]&lt;br /&gt;
* [[BackBox OS Setup using Virtual Box]]&lt;br /&gt;
* [[Solaris 11.1 installation using VirtualBox]]&lt;br /&gt;
* [[Fedora 16 installation using VirtualBox]]&lt;br /&gt;
* [[MAC OS X Snow Leopard installation using VirtualBox]]&lt;br /&gt;
* [[Windows 7 installation using VirtualBox]]&lt;br /&gt;
* [[Slackware installation using VirtualBox]]&lt;br /&gt;
* [[OpenSUSE installation using virtualbox]]&lt;br /&gt;
* [[Kali-Linux installation using virtualbox]]&lt;br /&gt;
* [[Facts about VDI,VHD and VMDK formats of Hard Disk]]&lt;br /&gt;
* [[Virtual Box Guest Additions]]&lt;br /&gt;
* [[Dual boot system in Virtual Box]]&lt;br /&gt;
* [[Ubuntu 14.10 Setup Using VirtualBox]]&lt;br /&gt;
* [[Tiny core Setup Using VirtualBox]]&lt;br /&gt;
* [[Damn Small Linux 4.11.r1 installation using VirtualBox]]&lt;br /&gt;
* [[Open solaris Setup using Virtualbox]]&lt;br /&gt;
* [[BSD Setup Using VirtualBox]]&lt;br /&gt;
&lt;br /&gt;
==Common Linux Commands==&lt;br /&gt;
* [http://foss.coep.org.in/coepwiki/index.php/Suggestions Common Linux Terminal Commands]&lt;br /&gt;
*[[Users - addition, deletion and privileges]]&lt;br /&gt;
*[[NFS and SSH]]&lt;br /&gt;
==System Calls==&lt;br /&gt;
*[[fork()]]&lt;br /&gt;
*[[vfork()]]&lt;br /&gt;
*[[exec()]]&lt;br /&gt;
*[[wait()]]&lt;br /&gt;
*[[dup() and dup2()]]&lt;br /&gt;
&lt;br /&gt;
==Shell and Kernel==&lt;br /&gt;
&#039;&#039;&#039;What Kernel Is?&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
* Kernel is heart of Linux Os. &amp;lt;br&amp;gt;&lt;br /&gt;
* It manages resources of Linux OS. &amp;lt;br&amp;gt;&lt;br /&gt;
* Resources means facilities available in Linux. For e.g. Facility to store data, print data on printer, memory, file management etc .&amp;lt;br&amp;gt;&lt;br /&gt;
* Kernel decides who will use this resource, for how long and when. &amp;lt;br&amp;gt; &lt;br /&gt;
* It runs your programs (or set up to execute binary files).The kernel acts as an intermediary between the computer hardware and various programs/application/shell. &amp;lt;br&amp;gt;&lt;br /&gt;
* It&#039;s Memory resident portion of Linux. It performs following tasks :- &amp;lt;br&amp;gt;&lt;br /&gt;
* I/O management &amp;lt;br&amp;gt;&lt;br /&gt;
* Process management &amp;lt;br&amp;gt;&lt;br /&gt;
* Device management &amp;lt;br&amp;gt;&lt;br /&gt;
* File management &amp;lt;br&amp;gt;&lt;br /&gt;
* Memory management &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is Linux Shell?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Computer understand the language of 0&#039;s and 1&#039;s called binary language.In early days of computing, instruction are provided using binary language, which is difficult for all of us, to read and write. So in OS, there is special program called Shell. Shell accepts your instruction or commands in English (mostly) and if its a valid command, it is passed to kernel.Shell is a user program or it&#039;s a environment provided for user interaction. Shell is an command language interpreter that executes commands read from the standard input device (keyboard) or from a file.Shell is not part of system kernel, but uses the system kernel to execute programs, create files etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is Shell Script?&#039;&#039;&#039;&amp;lt;br&amp;gt;Normally shells are interactive. It means shell accept command from you (via keyboard) and execute them. But if you use command one by one (sequence of &#039;n&#039; number of commands) , the you can store this sequence of command to text file and tell the shell to execute this text file instead of entering the commands. This is know as shell script.Shell script defined as:&amp;quot;Shell Script is series of command written in plain text file. Shell script is just like batch file is MS-DOSbut have more power than the MS-DOS batch file.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variables in Shell&#039;&#039;&#039;&amp;lt;br&amp;gt;To process our data/information, data must be kept in computers RAM. RAM is  divided into small locations, and each location had unique number called memory location/address,which is used to hold our data. Programmer can give a unique name to this memory location/address  called memory variable or variable (Its a named storage location that may take different values, but only one at a time).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In Linux (Shell), there are two types of variable:&#039;&#039;&#039;&lt;br /&gt;
* System variables - Created and maintained by Linux itself. This type of variable defined in CAPITAL LETTERS.&lt;br /&gt;
* User defined variables (UDV) - Created and maintained by user. This type of variable defined in lower letter&lt;br /&gt;
&lt;br /&gt;
==CPU Scheduler==&lt;br /&gt;
*Whenever the CPU becomes idle, it is the job of the CPU Scheduler to select another process from the ready queue to run next.&lt;br /&gt;
*The storage structure for the ready queue and the algorithm used to select the next process are not necessarily a FIFO queue.&lt;br /&gt;
===Preemptive Scheduling===&lt;br /&gt;
*CPU scheduling decisions take place under one of four conditions:&lt;br /&gt;
1.  When a process switches from the running state to the waiting state, such as for an I/O request or invocation of the wait( ) system call. &amp;lt;br&amp;gt;&lt;br /&gt;
2.  When a process switches from the running state to the ready state, for example in response to an interrupt.&amp;lt;br&amp;gt;&lt;br /&gt;
3.  When a process switches from the waiting state to the ready state, say at completion of I/O or a return from wait( ). &amp;lt;br&amp;gt;&lt;br /&gt;
4.  When a process terminates. &amp;lt;br&amp;gt;&lt;br /&gt;
* For conditions 1 and 4 there is no choice ­ A new process must be selected.*For conditions 2 and 3 there is a choice ­ To either continue running the current process, or select a different one.*If scheduling takes place only under conditions 1 and 4, the system is said to be non­preemptive, or cooperative. Under these conditions, once a process starts running it keeps running, until it either voluntarily blocks or until it finishes. Otherwise the system is said to be preemptive.&lt;br /&gt;
* Note that pre­emptive scheduling can cause problems when two processes share data, because one process may get interrupted in the middle of updating shared data structures.&lt;br /&gt;
* Preemption can also be a problem if the kernel is busy implementing a system call ( e.g. updating critical   kernel data structures ) when the preemption occurs.&lt;br /&gt;
&lt;br /&gt;
===Scheduling Criteria===&lt;br /&gt;
*There are several different criteria to consider when trying to select the &amp;quot;best&amp;quot; scheduling algorithm for a particular situation and environment, including:&lt;br /&gt;
* CPU utilization :­ Ideally the CPU would be busy 100% of the time, so as to waste 0 CPU cycles. On a real system CPU usage should range from 40% ( lightly loaded ) to 90% ( heavily loaded ). &amp;lt;br&amp;gt;&lt;br /&gt;
* Throughput :­ Number of processes completed per unit time. May range from 10 / second to 1 / hour depending on  the specific processes. &amp;lt;br&amp;gt;&lt;br /&gt;
* Turn around time : ­ Time required for a particular process to complete, from submission time to completion. &amp;lt;br&amp;gt; &lt;br /&gt;
* Waiting time :­ How much time processes spend in the ready queue waiting their turn to get on the CPU.( Load average ­ The average number of processes sitting in the ready queue waiting their turn to get into the CPU. Reported in 1 ­minute, 5 ­minute, and 15­ minute averages by &amp;quot;uptime&amp;quot; and &amp;quot;who&amp;quot;. )&amp;lt;br&amp;gt;&lt;br /&gt;
* Response time:­ The time taken in an interactive program from the issuance of a command to the commence of a response to that command.&lt;br /&gt;
&lt;br /&gt;
===[[Scheduling Algorithms]]===&lt;br /&gt;
One of the major tasks involved in scheduling is picking the right scheduling algorithm. There are many ways one could decide to schedule tasks. But there are many factors to be considered while making such a decision.&lt;br /&gt;
&lt;br /&gt;
==File Systems==&lt;br /&gt;
This is a simple description of the UNIX system, which is also applicable to Linux systems - &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;On a UNIX system, everything is a file; if something is not a file, it is a process.&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Types of Files====&lt;br /&gt;
There are various types of files in Linux: &amp;lt;br&amp;gt;&lt;br /&gt;
* Regular files: Text files, executable files, input or output to or from a program and so on. &amp;lt;br&amp;gt;&lt;br /&gt;
* Directories: Files that are lists of other files. &amp;lt;br&amp;gt;&lt;br /&gt;
* Special Files: The mechanism used for input and output. Most special files are in /dev, we will discuss them later. &amp;lt;br&amp;gt;&lt;br /&gt;
* Links: A system to make a file or directory visible in multiple parts of the system&#039;s file tree. We will talk about links in detail. &amp;lt;br&amp;gt;&lt;br /&gt;
* (Domain) Sockets: A special file type, similar to TCP/IP sockets, providing inter-process networking protected by the file system&#039;s access control. &amp;lt;br&amp;gt;&lt;br /&gt;
* Named Pipes: Act more or less like sockets and form a way for processes to communicate with each other, without using network socket semantics. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Types of File Systems====&lt;br /&gt;
A file system (or filesystem) is a means to organize data expected to be retained after a program terminates by providing procedures to store, retrieve and update data, as well as manage the available space on the device(s) which contain it. A file system organizes data in an efficient manner and is tuned to the specific characteristics of the device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are a variety of file systems that can be used between multiple operating systems based on what a user wants.&lt;br /&gt;
Some types of file systems are: &amp;lt;br&amp;gt;&lt;br /&gt;
* [[Ext2  - Second Extended File System]]. Used by Linux &amp;lt;br&amp;gt;&lt;br /&gt;
* Ext3 - Third Extended File System. Used by Linux&amp;lt;br&amp;gt;&lt;br /&gt;
* Ext4 - Fourth Extended File System. Used by Linux&amp;lt;br&amp;gt;&lt;br /&gt;
* NTFS - Used by Windows. &amp;lt;br&amp;gt;&lt;br /&gt;
* FAT32 &amp;lt;br&amp;gt;&lt;br /&gt;
* VFS &amp;lt;br&amp;gt;&lt;br /&gt;
* ExFAT&lt;br /&gt;
====Creating a Filesystem====&lt;br /&gt;
Filesystems are created by using the &#039;&#039;&#039;mkfs&#039;&#039;&#039; command.There is actually a seperate program for each filesystem type.&#039;&#039;&#039;mkfs&#039;&#039;&#039; is just a front end that runs the appropriate program depending on the desired file system type. The type is selected with the &#039;&#039;&#039;-t fstype&#039;&#039;&#039; option.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The programs called by &#039;&#039;&#039;mkfs&#039;&#039;&#039; have slightly different command line interfaces. some of them are enlisted below (refer manpages for more):&lt;br /&gt;
*&#039;&#039;&#039; -t fstype&#039;&#039;&#039;&amp;lt;br&amp;gt;Select type of filesystem&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039;&amp;lt;br&amp;gt;Search for bad block and initializa the bad block list accordingly&lt;br /&gt;
* &#039;&#039;&#039;-l filename&#039;&#039;&#039;&amp;lt;br&amp;gt;Read the initial bad block list from the name file&lt;br /&gt;
&lt;br /&gt;
==Synchronisation==&lt;br /&gt;
===[[Mutex locks]]===&lt;br /&gt;
Mutex is shortform for mutual exclusion. This is the simplest solution for critical-section problem. Mutex lock is used to protect critical sections and race condition. Mutex lock suggests that a process should acquire the lock before entering a critical section and release the lock while leaving critical section.&lt;br /&gt;
===[[Semaphores]]===&lt;br /&gt;
Semaphore is another solution for race condition. A semaphore S is an integer variable that, is accessed through two standard atomic operations: wait() and signal(). For binary semaphore S can be either 0 or 1. When one process is modifying the semaphore value, no other process can simultaneously modify that same semaphore value.&lt;br /&gt;
===Classic Synchronisation Problems===&lt;br /&gt;
*[[Classic Synchronisation Problems]]&lt;br /&gt;
&lt;br /&gt;
==Memory Management==&lt;br /&gt;
In Operating system Memory Management is the function responsible for management and handling of computers primary memory.This function keeps the track of each and every memory location whether allocated or free. It checks how memory is allocated to the processes and also decides that which process should get memory at which time. It also tracks whether any memory is unallocated or freed and update the status of the memory corrospondingly.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Memory Management uses two registers (base and limit registers). Base register holds smallest legal physical memory address and limit register specifies the size of the range.Consider the following diagram to get this:&lt;br /&gt;
&lt;br /&gt;
[[File:Memory_management.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
===Address Mapping/Binding===&lt;br /&gt;
The mapping of symbolic names is done in following ways:&lt;br /&gt;
====Compile Time====&lt;br /&gt;
If it is known at compile time where a program will rwside in physical memory, then &#039;&#039;&#039;absolute code&#039;&#039;&#039; can be generated by the compiler, containing actual physical addresses. However if the load address changes at some later time, then the program will have to be recompiled.&lt;br /&gt;
====Load Time====&lt;br /&gt;
If the location at which a program will be loaded is not known at compile time, then the compiler must generate &#039;&#039;&#039;relocatable code&#039;&#039;&#039;, which refers addresses relative to the start of the program. If that starting address changes, then the program must be reloaded but not recompiled.&lt;br /&gt;
====Execution Time====&lt;br /&gt;
If a program can be moved around in memory during the course of execution, then binding must be delayed untill execution time. This requires special hardware, and is the method implemented by most of the modern operating systems.&lt;br /&gt;
===Dynamic Loading===&lt;br /&gt;
In dynamic loading, a routine of program is not loaded  until it is called by  program. All routines are kept on disk in relocatable format. The main program is loaded into memory and  is executed. Other routines methods or modules are loaded on request. Dynamic Loading makes better memory space utilization and unused routines are never get loaded.&lt;br /&gt;
===Dynamic Linking===&lt;br /&gt;
The term &#039;&#039;&#039;linking&#039;&#039;&#039; deals with the process of collecting and combining various modules of code and data into a executable file that can be loaded into memory and executed. Operating system can link system level libraries to a program. When it combines the libraries at load time, the linking is called static linking and when this linking is done at the time of execution, it is called as dynamic linking.&amp;lt;br&amp;gt;In static linking, libraries linked at compile time, so program code size becomes bigger whereas in dynamic linking libraries linked at execution time so program code size remains smaller.&lt;br /&gt;
===Paging===&lt;br /&gt;
&#039;&#039;&#039;Paging&#039;&#039;&#039; is a memory management technique in which the memory is divided into fixed size pages. Paging is used for getting a faster access to data. When a program needs a page, it is available in the main memory as the OS copies a certain number of pages from the storage device to main memory. Paging allows the physical address space of a process to be non-contiguous.&amp;lt;br&amp;gt;OS performs an operation for storing and retrieving data from secondary storage devices for use in main memory. Paging is one of such techniques for memory management. Paging is to deal with external fragmentation problem.&amp;lt;br&amp;gt;When a program (or task) references a logical address in memory, the processor translates the address into a linear address and then uses its paging mechanism to translate the linear address into a corresponding physical address.&lt;br /&gt;
====Page Fault====&lt;br /&gt;
If the page containing the linear address is not currently in physical memory, the processor generates a page fault exception. The exception handler for the page fault exception typically directs the operating system to load the page from disk storage into physical memory. When the page has been loaded in physical memory, a return from the exception handler causes the instruction that generated the exception to be restarted. The information that the processor used to map linear address into physical address space and to generate page fault exceptions (when necessary) is contained in &#039;&#039;&#039;page directories&#039;&#039;&#039; and &#039;&#039;&#039;page tables&#039;&#039;&#039; stored in memory.&lt;br /&gt;
====Paging Algorithms====&lt;br /&gt;
&#039;&#039;&#039;Demand Paging&#039;&#039;&#039;&amp;lt;br&amp;gt;Operating system copies a disk page into physical memory only if page fault occurs(page is not in mem ory).&amp;lt;br&amp;gt;Steps are as follows-&amp;lt;br&amp;gt;Attempt to access page&amp;lt;br&amp;gt;If page is valid then continue processing if its invalid a page fault occurs.&amp;lt;br&amp;gt;If memory reference is valid then &#039;&#039;&#039;page in&#039;&#039;&#039; the required page else terminate the process.&amp;lt;br&amp;gt;Schedule the disk operation to read the page into main memory.&amp;lt;br&amp;gt;Restart the instruction.&amp;lt;br&amp;gt;&#039;&#039;&#039;Anticipatory Paging&#039;&#039;&#039;&amp;lt;br&amp;gt;Sometimes also called &amp;quot;swap prefetch&amp;quot;, preloads a process&#039; non-resident pages that are likely to be referenced in near future. It attempts to reduce the number of page fault.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://foss.coep.org.in/coepwiki/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://foss.coep.org.in/coepwiki/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2025-08-12T13:25:52Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:CoEP_Main_Hall_1.jpg|thumb|right|300px|The Main Hall of College of Engineering, Pune]]&lt;br /&gt;
Welcome to &amp;lt;b&amp;gt;COEP Wiki&amp;lt;/b&amp;gt;. You can use your LDAP authentication (the one used for Internet proxy and Moodle) for logging in to the COEP Wiki. &lt;br /&gt;
&lt;br /&gt;
A Wiki is a web site developed collaboratively by a community of users, allowing any user to add and edit content.You can read more about wiki [http://www.mediawiki.org/wiki/How_does_MediaWiki_work%3F here] This Wiki is set up to help carry out assignments for students of [http://www.coep.org.in College of Engineering Pune ].&lt;br /&gt;
&lt;br /&gt;
You can create pages, discuss assignments on these pages, upload images(currently only is specific formats), etc. the way you want. However using the portals and course pages given below is suggested. &lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
You can read the wiki pages without login. For creating or editing the pages you need to login into wiki. You can login with your Moodle user name and passsword (or one which you use for Internet proxy). &amp;lt;br /&amp;gt;&lt;br /&gt;
Only members of College of Engineering, Pune can login into this wiki. If you are not a member then you can still read all the pages but cannot edit them.&lt;br /&gt;
&lt;br /&gt;
After login first time you are suggested to create user page and talk page so that there will be a communication between users of wiki.&lt;br /&gt;
&lt;br /&gt;
= Courses = &lt;br /&gt;
* [[Introduction to Inquiry, Thinking and Research]]&lt;br /&gt;
* [[Data Structures (Odd Semester 2014)]]&lt;br /&gt;
* [[Operating Systems]] (Even Semester 2012)&lt;br /&gt;
* [[FOSS Workshop (December 2014)]]&lt;br /&gt;
* [[Operating Systems 2015]]&lt;br /&gt;
* [[Introduction to Inquiry, Thinking and Research Sem IV 2015 ]]&lt;br /&gt;
* [[Open Technologies Workshop Oct 2015]]&lt;br /&gt;
* [[FOSS Development 2016]]&lt;br /&gt;
* [[Debian Packaging workshop 2nd Jan to 8th Jan 2017]]&lt;br /&gt;
* [[FOSS Development 2017]]&lt;br /&gt;
* [[Computer Networks 2020]]&lt;br /&gt;
&lt;br /&gt;
= Clubs =&lt;br /&gt;
* [[Astronomy Club]]&lt;br /&gt;
* [[CSAT(Satellite Club)]]&lt;br /&gt;
* [[Janeev Club]]&lt;br /&gt;
* [[CoFSUG | CoFSUG(CoEP&#039;s Free Software Users&#039; Group)]]&lt;br /&gt;
* [[Cultural Club]]&lt;br /&gt;
* Boat Club&lt;br /&gt;
&lt;br /&gt;
= Tutorials and FAQs = &lt;br /&gt;
Various [[Tutorials]] created by COEP Students.&lt;br /&gt;
* [[COEP Moodle FAQ]]&lt;br /&gt;
* [[COEP IT Handbook]]&lt;br /&gt;
* [[Important FOSS resources]]&lt;br /&gt;
&lt;br /&gt;
=Departments=&lt;br /&gt;
#[[Department of Applied Science |Applied Sciences ]]&lt;br /&gt;
#[[Department of Civil Engineering|Civil Engineering ]]&lt;br /&gt;
#[[Department of Computer Engineering and Information Technology|Computer Engineering and Information Technology]]&lt;br /&gt;
#[[Department of Electrical Engineering|Electrical Engineering]]&lt;br /&gt;
#[[Department of Electronics and Telecommunication Engineering|Electronics and Telecommunication Engineering]]&lt;br /&gt;
#[[Department of Instrumentation and Control Engineering|Instrumentation and Control Engineering]]&lt;br /&gt;
#[[Department of Mathematics|Mathematics]]&lt;br /&gt;
#[[Department of Mechanical Engineering|Mechanical Engineering]]&lt;br /&gt;
#[[Department of Metallurgy and Material Science Engineering|Metallurgy and Material Science Engineering]]&lt;br /&gt;
#[[Department of Production (Sandwich) Engineering|Production (Sandwich) Engineering]]&lt;br /&gt;
#[[Department of Town Planning|Town Planning]]&lt;br /&gt;
c&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
</feed>