Jak znaleźć aplikację przywiązaną do konkretnego portu

Tym razem króciutki wpis. Jeśli podczas skanowania portów swojej maszyny (przykładowo narzędziem nmap) znajdziesz port, którego “pochodzenia” nie da się jednoznacznie ustalić możesz użyć następującej komendy

ksx4system@maryland:~$ sudo lsof -i :5000

dającej taki lub podobny wynik.

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lua 1302 prosody 6u IPv4 5989961 0t0 TCP *:5000 (LISTEN)

W tym przypadku port 5000 okupuje aplikacja Prosody (serwer usług Jabber/XMPP).

Jak skompilować kernel dla Debiana 6

Jeśli pragniesz zoptymalizować swój serwer, wycisnąć ile się da z laptopa czy też dodać obsługę nowego sprzętu na dowolnej z tych maszyn być może będzie trzeba skompilować kernel. Wbrew pozorom nie jest to bardzo trudne – wystarczy troche wiedzy i dużo cierpliwości.

  1. Upewnij się czy podstawowe zależności zostały rozwiązane.

    root@dev:/# apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential make

  2. Pobierz źródła oraz ewentualne łatki (sugeruję dodać tuxonice i bfs).
  3. Rozpakuj źródła.
  4. Skopiuj łatki do katalogu ze źródłami. Wykorzystasz je w następujący sposób:

    root@dev:/linux-2.6.36.1# patch -p1 < nazwapliku.patch

    po wykonaniu tej czynności można przejść dalej.

  5. Przygotuj kernel do kompilacji i skopiuj konfigurację aktualnego kernela.

    root@dev:/linux-2.6.36.1# make clean && make mrproper && cp /boot/config* .config && make menuconfig

    w tym momencie powinien się uruchomić niebieski interfejs menuconfig – należy wybrać “Load an Alternate Configuration File”.

  6. Zmodyfikuj konfigurację. Jeśli nie wiesz jak to zrobić – poczytaj o opcjach, które widzisz (bardzo często Wikipedia zawiera odpowiednie informacje) lub nie rób nic. Jeśli chcesz wyjść z menuconfig klikaj do skutku exit. Oczywiście na pytanie czy chcesz zapisać konfigurację odpowiedz twierdząco.
  7. Rozpocznij kompilację i budowę paczki *.deb:

    root@dev:/linux-2.6.36.1# make-kpkg –append-to-version=-xyz –revision=1 –initrd kernel_image kernel_headers

    xyz może być dowolną nazwą, revision podnoś o 1 przy każdej przebudowie paczki. Proces kompilacji potrwa od 30 minut do kilku(nastu?) godzin, wszystko zależy od wydajności wykorzystywanej maszyny.

  8. Zainstaluj świeżą paczke:

    root@dev:/# dpkg -i *.deb

    przy odrobinie szczęścia po restarcie będziesz cieszyć się nowym, własnym kernelem. :)

W tytule zamieściłem informację, iż jest to poradnik dla Debiana 6, lecz nie ma żadnych przeszkód aby zrobić wszystko dokładnie tak samo pod Ubuntu. Prawdopodobnie za pierwszym podejściem nie uda Ci się stworzyć działającego jądra – nie przejmuj się, to nornalne. Drogą prób i błędów dojdziesz do idealnej dla siebie konfiguracji. ;)

edycja z dnia 10/10/11:

Jeśli posiadasz procesor Intel z funkcją HT lub dowolną konfigurację wielordzeniową/wieloprocesorową opartą na procesorach innej marki możesz nieco przyspieszyć proces kompilacji. Użyj polecenia

export CONCURRENCY_LEVEL=n

gdzie n to wynik następującej komendy

grep -c ^processor /proc/cpuinfo

a następnie uruchom make-kpkg.

Debian 6 i błąd vzquota w containerach OpenVZ

W idealnym świecie dostawcy usług internetowych podchodziliby do aktualizacji oprogramowania na serwerach niezwykle sumiennie. Użytkownik nigdy nie musiałby walczyć z bugami niezałatanego środowiska wirtualizacji czy też przepisywać skryptów z myślą o przestarzałych wersjach interpretatorów PHP czy Pythona.

Załóżmy, że w containerze OpenVZ został zainstalowany Debian 6.0 squeeze, a narzędzia vzctl na maszynie matce nie zostały zaktualizowane. Podczas próby instalacji dowolnego programu użytkownik może (ale nie musi) natknąć się na poniższy błąd:

insserv: can not symlink(../init.d/vzquota, ../rc0.d/S18vzquota): File exists
insserv: can not symlink(../init.d/vzquota, ../rc1.d/S18vzquota): File exists
insserv: can not symlink(../init.d/vzquota, ../rc2.d/S18vzquota): File exists
insserv: can not symlink(../init.d/vzquota, ../rc3.d/S18vzquota): File exists
insserv: can not symlink(../init.d/vzquota, ../rc4.d/S18vzquota): File exists
insserv: can not symlink(../init.d/vzquota, ../rc5.d/S18vzquota): File exists
insserv: can not symlink(../init.d/vzquota, ../rc6.d/S18vzquota): File exists

rozwiązanie jest bardzo proste, należy zamienić pierwsze linie pliku /etc/init.d/vzquota z

#!/bin/sh
### BEGIN INIT INFO
# Provides: vzquota
# Required-Start:
# Required-Stop:
# Should-Start: $local_fs $syslog
# Should-Stop: $local_fs $syslog
# Default-Start: 0 1 2 3 4 5 6
# Default-Stop:
# Short-Description: Fixed(?) vzquota init script
### END INIT INFO

na

#!/bin/sh
### BEGIN INIT INFO
# Provides: vzquota
# Required-Start: $local_fs $time $syslog
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start vzquota at the end of boot
# Description: Configure OpenVZ disk quota for a container.
### END INIT INFO

a następnie wydać komendę

root@vps:/# chattr +i /etc/init.d/vzquota

i wykonać restart serwera. W przypadku konieczności dokonania zmian w powyższym pliku konieczne będzie wykonanie poniższej komendy oraz restart.

root@vps:/# chattr -i /etc/init.d/vzquota

P.S. Nie, to nie jest eleganckie rozwiązanie. Spróbuj napisać do swojego dostawcy, powiedzieć mu co jest źle i podsunąć rozwiązanie. Proszę, traktuj powyższy tutorial wyłącznie jako ostatnią deskę ratunku!