niedziela, 1 maja 2011

Jak automatycznie zmienić wielkość zdjęć, czyli imagemagick, convert, resize

Uczestniczę w tworzeniu serwisu internetowego, który będzie składał się z wielu zdjęć.

Zorganizowaliśmy walne zgromadzenie (2 osoby) i ustaliliśmy, że obrazy będą miały szerokość 420 pixeli (z wysokością to różnie bywa - będzie ona automagicznie dopasowywana).


Oczywiście każdy obraz można otworzyć za pomocą gimp'a, kliknąć na obraz i wybrać skaluj, ale jakoś mi to nie odpowiadało.

Więc na początku chciałem z wiersza poleceń sprawdzać jaką wielkość ma dany obraz (nie ma sensu zmniejszać czegoś co już i tak jest np. za małe).

Z pomocą przyszła mi biblioteka ImageMagick.

Sprawdzenie wielkości (w pixelach można wykonać w następujący sposób):
identify test.jpg

Wynik polecenia przedstawia się następująco:
test.jpg JPEG 420x216 420x216+0+0 8-bit DirectClass 25.2kb

Czyli z grubsza wiemy wszystko co chcieliśmy o tym jpegu.

Przyszedł czas na automatyczną zmianę wielkości zdjęć w wybranym katalogu, w połączeniu z pentlą:
for adres in $(ls); do convert $adres -resize '420' $adres ; done ;

Teraz po kolei jak to wszystko działa:
- przechodzimy do katalogu w którym są zdjęcia (trzeba sobie zrobić backup, bo w tym przykładzie zdjęcia zostaną nadpisane przez te o zmienionym rozmiarze),
- for adres in $(ls) - dla każdego pliku znajdującego się w bieżącym katalogu ...
- do convert $adres -resize '420' $adres ; done ; - wykonaj konwersję nazwa_obrazu.jpg wielkości do 420 pixeli szerokości;

Opcja -resize jest bardzo wygodna, ponieważ gdybym musiał podać od razu szerokość i wysokość zdjęcia wyglądałyby co najmniej dziwnie, byłyby za bardzo rozciągnięte w pionie lub w szerokości.

W apostrofach mogę więc podać:
- 'szerokośćxwysokość'
- 'szerokość'
- 'xwysokość'

Dzięki temu, że podałem samą szerokość wysokość jest automatycznie dopasowywana (do Twojej wersji filmu chciałoby się powiedzieć :>) do wersji obrazu.

Imagemagick potrafi znacznie więcej, w najbliższej przyszłości mam zamiar się jeszcze przyjrzeć
możliwości wstawiania automatycznie znaku wodnego

W ten sam sposób można generować miniatury obrazów, jeżeli z takich korzystacie - wystarczy podać mniejszą ilość pixeli, np. 100.

sobota, 30 kwietnia 2011

Czy bind jest poprawnie skonfigurowany? Czy wszystkie rekordy DNS są właściwe?

Oprócz tradycyjnych metod testowania naszego serwera DNS za pomocą polecenia host -a oraz polecenia dig istnieją również inne metody.
Jedną z nich jest strona http://intodns.com
Wystarczy na nią wejść, wpisać nazwę domeny którą chcemy sprawdzić i kliknąć na Report.

Chciałem tylko Was ostrzec, że nie ma co wpadać w panikę i nie koniecznie musi wszystko być "na zielono" na tej stronie, ponieważ nawet domeny takie jak wp.pl i gmail.com po sprawdzeniu mają widoczne błędy np.:
Different MX records at nameservers The MX records that are not the same at all your nameservers:
alt2.gmail-smtp-in.l.google.com with ip(s): 74.125.67.27 reported only by: 216.239.36.10 216.239.34.10 216.239.32.10
gmail-smtp-in.l.google.com with ip(s): 74.125.39.27 reported only by: 216.239.36.10 216.239.34.10 216.239.32.10
alt1.gmail-smtp-in.l.google.com with ip(s): 72.14.213.27 reported only by: 216.239.36.10 216.239.34.10 216.239.32.10
alt3.gmail-smtp-in.l.google.com with ip(s): 74.125.47.27 reported only by: 216.239.36.10 216.239.34.10 216.239.32.10
alt4.gmail-smtp-in.l.google.com with ip(s): 74.125.113.27 reported only by: 216.239.36.10 216.239.34.10 216.239.32.10
gmail-smtp-in.l.google.com with ip(s): 74.125.43.27 reported only by: 216.239.38.10
alt2.gmail-smtp-in.l.google.com with ip(s): 74.125.65.27 reported only by: 216.239.38.10
alt4.gmail-smtp-in.l.google.com with ip(s): 74.125.115.27 reported only by: 216.239.38.10
alt1.gmail-smtp-in.l.google.com with ip(s): 74.125.155.27 reported only by: 216.239.38.10
alt3.gmail-smtp-in.l.google.com with ip(s): 74.125.45.27 reported only by: 216.239.38.10
It is better to have the same MX records at all your nameservers!

niedziela, 24 kwietnia 2011

zmiana hasła administratora w Drupal'u

Zmiana hasła administratora w Drupal'u z poziomu bazy danych MySQL.


W celu zmiany hasła administratora należy:
- zalogować się na serwer: mysql -h adres_serwera -u nazwa_użytkownika -p
Jeżeli nie mamy danych niezbędnych do zalogowania się do bazy danych to można je podejrzeć w pliku sites/default/settings.php.
- po zalogowaniu na serwer można podejrzeć dostępne bazy danych za pomocą polecenia: show databases;
- kolejnym krokiem jest wybranie bazy danych: use nazwa_bazy;
- w celu upewnienia się że wszystko jest ok wykonujemy zapytanie: select * from users where uid=1;
- jeżeli okaże się, że wszystko jest ok aktualizujemy jeden rekord w następujący sposób: update users set pass=md5('moje_nowe_haslo') where uid = 1;

Istnieje oczywiście alternatywna metoda zmiany hasła np. za pomocą narzędzia phpMyAdmin - jeżeli mamy do niego dostęp.

Jeżeli chcemy zaszyfrować jakieś hasło, to możemy posłużyć się szyfrowaniem z poziomu MySQL'a np.:
mysql> select md5('moje_haslo');
+----------------------------------+
| md5('moje_haslo') |
+----------------------------------+
| ea46d6da2e2289d0504a0c2316c13cfc |
+----------------------------------+
1 row in set (0,00 sec)

niedziela, 3 kwietnia 2011

usuwanie wiadomości z kolejki postfix

Jeżeli zdarzy się Wam jakiś spamer, i po jego zablokowaniu niezbędne będzie usuniecie wiadomości z kolejki przy serwerze pocztowym Postfix, to można to zrobić w następujący sposób:
mailq | grep MAILER-DAE | awk '{print $1}' | xargs -i postsuper -d {}


Opis kolejnych poleceń:
mailq - wyświetla listę wiadomości w kolejce,
grep - wyszukuje wiadomości zawierających określoną frazę,
awk - wyświetlenie frazy z pierwszej kolumny
xargs -i - przekazanie danych z poprzedniego polecenia do kolejnego, przełącznik -i umożliwia zdefiniowanie gdzie te dane mają być podane przez wstwienie "{}".

sobota, 26 marca 2011

jak dopasować napisy do filmu na linux'ie, subs

Tak mnie zawsze męczyło gdy trzeba było pobrać jakieś napisy do filmu i zawsze ... ale to zawsze słyszałem "na łyndowsie to ja mam napiprojekt i subedit, a Ty się męczysz z tymi napisami na linux'ie i męczysz".

Napiprojekt obchodzę w ten sposób, że wklejam nazwę filmu w Google i usuwam rozszerzenie (np. avi) i zamiast tego dodaję .txt.

Problem się pojawia gdy udaje się pobrać napisy ale nie są one dostosowane do filmu, wtedy zawsze słyszę "a ja to otwieram taki film za pomocą subedit i mogę dostosować czas wyświetlania napisów do mojej wersji filmu".


Tak wiem ... to są traumatyczne przeżycia gdy trzeba słuchać "ja na łyndowsie to ma to, mam również tamto", zawsze chce się dodać i masz jeszcze debilion trojanów, Twój komputer to zombi jest z niego wysyłany spam i jest częścią botnetu i tylko czekaj aż Ci blue screen wyskoczy i wtedy to reinstalka tylko zostaje. Gdy się coś będzie sypać to sobie nawet logów nie przejrzysz.

Tak się trochę rozpędziłem, tak było do dnia wczorajszego, od dzisiaj możemy powiedzieć:
ja mam program subs w perlu napisany i stworzony do dostosowywania napisów do filmu i Twój łyndows mi lotto razem z subedit.


Program jest do pobrania ze strony:
http://linux.softpedia.com/get/Utilities/Subtitles-6342.shtml


Instalacja jest bardzo prosta i zgodna z opisem na stronie.
Konwertowanie napisów też jest bardzo proste:
- jeżeli napisy pojawiają się o 5 sekund za wcześnie to wpisujemy:
subs -i -b 5 file.sub
- jeżeli napisy pojawiają się 5 sekund za późno to wpisujemy:
subs -i -b -5 file.sub

No to ja cały szczęśliwy, zrobię trzask prask i patrz gotowe, a tu ... mi jakiś error wyrzuca, za plecami słyszę pierwsze oznaki zniecierpliwienia więc musiałem odpuścić.

Po czasie jakimś otwieram ten plik z napisami i patrzę, a tam w pierwszym wierszu czas ma wartość ujemną (takie rzeczy to tylko ... w linux'ie, odmłodnieć można).
No to wycinam pierwszy wiersz (jakby nie patrzeć ujemny) i odpalam totema jeszcze raz wybieram plik napisów iiiii .... działa :).

czwartek, 24 marca 2011

problem z zalogowaniem przez SSH, ssh_exchange_identification: Connection closed by remote host

Ostatnio zdarzyło mi się kilka razy napotkać problem z zalogowaniem przez SSH, komunikat błędu miał wówczas następującą postać:
ssh_exchange_identification: Connection closed by remote host

Jeżeli zdarzy się Wam coś takiego, to oznacza najprawdopodobniej, że na domowym komputerze wygenerowaliście sobie nowy klucz do połączeń SSH, a na zdalnej maszynie na którą się próbujemy zalogować jest jeszcze zapisany stary klucz.


W celu rozwiązania tego problemu należy zalogować się na zdalny komputer z innej lokalizacji, rozpocząć edycję pliku: /root/.ssh/known_hosts i usunąć wiersz dotyczący naszego domowego komputera.

Czasami pomimo usunięcia wpisu z known_host problem dalej występuje.

Trochę pogrzebałem w systemie i okazało się, że problem tkwił we wpisie w pliku /etc/hosts.allow
sshd : tu_był_moj_ipek : allow : allow : allow

Wystarczyło wyrzucić tą linie, zapisać zmiany i wszystko wróciło do normy.

niedziela, 27 lutego 2011

too many open files, Apache error_log

Ostatnio miałem problem, na jednym z serwerów przestał działać serwer WWW apache.
Próby restartu nic nie dawały, spróbowałem też wykonać restart iptables i też nie pomogło.
Z pomocą przyszło mi polecenie ulimit.

Cała składnia polecenia jest dokładnie opisana na stronie http://linux.about.com/library/cmd/blcmdl1_ulimit.htm - warto na nią zaglądać, zawiera wiele ciekawych artykułów.


W celu wyświetlenia jakie parametry są obecnie ustawione należy posłużyć się poleceniem:
ulimit -a

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited



Wiersz "open files (-n) 1024" mówi nam o tym ile można mieć otwartych plików.

W celu rozwiązania tego problemu wystarczyło w moim przypadku wpisać:
ulimit -n 2048

Następnie wpisałem ulimit -a:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited


Pozostał jeszcze tylko restart Apacha i wszystko zaczęło działać poprawnie.