Thursday, 13 April 2017

Reset debian root password through KVM

Boot into grub, select single user but do not press enter.
Press e to bring you into edit mode.
Scroll down to the kernel line, it starts with “linux /boot/vmlinuz-2.6…….”
Scroll to the end of that line and press space key once and type
init=/bin/bash
Press Crtl x to boot
Then type
mount -rw -o remount /
Now you can right to disk and change password or whatever else you want

----------------------
referece:
https://derwynd.com/2011/04/14/debian-squeeze-change-root-password/


Wednesday, 12 April 2017

Deploy django on Debian with gunicorn using upstart

In my experience gunicorn is more stable and uses less memory than uwsgi to handle the same number of requests. It is also much simpler to configure and deploy.

The only issue with it is that finding good straightforward tutorial on its deployment hasn't been easy for me. The problem araise not by gunicorn but the rather convulted method of supervisor which adds more complexity to the process.

Fortunately there is the much simpler way to keep gunicorn running:‌ upstart

First you need to install pip and virtaulenv:

apt-get install python-pip
pip install virtualenv
Switch to a non-root user and create a virtualenv



su myuser 
virtualenv ~/.myenv
virtualenv ~/.myenv
activate the virtaualenv

source ~/.myenv/bin/activate

Install gunicorn while you'r on your virtualenv:

(.myenv)# pip install gunicorn


create a gunicorn.sh in  /path/to/project, like this:
#!/bin/bash
NAME="myproject"                                  # Name of the application
DJANGODIR=/path/to/project             # Django project directory
SOCKFILE=/tmp/gunicorn.sock  # we will communicte using this unix socket
USER=john                                        # the user to run as
GROUP=www-data                                     # the group to run
NUM_WORKERS=9                                     # twice the number of cpu cores
DJANGO_SETTINGS_MODULE=sai.settings             # which settings file should Django use
DJANGO_WSGI_MODULE=sai.wsgi                     # WSGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/user/.virtualenv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/john/.virtualenv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \
  --log-file=-
Note: DO NOT create /tmp/gunicorn.sock  
gunicorn will do that for you


Make sure that upstart is installed:

apt-get install upstart

Now create an upstart job in /etc/init to run gunicorn.sh

nano /etc/init/gunicorn.conf
And put in it:
description "Gunicorn application server handling myproject"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid john
setgid www-data
chdir /path/to/project
exec bash gunicorn.sh


Now you can start gunicorn like any service :

service gunicorn restart

The only remaining step is to pass request to gunicorn in nginx, by a file like this:

upstream myproject {
    server unix:///tmp/gunicorn.sock;    # the socket will be created automatically
    }
server {
#...other stuff
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host;
        if (!-f $request_filename) {
            proxy_pass http://myproject;
            break;
        }
    }
}
Note 2: If you just started upstart, you may need to  reboot to be able to service gunicorn restart.



That's it!
Restart nginx and enjoy gunicorn.



Tuesday, 28 March 2017

Take screeshot gallery of a video

#apt-get install ffmpeg
#apt-get install imagemagick
#!/bin/bash
# This script will create a screenshot gallery of a given video very fast


filename=$1

videolable=$1

#ffmpeg  -i $filename -r 0.0033 -vf scale=-1:120 -vcodec png capture-2d.png

ffmpeg -ss 00:00:10 -i $filename -frames 1 -vf "select=not(mod(n\,1000)),scale=320:240,tile=2x3" ff.png


res=`ffmpeg -i $filename 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+'`

size=`du -h $filename | awk '{print $1}'`

duration=`ffmpeg -i $filename 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//`


#montage -border 10x10 -pointsize 14  -background black -fill white -gravity NorthWest  -title "\n$filename ( $res )\nSize:$size  Duration:$duration "  out.png screenshotgallery.png



width=`convert ff.png -ping -format "%w" info:`
height=120
fontsize=20


text="$videolable\nResolution($res)\nSize:($size)\nDuration:$duration\n"




convert -background white -fill black  \
           -size ${width}x${height} -pointsize 24 label:${text}  label.gif






convert -append ff.png   label.gif out.jpg

rm ff.png

echo "Done!"

How to install ffmpeg on Debian 8

is now available for Jessy as a backport: https://packages.debian.org/jessie-backports/ffmpeg
Add something like this to /etc/apt/sources.list (with your preferred mirror):
deb http://ftp.uk.debian.org/debian jessie-backports main
Then
apt-get update
apt-get install ffmpeg

Source: https://superuser.com/a/1082860

Friday, 20 January 2017

Install ffmpeg in debian 8 jessie

Installing ffmpeg from source have been a pain in the ass for me that wasted 5 hours of my time with no success.

On the other hand ffmpeg is not in debian jessie repo. But thankfully there is still a simple solution:



It is now available for Jessy as a backport: https://packages.debian.org/jessie-backports/ffmpeg
Add something like this to /etc/apt/sources.list (with your preferred mirror):
deb http://ftp.debian.org/debian jessie-backports main
Then
apt-get update
apt-get install ffmpeg


Which installs `ffmpeg version 3.2.2-1~bpo8+1`


Thanks this good fella, Dan

Wednesday, 18 January 2017

Install torrent seedbox on debian vps


Thanks tutorial by Mikhail Danial - http://youtu.be/ahIdUr3yW64 (with slight modifications)



apt-get update

apt-get install -y apache2 nano

adduser --disabled-password --system --home /var/lib/deluge --gecos "SamRo Deluge server" --group deluge

touch /var/log/deluged.log

touch /var/log/deluge-web.log

chown deluge:deluge /var/log/deluge*

apt-get update

apt-get install -y deluged

apt-get install -y deluge-webui

nano /etc/default/deluge-daemon
-----------------------------------------------------------------------
# Configuration for /etc/init.d/deluge-daemon
# The init.d script will only run if this variable non-empty.
DELUGED_USER="deluge"
# Should we run at startup?
RUN_AT_STARTUP="YES"
-----------------------------------------------------------------------


nano /etc/init.d/deluge-daemon
-----------------------------------------------------------------------
#!/bin/sh
### BEGIN INIT INFO
# Provides:          deluge-daemon
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $network
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Daemonized version of deluge and webui.
# Description:       Starts the deluge daemon with the user specified in
#                    /etc/default/deluge-daemon.
### END INIT INFO

# Author: Adolfo R. Brandes
# Updated by: Jean-Philippe "Orax" Roemer

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Deluge Daemon"
NAME1="deluged"
NAME2="deluge"
DAEMON1=/usr/bin/deluged
DAEMON1_ARGS="-d"             # Consult `man deluged` for more options
DAEMON2=/usr/bin/deluge-web
DAEMON2_ARGS=""               # Consult `man deluge-web` for more options
PIDFILE1=/var/run/$NAME1.pid
PIDFILE2=/var/run/$NAME2.pid
UMASK=022                     # Change this to 0 if running deluged as its own user
PKGNAME=deluge-daemon
SCRIPTNAME=/etc/init.d/$PKGNAME

# Exit if the package is not installed
[ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
then
   log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
   exit 0
fi

if [ -z "$DELUGED_USER" ]
then
    log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME."
    exit 0
fi

#
# Function to verify if a pid is alive
#
is_alive()
{
   pid=`cat $1` > /dev/null 2>&1
   kill -0 $pid > /dev/null 2>&1
   return $?
}

#
# Function that starts the daemon/service
#
do_start()
{
   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started

   is_alive $PIDFILE1
   RETVAL1="$?"

   if [ $RETVAL1 != 0 ]; then
       rm -f $PIDFILE1
       start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \
       --exec $DAEMON1 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS
       RETVAL1="$?"
   else
       is_alive $PIDFILE2
       RETVAL2="$?"
       [ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1
   fi

   is_alive $PIDFILE2
   RETVAL2="$?"

   if [ $RETVAL2 != 0 ]; then
        sleep 2
        rm -f $PIDFILE2
        start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \
        --exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS
        RETVAL2="$?"
   fi
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred

   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2
   RETVAL2="$?"
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1
   RETVAL1="$?"
   [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2

   rm -f $PIDFILE1 $PIDFILE2

   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
}

case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
   do_start
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  stop)
   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1"
   do_stop
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  restart|force-reload)
   log_daemon_msg "Restarting $DESC" "$NAME1"
   do_stop
   case "$?" in
     0|1)
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
        # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  *)
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
   exit 3
   ;;
esac

:
-----------------------------------------------------------------------


chmod a+x /etc/init.d/deluge-daemon

update-rc.d deluge-daemon defaults

reboot -h now

------------------------

After new login:

mkdir /var/www/torrent

In browser vitis:

yourserverip::8112

Enter the server password 'deluge' and reset it.

Go to `Preferences` and set `/var/www/torrent` as the download path.

Good to Go!




This tutorial works on Debian  7 and 8. But in Debian 8 apache2 configs need to be a bit tweaked to show the files in /torrent folder.

You need to add these lines :

Options +Indexes
IndexOptions FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*

to /etc/apache2/sites-available/000-default.conf

and change the DocumentRoot from /var/www/html to /var/www

In order to be able to have proper directory listing

Source:
https://youtu.be/ahIdUr3yW64

Wednesday, 27 January 2016

How to Secure Specific URL in Apache

This article will help you secure specific url in Apache. For example our site has an url likehttp://tecadmin.net/admin/” and we need that only the authorized users or ips can access/admin/ section.

Setup IP Based Restriction on Specific URL

Step 1: Edit apache configuration file and add below entry in websites virtual host.
<Location /admin>
Order deny,allow
Deny from all
Allow from 192.168.10.111
Allow from 111.222.333.444
</Location>
Step 2: Save Apache configuration file and restart apache service.
# service httpd restart
Step 3: Try to access your site from any other ip. Also check from given ip in configuration file.

Setup User Authentication on Specific URL

Step 1: Edit apache configuration file and add below entry in website virtual host.
<Location /admin>
AuthUserFile /var/www/htpasswd/.htpasswd
AuthName "Password Protected Area"
AuthType Basic
Require valid-user
</Location>
Step 2: Create htpasswd file using below command.
# htpasswd -cm /var/www/htpasswd/.htpasswd myuser

New password:
Re-type new password:
Adding password for user myuser
Step 3:
Restart apache and access your site url. It will prompt for login details.
# service httpd restart
Thanks for using this article, I hope this article fulfill your needs. Click here to read more details about apache location directive.

Monday, 25 January 2016

Install redis 3 on Debian 7

The easiest way to install a Redis server is to just run
apt-get install redis-server -y  
Unfortunately, this will only install version 2.8.17 which doesn't have the features in 3.0+.

Manually Install Redis 3+

Redis 3.0 introduces Redis Cluster, a distributed implementation of Redis with automatic data sharding and fault tolerance, important speed improvements under certain workloads, improved AOF rewriting, and more.
Here's how to manually install the latest version.
apt-get update
apt-get install build-essential -y

wget http://download.redis.io/releases/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
apt-get install tcl8.5 -y
# optionally run "make test" to check everything is ok
make install
Redis is now installed. To configure redis to run as a background daemon run a script that came bundled with the files
cd utils
bash ./install_server.sh
You will be prompted for configuration values, but you may want to just press return to accept the defaults.

Extra

Check Version

redis-server --version  

Manage The Service

service redis_6379 [start | stop | restart]  

Start the Management Console

redis-cli  


Thursday, 16 July 2015

PDF join files and replace strings using pdftk

pdftk *.pdf cat output combined.pdf
 ===========

You can try to modify content of your PDF as follows
  1. Uncompress the text streams of PDF
    pdftk file.pdf output uncompressed.pdf uncompress
  2. Use sed to replace your text with another
    sed -e "s/ORIGINALSTRING/NEWSTRING/g" <uncompressed.pdf >modified.pdf
  3. If this attempt was successful, re-compress the PDF with pdftk
    pdftk modified.pdf output recompressed.pdf compress


Sources:
https://www.pdflabs.com/docs/pdftk-cli-examples/
http://stackoverflow.com/a/9872494/4151875

Saturday, 20 June 2015

eth1 connection of two servers in Debian

In order of connect two Debian servers  to comminucate through eth1 connect them using ethernet cable and use these settings in /etc/network/interfaces


===
backend

auto eth1
iface eth1 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        mtu 9000


======
frontend

auto eth1
iface eth1 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        mtu 9000