Ubuntu tips: Add a PPA and update only that one

If you use ubuntu, you most probably have added some ppa-s in your system.
The problem is you have to update all the software sources after adding a ppa by `apt-get update` which is time consuming if you have a lot of software sources.

Y PPA Manager helps to cut down the process. You can only update that ppa easily with Y PPA Manager.

To show you how easy it is you need to execute command

update-ppa

like

sudo update-ppa ppa:videolan/stable-daily

This will add (if you haven’t already added the ppa) and update the ppa for you.

    To install Y PPA Manager:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager #for the last time
sudo apt-get update #for the last time
sudo apt-get install y-ppa-manager

How to open a process as daemon on Linux

Sometime we may need to open a process as daemon (the process should not die when the child process die). One of the easiest way to do that is to run the process from command line and add a & at the example. For example if you want Firefox to run from shell and don’t want to wait for Firefox to be closed, run “firefox &”.
But the problem with the approach is if you close the shell terminal, it will also close the process. You need to execute “exit” command to exit from shell properly. But if you use execute the process with “nohup” the problem is solved. For example, if you execute “nohup firefox &”, firefox will not close even if you close the shell.

It is very helpful if you want a process to run as a simple daemon. This is not the right way to make a process daemon, but this is a good workaround to get close to a daemon. So if you want a python script to run as daemon just run
nohup python /path/to/script.py &
and your process will run in background 🙂

How to add a system call in linux kernel (Ubuntu OS)

This is just a brief description, so read at your own risk.

I have tested & used it. So it should be working. Please install a fresh install of Ubuntu.

This tutorial is for both 32 and 64 bit x86 processors and operating system. I have assumed that you are working in Ubuntu 10.10 and using kernel version 2.6.37.3 . If you are using any other kernel version just replace 2.6.37.3 with your version. I am also assuming you have extracted the source code.

Now let the new system call’s name be “add2”.

1. Now you will find a “arch” folder in the source code folder. Open the file arch/x86/kernel/syscall_table_32.S in a text editor. Go to the end of the document and add this line –

	.long sys_add2		/* my code */

2. Now open arch/x86/include/asm/unistd_32.h and find out
#define __NR_prlimit64 340

Add a new line after this:

#define __NR_add2		341

Don’t just close yet. After 3-4 lines, you will find a line like
#define NR_syscalls 341
Change it to

#define NR_syscalls		342

4. Now edit arch/x86/include/asm/unistd_64.h
Find out:
#define __NR_prlimit64 302
__SYSCALL(__NR_prlimit64, sys_prlimit64)

Now after these two lines, add these two lines

#define __NR_add2				303
__SYSCALL(__NR_add2, sys_add2)

5. Now again in the source folder you will find a folder named include. Open the file include/linux/syscalls.h and go to the end of the file. Before the line
#endif
write this prototype definition line:

asmlinkage long sys_add2(int i,int j);

6. Now find out the kernel folder in the source directory. Create a new empty file in the kernel folder with the name “mysysteamcalls.c” . Add the following codes in the file:

#include<linux/linkage.h>
asmlinkage long sys_add2(int i,int j)
{
    return i+j;
}

7. Now open the Makefile in this folder(/kernel/Makefile) and find out
obj-y += groups.o
Add a new line before this line :

obj-y += mysysteamcalls.o

Ok, this is the edit you need to do to add a new system call. Now compile or recompile the source code and enjoy your new system call.

Here is a sample code to call the system call :

#include <stdio.h>
#include <linux/unistd.h>
#include <sys/syscall.h>

//comment the following line if you are using 64 bit, this number is the same used previously
#define sys_add2 341

//comment the following line if you are using 32 bit, this number is the same used previously
#define sys_add2 303

int main(void)
{
    int a,b,c;
    printf("Adding Two Numbers in Kernel Space\n");
    printf("Input a: ");
    scanf("%d",&a);
    printf("Input b: ");
    scanf("%d", &b);
    c = syscall(sys_add2, a, b);
    printf("System call returned %d\n", c);
    return 0;
}

Important note: To add a new system call, you don’t need to create a new file, you can just add a new function in the same “mysysteamcalls.c” file. And if you don’t create a new file you don’t have to do the step 7.

-Enzam