Ku Pamięci DRAC+Linux

Tak na wszelki wypadek... http://linux.dell.com/wiki/index.php/Repository/hardware

Debian Lenny i php-dbase

Pomimo wielu paczek w debianie czasami ze względu na ideologię mojej ulubionej serwerowej dystrybucji (na desktopie używam Archa lub Ubuntu) czegoś może nie być. Tak jest na przykład z php-dbase. Od wydania lenny nie ma dbase nawet w źródłach repozytorów debiana. Oto krótki, może nie idealny przepis na paczkę php-dbase:
Na początku instalujemy:
- subversion
- dh-make-php
- php5-dev
apt-get install subversion dh-make-php php5-dev
Oraz źródełka php:
apt-get source php5
Następnie wchodzimy do katalogu ze źródłami php oraz do katalogu ext. Tutaj musimy ściagnąć dbase z svna:
svn co http://svn.php.net/repository/pecl/dbase/branches/PHP_5_2/ && mv PHP_5_2 dbase && cd dbase
Kolejnym krokiem jest przygotowanie i zbudowanie paczki:
pear package package.xml && dh-make-pear dbase-5.0rc1.tgz && cd php-dbase-5.0rc1 && dpkg-buildpackage -us -uc
Tak oto mamy gotową paczkę deb z dbase dla php ]:->

HP DL145 G2 iLO password recovery na Linuksie

Wpadł mi w łapki serwer HP DL145 G2 z wbudowaną kartą do zarządzania zdalnego iLO. Problem polegał na tym, że standardowy użytkownik i hasło (admin/admin) nie działały, więc trzeba było się tam jakoś "włamać". HP w takiej sytuacji rekomenduje flashowanie nowym firmwarem, co powoduje usunięcie wszelkich ustawień, ale jestem zbyt leniwy na takie zabawy (sic!). Jako, że iLO jest zgodne z IPMI 2.0 zacząłem zabawę ipmitoolem i wpadłem na proste rozwiązanie:

root:~ #ipmitool user list
Dowiadujemy się jakich mamy użytkowników, a następnie zmieniamy hasło:
root:~ #ipmitool user set password 3
gdzie 3 to id użytkownika z pierwszego polecenia.

Teraz możemy się cieszyć dostępem do iLO po www/telnecie ]:->

Sun Fire T2000

Jeżeli instalator debiana na Sun Fire T2000 wywala podczas bootowania kernel panic i pokazuje Ci język to znak, że trzeba mu zaktualizować firmware. Odpowiedni plik można pobrać ze strony sunsolve. Jakiś tydzień w plecy ale nie sądziłem, że aktualizacja firmware ma aż takie znaczenie. Człowiek uczy się na błędach co powoduje wzrost doświadczenia, zwłaszcza ze sprzętem klasy enterprise.

Pingwinaria

W weekend 18-20.04.2008 (od piątku rano) będę na Pingwinariach, jeśli ktoś chce pogadać i powymieniać się doświadczeniem branży IT to z chęcią porozmawiam.

Wirtualne konta w oparciu o postfixa i dovecota bez uzycia baz danych

W dobie wszechobecnych systemów pocztowych działających w oparciu o bazy danych, co ma swoje ogromne zalety ale też ma jedną wadę - złożoność takiego system a to powoduje potrzebę zrezygnowania w niektórych przypadkach z używania serwera baz. Jako wadę można również uznać obciążenie dodatkowych zasobów serwera. Oczywiście rozwiązania oparte na bazie danych najlepiej sprawdzają się przy sporej ilości kont oraz gdy mamy potrzebę redundancji czy równoważenia obciążenia na wiele serwerów. No tak, ale niektórzy klienci obawiają się nowości i wolą sprawdzone (stare) rozwiązania i o tym m.in. będzie ten post.

Problem: Stworzenie systemu poczty elektronicznej z wykorzystującego wirtualne konta bez potrzeby tworzenia kont systemowych.

Rozwiązanie: pogodzenie postfiksa i dovecota

Przepis:
1. Instalujemy wymagane pakiety:
apt-get install postfix dovecot-common dovecot-imapd dovecot-pop3d
2. Konfigurujemy postfiksa:
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
smtp_use_tls=yes
smtpd_use_tls=yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_tls_cert_file = /etc/ssl/certs/mycert.crt
smtpd_tls_key_file = /etc/ssl/certs/mycert.key
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
myhostname = mx.serwer.pl
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mx.serwer.pl, serwer.pl, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a "$EXTENSION"
recipient_delimiter = +
inet_interfaces = all
smtp_helo_name = $myhostname
mailbox_size_limit = 0
message_size_limit = 0
readme_directory = no
unknown_local_recipient_reject_code = 550
smtp_helo_timeout = 240s
smtp_connect_timeout = 60s
smtpd_recipient_limit = 16
smtpd_error_sleep_time = 3
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
delay_warning_time = 12h
bounce_queue_lifetime = 2d
maximal_queue_lifetime = 3d
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
queue_run_delay = 15m
inet_protocols = ipv4
home_mailbox=Maildir/
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_helo_required = yes
unknown_hostname_reject_code = 550
unknown_address_reject_code = 550
unknown_local_recipient_reject_code = 550
unknown_client_reject_code = 550
smtpd_helo_restrictions = reject_unauth_pipelining,
reject_invalid_helo_hostname,
permit
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_client_access hash:/etc/postfix/whitelist,
reject_non_fqdn_hostname,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_unknown_hostname,
reject_unverified_sender,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,
permit
smtpd_sender_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_non_fqdn_sender,
reject_unknown_address,
reject_unauth_pipelining,
warn_if_reject reject_unverified_sender,
permit
smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_pipelining,
permit
virtual_mailbox_domains = /etc/postfix/vhosts
virtual_mailbox_base = /var/spool/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmaps
virtual_uid_maps = static:108
virtual_gid_maps = static:8
virtual_alias_maps = hash:/etc/postfix/valias
virtual_mailbox_limit = 0


Dodajemy systemowego usera vmail w grupie mail:
adduser --system --group mail --home /var/spool/vmail vmal
Teraz trzeba wyedytować trzy pliki: vmaps - gdzie mapujemy użytkownika na dany katalog, valias - gdzie tworzymy aliasy oraz vhosts - gdzie wpisujemy wirtualne domeny. Dodatkowo w pliku whitelist możemy umieszczać domeny, z których chcemy, aby na pewno poczta docodziła bez poddawania testom na poprawność domeny itd.
vmaps:
user@domena.pl domena.pl/user/
valias:
alias@domena.pl user@domena.pl vhosts:
domena.pl OK
3. Konfigurujemy dovecota:
protocols = imap imaps pop3 pop3s
listen = *
log_path = /var/log/dovecot
log_timestamp = "%Y-%m-%d %H:%M:%S "
ssl_listen =
ssl_disable = no
ssl_cert_file = /etc/ssl/certs/mycert.crt
ssl_key_file= /etc/ssl/certs/mycert.key
ssl_parameters_regenerate = 24
verbose_ssl = yes
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
mail_privileged_group = mail
valid_chroot_dirs = /var/spool/vmail
default_mail_env = maildir:/var/spool/vmail/%d/%n
first_valid_uid = 108
last_valid_uid = 108
auth_verbose = yes
auth_debug = yes
disable_plaintext_auth = no
protocol imap {
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
auth default {
mechanisms = plain login
passdb passwd-file {
args = /etc/dovecot/passwd
}
userdb passwd-file {
args = /etc/dovecot/user
}
user = root
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
dict {
}
plugin {
}

Tworzymy dwa pliki w katalogu /etc/dovecot: user oraz passwd, są one odpowiednikami systemowych passwd i shadow:
passwd:
user@domena.pl:tutaj_wstaw_hash_md5
user:
user@domena.pl::108:8::/var/spool/vmail/domena.pl/user/:/bin/false::
5. Jeżeli wszystko zrobiliśmy poprawnie wszystko powinno działać bez problemów. Podaną konfigurację można rozszerzyć o system antyspamowy i antywirusowy.

TimeStamp + Vim

Od dawna szukałem czegoś do robienia TimeStampa w Vim, jest to bardzo fajana i przydatna rzecz, a rozwiązanie wygląda tak: if !exists("*TimeStamp")
  fun TimeStamp()
   return "Time-stamp: <" . strftime("%d %b %Y %X") . " MyName>"
  endfun
endif

if !exists("*UpdateTimeStamp")
  fun UpdateTimeStamp()
    if (match(getline(1),"Time-stamp: <.*>")) > 1
     exe "1,1 s/Time-stamp: <.*>/" . TimeStamp()
    endif
   endfun
endif

iab YTS =TimeStamp()

autocmd BufWritePre,FileWritePre * ks|call UpdateTimeStamp()|'s

Całe rozwiązanie zostało znalezione gdzieś za pomocą google. Teraz wystarczy wpisać YTS co zostanie automatycznie zamienione na TimeStampa. W końcu nie będę zazdrościł jednemu doktorowi takiego bajeru w Emaksie ;-)

Zdradziłem...

Zdradziłem Debiana po raz kolejny - zainstalowałem na lapku Arch-a. System bardzo fajny, bardzo prosty i w tej prostocie piękny, ale póki co czuję się trochę nieswojo (stare przyzwyczajenia). Sama instalacja na szyfrowanych partycjach trwała niecałe 30 min. Ubuntu ze względu na straszne niedoróbki i szybkość działania został skreślony. Debian w dalszym ciągu pozostanie na serwerach, natomiast Gentoo jeszcze nie wiem, póki co na osirisie się sprawdza, pomimo słabego (żeby nie powiedzieć archaicznego) procesora Pentium III 450MHz ;-)

Transport MSN dla ejabberd

W związku z tym, że w AIESEC ogólnie obowiązującym komunikatorem jest MSN Messenger a ja nie lubię instalować nic co jest produkcji pewnej firmy z Redmond postanowiłem dodać transport MSN do serwera jabbera na CzLUG-u. No to do roboty:

1. Instalujemy PyMSNt wraz z biblioteką python-imaging (na szczęście tym razem jest w repozytorium debiana):
root@valkiria# apt-get install pymsnt python-imaging

2. Konfiguracja transportu jest banalnie prosta i sprowadza się do uzupełnienia kilku dyrektyw w XML-owym pliku /etc/pymsnt.conf.xml

  • <jid>msn.server.com</jid>
  • <host>127.0.0.1</host>
  • <discoName>MSN Transport</discoName>
  • <reactor>pool</reactor>
  • <mainServer>127.0.0.1</mainServer>
  • <port>5347</port>
  • <sercret>tajnehasło</secret>
  • <lang>pl</lang>
  • <webside>http://www.server.com</webside>

Reszta ustawień pozostaje domyślna.

3. Teraz pozostało nam ostatecznie dopisać transport do ejabberd w pliku /etc/ejabberd/ejabberd.cfg dopisujemy:

% MSN Transport
{5347, ejabberd_service, [{host, "msn.server.com",
[{password, "tajnehasło"}]}]},


4. Po zrestartowaniu serwera i transportu powinniśmy w przeglądarce usług widzieć nowy transport.

Transport GG i ejabberd

Od dłuższego czasu przymierzałem się do postawienia na naszym CzLUG-owym serwerze transportu Gadu-Gadu - jggtrans. Oczywiście w standardowym repozytorium paczki z jggtrans nie ma, więc jak na prawdziwego debianowca przystało (nie jestem developerem, niestety). Ciekawy opis instalacji i konfiguracji można znaleźć na stronie ejabberd. Poniżej przedstawiam sposób na transport po debianowemu:

1. Ściągamy i rozpakowujemy źródła jggtrans:
sor@valkiria:~/src$ wget http://jggtrans.jajcus.net/downloads/jggtrans-2.2.2.tar.gz && tar zxf jggtrans-2.2.2.tar.gz

2. Teraz musimy stworzyć pliku debianowe:
sor@valkiria:~/src/jggtrans-2.2.2$ dh_make -e majtajner@domena.pl -f ../jggtrans-2.2.2.tar.gz

3. Teraz wystarczy wszystko skonfigurować:
sor@valkiria:~/src/jggtrans-2.2.2$ ./configure --prefix=/usr

4. Musimy odpowiednio wyedytować pliki .debian/control oraz .debian/changelog. Dodatkowo musimy zmienić prefix w Makefile z prefix = /usr na prefix = ${DESTDIR}/usr

5. Pozostaje tylko zbudować i zainstalować paczkę deb:
sor@valkiria:~/src/jggtrans-2.2.2$ dpkg-buildpackage -rfakeroot -sgpg

root@valkiria:/home/users/sor/src# dpkg -i jggtrans_2.2.2-1_amd64.deb


6. Instalacja paczki nie stworzy nam wszystkich wymaganych katalogów i plików startowych, więc o to musimy zatroszczyć się sami:
root@valkiria:~# mkdir /var/lib/jabber /var/lib/jabber/gg.domena.pl && chown -R ejabberd:ejabberd /var/lib/jabber && chmod 750 /var/lib/jabber/gg.domena.pl

Skromny plik /etc/init.d/jggtrans:
#!/bin/sh

CONFIG_FILE=/etc/ejabberd/jggtrans.xml
USER=ejabberd
GROUP=ejabberd
PID_FILE=/var/lib/jabber/ggtrans.pid

case "$1" in
start)
echo -n "Starting Gadu-Gadu Jabber transport"
/usr/sbin/jggtrans -u $USER -g $GROUP $CONFIG_FILE
echo "."
;;
stop)
echo -n "Stopping Gadu-Gadu Jabber transport"
if [ -f $PID_FILE ]; then
kill `cat $PID_FILE`
fi
echo "."
;;
restart)
$0 stop
$0 start
;;
force-reload)
$0 restart
;;
*)
echo "Usage: $0 start|stop|restart|force-reload"
exit 1
;;
esac


7. Konfiguracja jest banalna, ściągamy plik i umieszczamy go w /etc/ejabberd. Musimy zmienić w nim odpowiednie dyrektywy, np:
<connect>
<ip>127.0.0.1</ip>
<port>5237</port>
<secret>scisletajnehaslo</secret>
</connect>

<service jid="gg.domena.pl"/>

<spool>/var/lib/jabber/spool/gg.domena.pl/</spool>


8. Teraz wystarczy dodać transport do ejabbera, w pliku /etc/ejabberd/ejabberd.cfg dopisujemy w sekcji listen:
% GG Transport
{5237, ejabberd_service, [{host, "gg.domena.pl",
[{password, "scisletajnehaslo"}]}]},


9. Na koniec wystarczy przeładować ejabbera oraz uruchomić jggtrans:
root@valkiria:~# /etc/init.d/ejabberd restart && /etc/init.d/jggtrans start
W pliku /var/log/messages powinniśmy obserwować co się dzieje, ja musiałem dodać jeszcze do jggtrans.xml dodatkowe serwery:
<servers>
<hub tls="no"/>
<server tls="no">217.17.45.143</server>
<server tls="no">217.17.45.144</server>
<server tls="no">217.17.45.145</server>
<server tls="no">217.17.45.146</server>
<server tls="no">217.17.45.147</server>
<server tls="no">217.17.41.92</server>
<server tls="no">217.17.41.93</server>
<server tls="no">217.17.41.85</server>
<server tls="no">217.17.41.83</server>
<server tls="no">217.17.41.88</server>
<server tls="no">217.17.41.84</server>
<server tls="no">217.17.41.86</server>
<server tls="no">217.17.41.87</server>
</servers>

10. W wyszukiwarce usług powinien pojawić się transport Gadu-Gadu: gg.domena.pl, po dodaniu go do naszego rostera powinniśmy mieć możliwość kontaktowania się z naszymi "niewiernymi" znajomymi.

Paczkowanie EKG2

Jako, że w Debianie Etch nie ma EKG2 w repozytorium (jest natomiast w gałęzi experimental, opiekunem tej paczki EKG2 jest Marcin Owsiany). Oczywiście użytkownicy bez EKG2 żyć nie mogą więc postanowiłem jako dobry admin zrobić paczkę, gdyż to mniejszy problem przy uaktualnieniach a poza tym, prawdziwi debianowcy ze źródeł nie instalują :P Niby proste ale pojawia się problem - No UI-PLUGIN! Oczywiście wsparcie dla unicode odrzuciłem po wielu próbach, gdyż jak sami developerzy EKG2 piszą jest to rzecz eksperymentalna, poza tym używanie unicode powoduje wiele znanych błędów (których nie powinno się raportować).

Oto sposób na paczkę deb:
1. Ściągamy źródła
sor@valkiria:~/src/$ wget http://pl.ekg2.org/ekg2-0.1.1.tar.gz
(current się nie kompiluje) i rozpakowujemy:
sor@valkiria:~/src$ tar zxf ekg2-0.1.1.tar.gz
2. Instalujemy libncurses5-dev, libssl-dev, python-dev, libsqlite3-dev, libgadu-dev, libgnutls-dev, dh-make, fakeroot
3. Za pomocą dh_make tworzymy wszystkie potrzebne pliki do stworzenia paczki
sor@valkiria:~/src/ekg2-0.1.1$ dh_make -e maintajner@jakas.domena.pl -f ../ekg2-0.1.1.tar.gz
4. Edytujemy pliki .debian/control oraz .debian/changelog
5. Konfigurujemy i budujemy dziada
sor@valkiria:~/src/ekg2-0.1.1$ ./configure --without-gtk --prefix=/usr && make
6. Teraz sprawdzamy, czy nasz ekg2 działa poprawnie:
sor@valkiria:~/src/ekg2-0.1.1$.ekg/ekg2
7. Jeżeli tak to pozostaje nam zrobić paczkę:
sor@valkiria:~/src/ekg2-0.1.1$ dpkg-buildpackage -rfakeroot -nc -sgpg
(jeżeli nie mamy klucza GPG to ostatnią opcję można pominąć).
8. Zbudowany pakiet (o ile działa) wrzucamy do naszego własnego repozytorium.

Takim oto sposobem mamy paczkę z EKG2, w moim wypadku pod architekturę amd64.