Linux TCP 튜닝 Linux 2017.12.06 23:28

sysctl -w net.ipv4.tcp_window_scaling="1"

sysctl -w net.core.rmem_default="253952"

sysctl -w net.core.wmem_default="253952"

sysctl -w net.core.rmem_max="16777216"

sysctl -w net.core.wmem_max="16777216"

sysctl -w net.ipv4.tcp_rmem="253952 253952 16777216"

sysctl -w net.ipv4.tcp_wmem="253952 253952 16777216"

sysctl -w net.core.netdev_max_backlog="30000"

sysctl -w net.core.somaxconn="1024"

sysctl -w net.ipv4.tcp_max_syn_backlog="1024"

ulimit -SHn 65535

sysctl -w net.ipv4.tcp_max_tw_buckets="1800000"

sysctl -w net.ipv4.tcp_timestamps="1"

sysctl -w net.ipv4.tcp_tw_reuse="1"



========

http://meetup.toast.com/posts/53

http://meetup.toast.com/posts/54

http://meetup.toast.com/posts/55

출처: http://xmodulo.com/install-puppet-server-client-centos-rhel.html


방화벽상태확인

firewall-cmd --list-all


포트추가허용 sample

# firewall-cmd --permanent --zone=public --add-port=8140/tcp

# firewall-cmd --reload



포트제거차단 sample

# firewall-cmd --permanent --zone=public --remove-port=8140/tcp

# firewall-cmd --reload



포트 포워딩 sample

# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

# firewall-cmd --reload



[CentOS] 7으로 버전업되면서 달라진 것

출처: https://www.certdepot.net/rhel7-rc-local-service/


1. 기본설정상태에서 rc.local이 자동 실행되지 않는다.

-- 해결법

# chmod u+x /etc/rc.d/rc.local

# systemctl start rc-local



2. 'ifconfig'가 없다T_T

--해결법(설치해도 되지만...)

'ip addr'로 대체


3. 'netstat'이 없다T_T

--해결법(설치해도 되지만...)

'ss'로 대체



firewalld 각종 명령어

출처: 

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html


* 설정하고 나면 리로드해야 변경된 상태를 확인할 수 있다.

firewall-cmd --reload


* firewalld 데몬 시작하기

systemctl start firewalld.service


* firewalld 실행여부 확인하기

firewall-cmd --state


* 디펄트 존 확인하기

firewall-cmd --get-default-zone


* 활성화된 존과 연결된 인터페이스 확인하기

firewall-cmd --get-active-zones


* 디펄트 존의 환경설정 보기 

firewall-cmd --list-all


* 사용가능한 존 목록 확인하기

firewall-cmd --get-zones


* home존의 환경설정 보기

firewall-cmd --zone=home --list-all


* 인터페이스의 존을 변경하기

firewall-cmd --zone=home --change-interface=eth0

or "/etc/sysconfig/network-scripts/"에 있는 ifcfg-eth0와 같은  파일에 ZONE=home과 같이 설정을 추가하면 해당 존으로 인터페이스가 잡힌다.


* 디펄트 존 변경하기

firewall-cmd --set-default-zone=home


* 미리 정의된 서비스 포트 목록 확인하기(정의된 위치: /usr/lib/firewalld/services/) [해당 서비스정의 파일을 복사하여 내용수정하면 다른 정의 파일 생성가능]

firewall-cmd --get-services


* 사용자 존 생성하기

firewall-cmd --permanent --new-zone=publicweb


* 사용자 존 삭제하기

firewall-cmd --permanent --delete-zone=publicweb


***************************************************

Configuring IP Address Masquerading

***************************************************

* external존을 Masquerading 가능상태인지 확인하기

firewall-cmd --zone=external --query-masquerade


* external존을 Masquerading 가능상태로 만들기

firewall-cmd --zone=external --add-masquerade


* external존을 Masquerading 불가능상태로 만들기

firewall-cmd --zone=external --remove-masquerade


* 설정된 포워딩 포트(22)로 들어온 패킷을 특정 IP(192.0.2.55)의 같은 포트로 포워딩하기

firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.55


* 설정된 포워딩 포트(22)로 들어온 패킷을 특정 IP(192.0.2.55)의 다른 포트(2055)로 포워딩하기

firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.0.2.55



Varnish 설치 하기 Linux 2017.05.04 22:34

대상 CentOS 6.x


yum으로 기본설치를 하면 2.x의 오래된 버전이 깔려서 repo를 추가 해서 최신 4.1로 설치한다.


rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.1.el6.rpm


참고) CentOS 7은 아래 el7 사용.

rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.1.el7.rpm


다음 yum으로 설치한다.

yum install -y varnish


varnish는 캐시 저장소를 메모리 또는 디스크 (또는 섞어서 여러개도 가능)를 쓰는데.
v4.1은 기본이 메모리 256MB 이다.  이 부분을 시스템 사양에 맞게 (여기선 2GB로) 바꿔준다.


vim /etc/sysconfig/varnish

여기서 아래 부분을 찾아서 256M 을 2G로 바꿔준다.

VARNISH_STORAGE_SIZE=256M


서비스 포트를 80으로 바꿔준다.

VARNISH_LISTEN_PORT=80

ipv6를 지원하지 않는 서버에서는 VARNISH_LISTEN_ADDRESS을 0.0.0.0으로 추가 해준다.

VARNISH_LISTEN_ADDRESS=0.0.0.0


이부분을 안하면 아래 같은 에러가 뜬다.

Starting Varnish Cache: Error: Cannot open socket: :80: Address family not supported by protocol






실제 백엔드랑 동작 설정은 /etc/varnish/default.vcl 에서 한다.
http://book.varnish-software.com/4.0/chapters/VCL_Basics.html 참고 해서 설정해보자..


vim /etc/varnish/default.vcl


vcl 4.0;


import directors;

import std;


backend sitea {

  .host = "xxx.xx.xxx.105";

  .port = "8080";

}

backend siteb {

  .host = "xxx.xx.xxx.104";

  .port = "8080";

}


acl purge {

  "localhost";

  "127.0.0.1";

}

# Define the director that determines how to distribute incoming requests.

sub vcl_init {

  new bar = directors.fallback();

  bar.add_backend(sitea);

  bar.add_backend(siteb);

}


sub vcl_recv {

  set req.backend_hint = bar.backend();


  set req.http.grace = "none";


  # Do not cache these paths.

  if (req.url ~ "^/status\.php$" ||

      req.url ~ "^/admin" ||

      req.url ~ "^/.*\.jsp$" ||

      req.url ~ "^.*/ajax/.*$" ||

      req.url ~ "^.*/ahah/.*$") {


    return (pass);

  }


  if (req.url ~ "(?i)\.(pdf|cab|asc|dat|txt|doc|xls|ppt|tgz|csv|png|gif|jpeg|jpg|ico|swf|css|js)(\?.*)?$") {

    unset req.http.Cookie;

  }



  if (req.http.Cookie) {

    # 1. Append a semi-colon to the front of the cookie string.

    # 2. Remove all spaces that appear after semi-colons.

    # 3. Match the cookies we want to keep, adding the space we removed

    #    previously back. (\1) is first matching group in the regsuball.

    # 4. Remove all other cookies, identifying them by the fact that they have

    #    no space after the preceding semi-colon.

    # 5. Remove all spaces and semi-colons from the beginning and end of the

    #    cookie string.

    set req.http.Cookie = ";" + req.http.Cookie;

    set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");

    set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]+|SSESS[a-z0-9]+|NO_CACHE)=", "; \1=");

    set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");

    set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");


    if (req.http.Cookie == "") {

      # If there are no remaining cookies, remove the cookie header. If there

      # aren't any cookie headers, Varnish's default behavior will be to cache

      # the page.

      unset req.http.Cookie;

    }

    else {

      # If there is any cookies left (a session or NO_CACHE cookie), do not

      # cache the page. Pass it on to Apache directly.

      return (pass);

    }

  }

  # Check the incoming request type is "PURGE", not "GET" or "POST".

  if (req.method == "PURGE") {

    # Check if the IP is allowed.

    if (!client.ip ~ purge) {

      # Return error code 405 (Forbidden) when not.

      return (synth(405, "Not allowed."));

    }

    return (purge);

  }

}


sub vcl_deliver {

  set resp.http.grace = req.http.grace;


  if (obj.hits > 0) {

    set resp.http.X-Varnish-Cache = "HIT";

  }

  else {

    set resp.http.X-Varnish-Cache = "MISS";

  }

}


sub vcl_hit {

    if (obj.ttl >= 0s) {

        # normal hit

        return (deliver);

    }

    # We have no fresh fish. Lets look at the stale ones.

    if (std.healthy(req.backend_hint)) {

        # Backend is healthy. Limit age to 10s.

        if (obj.ttl + 10s > 0s) {

            set req.http.grace = "normal(limited)";

            return (deliver);

        } else {

            # No candidate for grace. Fetch a fresh object.

            return(fetch);

        }

    } else {

        # backend is sick - use full grace

        if (obj.ttl + obj.grace > 0s) {

            set req.http.grace = "full";

            return (deliver);

        } else {

            # no graced object.

            return (fetch);

        }

    }

}


sub vcl_backend_response {

    set beresp.ttl = 10s;

    set beresp.grace = 1h;

}

html 파일을 txt로 바꾼다면


for filename in *.html
do
 mv "$filename" "${filename%.html}.txt"
done



${filename%.*} 이렇게 하면 파일명 나오고

${filename##*.} 이렇게 하면 확장자가 나온다.

filename=$(basename "$fullpath_filename")
name="${filename%.*}"
ext="${filename##*.}"


출처 : https://www.conory.com/note_linux/42241


원래 부팅시 정해진 서비스 또는 스크립트를 실행시키는 건 init (System V Init)라는 프로그램의 몫이였습니다. 유닉스가 처음 생길때부터 그래왔고, 지금도 그렇습니다.(하지만 지금은 다른 아이로 교체되는 시기입니다.) init는 그 이름처럼 리눅스의 초기화부분을 담당합니다.


init 사용자들이 /etc/rc.d/init.d 디렉토리에 부팅시 실행할 서비스 스크립트를 넣으면, init는 부팅이나 특정행동이 있을때 그 스크립트들을 자동으로 실행시키는 역활을 했었습니다. 그러면 사용자들은 chkconfig명령으로 자동실행 서비스를 관리하거나 service start 명령으로 서비스들을 실행키거나 끌 수 있었습니다.


하지만 centos 7을 넘어온 현재...

끝까지 유지될 것 같았던 init는 systemd이라는 새로운 아이에게 임무를 빼앗버렸답니다. 결국 유눅스 탄생부터 항상 init가 있었던 자리.. 프로세스1(PID 1)의 자리 또한 systemd에게 빼앗기고 말았습니다. 

따라서 centos 7에서는 부팅 서비스를 systemd 에서 관리하게 되었습니다. init는 없어지지는 않았지만 제 기능을 하지못하는 상태입니다.



1. init를 밀어낸 새로운 아이 systemd의 정체

systemd는 init에 비해 우월한 성능과 뭐든지 잘하는 재능(기능)을 가지고 있었습니다. 그야말로 "엄친아"였던 것입니다. 그러니까 개발자들도 systemd 매력에 흠뻑 빠졌기에 데려왔겠죠.. 


systemd는 정말 기능이 많습니다. 서비스관리, 시스템 로그관리, 사용자관리, 시간, 원격, cgroup 관리등.. 참 할 수 있는 일이 많습니다. 시스템의 전반적인 관리를 전부 systemd 이 담당하고 있습니다. 그리고 아이는 부팅시 실행하는 서비스를 최소화하고, 추후 병렬실행이라는 정책을 갖고 있었습니다. 때문에 centos 7 에서는 부팅시간이 많이 잛아졌답니다.


참조사항 : http://www.freedesktop.org/wiki/Software/systemd/


잡설이지만, 아이를 데려오기전 말들이 많았다고 해요.. 기능많은 아이가 "한가지만 잘하자"라는 유닉스의 철학(?)과 맞지않다는 의견도 있었고, 오랫동안 함께한 init를 버리자니, 슬프다(?)는 의견도 있었습니다. 이처럼 논란이 있었다고 해요.. 집안(리눅스)에 새로운 아이를 들이는 문제로...



2. systemd 잠시 살펴보기

이 글의 목적과는 별로 상관없지만, 그래도 새로운 아이를 만났으니, 한번 살펴봅시다.


먼저 systemd의 설정파일들은 /etc/systemd 에 있습니다. 

( bootchart.conf  logind.conf  system.conf  user.conf )


systemd는 설정파일과 미리 정의된 Service, Target 파일을 통해서 시스템을 제어하게 됩니다. 파일이 있는 디렉토리는 다음과 같습니다.

  • 관련된 바이너리 실행파일 : /usr/lib/systemd
  • Service, Target 파일 : /usr/lib/systemd/system


* 유용한 명령어

# systemd-analyze : 부팅에 걸린시간 표시

# systemd-analyze blame : 부팅시 서비스별 걸린 시간표시

journalctl : 부팅을 포함한 전체적인 시스템 로그

# journalctl -b : 마지막 부팅 이후 시스템 로그

# hostnamectl : 호스트 이름표시

# hostnamectl set-hostname [변경이름] : 호스트이름 변경



3. systemd 에서 서비스 관리하기

A. 서비스 상태표시


- 존재하는 전체 서비스 목록

# systemctl 


- 서비스 목록 (활성화 여부만 표시) 

# systemctl list-unit-files


- 부팅시 실행에 실패한 서비스목록

# systemctl --failed


- 서비스 활성화 여부

# systemctl is-enabled [서비스명]


- 서비스 현재 동작 여부

# systemctl is-active [서비스명]


- 서비스의 자세한 상태 (해당 서비스의 로그도 표시)

# systemctl status -l [서비스명]



B. 서비스 제어

서비스를 활성화하게 되면 부팅시 해당 서비스가 자동실행됩니다.


- 서비스 활성화

# systemctl enable [서비스명]


- 서비스 비활성화

# systemctl disable [서비스명]


- 서비스 시작

# systemctl start [서비스명]


- 서비스 종료

# systemctl stop [서비스명]


- 서비스 재시작

# systemctl restart [서비스명]


- 서비스 갱신

# systemctl reload [서비스명]


위의 서비스 설정을 데몬에 즉시 반영하려면 아래 명령어를 실행하면 됩니다.

#systemctl daemon-reload


- 서비스와 관련된 프로세스도 모두 죽임

# systemctl kill [서비스명]

| 복제된 문서입니다. (원본) https://www.conory.com/note_linux/42241

출처 : https://github.com/h2oai/h2o-2/wiki/installing-python-2.7-on-centos-6.3.-follow-this-sequence-exactly-for-centos-machine-only




세부 사항은 출처 참고.

yum install -y centos-release-SCL
yum install -y python27

Okay for centos 6.4 also On apu.0xdata.loc, after this install was done

$ which python 
/usr/local/bin/python

$ python -V
Python 2.7.3

$ ls -ltr /usr/local/bin/pyth*
lrwxrwxrwx 1 root root      24 Jan 30  2013 /usr/local/bin/python -> /usr/local/bin/python2.7
-rwxr-xr-x 1 root root 6162289 Sep  3 00:59 /usr/local/bin/python2.7
-rwxr-xr-x 1 root root    1624 Sep  3 01:00 /usr/local/bin/python2.7-config

So yum will use '/usr/bin/python' which is 2.6

$ /usr/bin/python -V
Python 2.6.6

"python" will give you python 2.7.

"python2.7" will give you python 2.7.

"easy_install" and "easy_install-2.7" will easy install for python 2.7. While separate files, they both seem to install into /usr/local/lib/python2.7/site-packages/

$ ls -ltr /usr/local/bin | grep easy_
-rwxr-xr-x   1 root root     340 Jan 30  2013 easy_install-2.7
-rwxr-xr-x   1 root root     332 Jan 30  2013 easy_install

note the dash before the 2.7

The easy_install's in /usr/bin are for 2.6

$ ls -ltr /usr/bin/easy*
-rwxr-xr-x. 1 root root 331 Nov 11  2010 /usr/bin/easy_install-2.6
-rwxr-xr-x. 1 root root 323 Nov 11  2010 /usr/bin/easy_install

I would recommend python 2.7 on all local machines

I suspect everyone is already ok?. To check:

[root@apu etc]# python -V
Python 2.7.3



PIP랑 YUM 확인 필요... --> 출처 링크 참조..



아님그냥 pyenv 쓰자.

Mac에서 저장한 파일명이 한글로 되어 있을경우

윈도에서 보면 자소가 분리 되어 보이는 경우가 있다.

이는 Windows와 Linux에서는 NFC 라는 유니코드(한글) 조합방식을 쓰는 반면에

Mac은 NFD라는 유니코드(한글) 조합방식을 쓰기 때문이다.

자세한건 다음 링크 참조



어째든 우리는 Mac서 저장한 NFD 파일명을 NFC형태의 파일명으로 바꿀려고 합니다.

방법은 그냥 python의 nfd2nfc 모듈을 쓰면 됩니다.

https://pypi.python.org/pypi/nfd2nfc/


그럼 nfd2nfc 설치 방법은 아래와 같습니다.

pip로 설치 되어야 하기 때문에 pip를 먼저 설치하고 nfd2nfc를 설치합니다.


커맨드창을 열고 하기 처럼 입력합니다.


$ sudo easy_install pip
$ sudo pip install nfd2nfc
$ nfd2nfc 경로명

또는 더 간단하게  convmv 로 할 수 있습니다. 

$ convmv --notest -nfc -f utf8 -t utf8 파일명

PS. MAC에서 둘다 설치가 가능하지만 nfc로 파일명이 바뀌지 않습니다.

이유는 FileSystem Layer에서 NFD만 지원하도록 되어 있기 때문이라고 합니다.

다만 콘솔에서 파일명 출력은 각각 NFD와 NFC로 할수 있습니다. (실제 파일명 저장이 아닌 텍스트 출력)

MAC에서 한글이 NFD인지 NFC인 확인하기 가장 쉬운 방법은 SublimeText에 붙여 넣어보면 됩니다.

SublimeText는 NFD를 지원하지 않습니다.

Kali Linux에서 우분투의 패키지를 마음대로 설치해보도록 하자.


출처 : http://www.blackmoreops.com/2014/02/21/kali-linux-add-ppa-repository-add-apt-repository/


A Personal Package Archive (PPA) is a special software repository for uploading source packages to be built and published as an APT repository by Launchpad or a similar application. While the term is used exclusively within Ubuntu, Launchpad host Canonical envisions adoption beyond the Ubuntu community.


Debian allows users to add and use PPA repositories by an application named add-apt-repository however, Kali Linux didn’t include this in their default package list. With Kali, because this is a special purpose application and certain modifications were made to make it work for what it does best (Penetration Test), there’s a chance that by adding untested and unsupported PPA repositories and application you might end up breaking your installation.


However, PPA is a powerful tool to have and a lot of the specific applications that are not available in repositories are available via PPA repositories. Users should take extra care before adding unknown and random repositories as it might very well break other things. I mean, how do you know the PPA owner didn’t add some harmful code in their system? Generally, you don’t. Then again, how do you know that Linux Kernel doesn’t have something that’s spying on your activity? But I guess that doesn’t matter, your ISP would be happy enough to hand over your online activity to NSA anyway … I could go on and on, but let’s not waste more time and move to actual post “Kali Linux add PPA repository add-apt-repository” .. so here goes ..


Step 1: Install required applications

First we install Python Software properties package.

apt-get install python-software-properties

Kali Linux add PPA repository add-apt-repository - install python-software-properties - 1 - blackMORE Ops

Next we install apt-file

apt-get install apt-file

Kali Linux add PPA repository add-apt-repository - install apt-file - 2 - blackMORE Ops

Update apt-file.

apt-file update

Kali Linux add PPA repository add-apt-repository - update apt-file - 3 - blackMORE Ops

This takes a while, so in case your apt-file update is SLOW, you might want to try and fix that as well. (Note that I got repo.kali.org in my /etc/apt/sources.list file instead of http.kali.org.)

Once apt-file update is complete, you should be able to search for it.

apt-file search add-apt-repository

Kali Linux add PPA repository add-apt-repository - search apt-file - 4 - blackMORE Ops

Your output should look similar to this:

python-software-properties: /usr/bin/add-apt-repository
python-software-properties: /usr/share/man/man1/add-apt-repository.1.gz

 

Step 2: Use our own code for add-apt-repository

The default add-apt-repository application located in (/usr/bin/add-apt-repository) works for Debian. So if you’re using Kali, chances are it won’t work. There’s a nice fix for that which I will add at the bottom of this post, (try them on VirtualBox if you feel like). But I found we can just mimic Ubuntu Oneiric to make add-apt-repository work.

cd /usr/sbin
vi add-apt-repository

Kali Linux add PPA repository add-apt-repository - adding add-apt-repository code - 5 - blackMORE Ops

Add the following code and save the file.

#!/bin/bash
if [ $# -eq 1 ]
NM=`uname -a && date`
NAME=`echo $NM | md5sum | cut -f1 -d" "`
then
  ppa_name=`echo "$1" | cut -d":" -f2 -s`
  if [ -z "$ppa_name" ]
  then
    echo "PPA name not found"
    echo "Utility to add PPA repositories in your debian machine"
    echo "$0 ppa:user/ppa-name"
  else
    echo "$ppa_name"
    echo "deb http://ppa.launchpad.net/$ppa_name/ubuntu oneiric main" >> /etc/apt/sources.list
    apt-get update >> /dev/null 2> /tmp/${NAME}_apt_add_key.txt
    key=`cat /tmp/${NAME}_apt_add_key.txt | cut -d":" -f6 | cut -d" " -f3`
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
    rm -rf /tmp/${NAME}_apt_add_key.txt
  fi
else
  echo "Utility to add PPA repositories in your debian machine"
  echo "$0 ppa:user/ppa-name"
fi

Note: In this line echo "deb http://ppa.launchpad.net/$ppa_name/ubuntu oneiric main" >> /etc/apt/sources.list I’ve usedOneiric. You can try to use LucidRaring or Saucy as per your choice.


Now chmod and chown the file.

Kali Linux add PPA repository add-apt-repository - chown and chmod add-apt-repository - 6 - blackMORE Ops

 

chmod o+x /usr/sbin/add-apt-repository 
chown root:root /usr/sbin/add-apt-repository

 

Step 3: Adding a PPA repository via add-apt-repository in Kali Linux

Now that we added the correct code, we can use add-apt-repository to add a PPA repository. I tried the following to add themes and custom icons in Kali Linux.

Kali Linux add PPA repository add-apt-repository - adding PPA Repository using add-apt-repository - 7 - blackMORE Ops

 

/usr/sbin/add-apt-repository ppa:noobslab/themes
/usr/sbin/add-apt-repository ppa:alecive/antigone

Once you’ve added a PPA repository via add-apt-repository in Kali Linux, you need to update your package list.

apt-get update

You’ll see that your package list is now including PPA repository.

 

Step 4: Testing

Now that we have added add-apt-repository to add PPA repository in Kali Linux, we can try to add some themes and custom icons. To keep things clean, I’ve moved this part in a different describing adding custom themes and icons in Kali Linux.

 

Step 5: Advanced Way

(Continued from Step 2: Paragraph 1)

In Step 2, paragraph 1, I pointed that we need to use our own code to use add-apt-repository. Following is a way to bypass that and use /usr/bin/add-apt-repositoryby modifying your Distribution ID. I again advise that you  try this part in Virtual Box so that you can roll back your changes.

Step 5.a Install Python Software Properties:

Install Python Software properties package.

apt-get install python-software-properties -y

 

Step 5.b Change Distribution ID, Release, Codename and Description

Change your Distribution ID to Ubuntu, Release to 12.04, Codename to Precise and Description to Ubuntu 12.04 LTS.

echo -e "DISTRIB_ID=Ubuntu\nDISTRIB_RELEASE=12.04\nDISTRIB _CODENAME=precise\nDISTRIB_DESCRIPTION="Ubuntu 12.04 LTS"" >> /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=”Ubuntu 12.04 LTS”

 

UPDATE: 27/02/2014 – Added code for Ubuntu Oneiric 11.10

 

echo -e "DISTRIB_ID=Ubuntu\nDISTRIB_RELEASE=11.10\nDISTRIB _CODENAME=oneiric\nDISTRIB_DESCRIPTION="Ubuntu 11.10"" >> /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION=”Ubuntu 11.10″

 

That mean’s now you can either use Precise or Oneiric codes as you feel like.

Kali Linux add PPA repository add-apt-repository - adding PPA Repository by modifying lsb_release details - 8 - blackMORE Ops

 

Now you should be able to add PPA just like normal.

 

Step 5.c Add PPA Repositories

Add PPA repositories using usual /usr/bin/add-apt-repository

add-apt-repository ppa:upubuntu-com/chat
apt-get update

 

Step 5.d Install something (i.e.Skype?)

Now we can install Skype..

apt-get install skype

 

Step 5.e Rollback changes

No change is much good without a rollback strategy.

To rollback your changes to Distribution ID, Release, Codename and Description, do the following,

echo -e "DISTRIB_ID=Debian\nDISTRIB_RELEASE=Kali Linux 1.0.6\nDISTRIB _CODENAME=n/a\nDISTRIB_DESCRIPTION="Debian GNU/Linux Kali Linux 1.0.6"" >> /etc/lsb-release

And to confirm, do another lsb_release -a

lsb_release -a

Output:

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux Kali Linux 1.0.6
Release:    Kali Linux 1.0.6
Codename:   n/a

 

HUH .. GOTCHA …..

Just kidding… You don’t actually have to do it (well you could, but what’s the point to making things complicated). You could just delete/etc/lsb_release file that was created in Step 5.e.

rm /etc/lsb_release

We again do antther lsb_release -a to confirm.. See screenshot below:

Kali Linux add PPA repository add-apt-repository - adding PPA Repository by rollback lsb_release details - 9 - blackMORE Ops

Both ways works, but I prefer the second way where you delete /etc/lsb_release file. This file didn’t exist until we ran Step Step 5.e. So by deleting this file it doesn’t break or damage anything. So yes, just delete that file after you’ve installed whichever PPA you want.

 

Conclusion

As I’ve pointed in my first paragraph that by adding PPA repositories, you might break your system, so I will add a disclaimer here…

Disclaimer: This guide shows how to add PPA Repositories using add-apt-repository in Kali Linux that is usually not recommended. Readers should know how to repair their system and try these in Virtual Environment to avoid accidental breaks. We take no responsibility. Like Linux itself, you use these information’s as it is.

Thanks for reading.

If this worked for you, please share this article and like us on Facebook/Twitter.