wtorek, 1 kwietnia 2014

Automatyczne wyłączenie komputera po zakończeniu pobierania transmission

Skrypt ma na celu automatyczne wyłączenie programu transmission po zakończeniu pobierania torrentów.
Jeżeli skrypt zostanie wywołany z poziomu root'a wówczas nastąpi wyłączenie komputera.

Przygotowanie transmission do pracy ze skryptem:
- ustawienie rozszerzenia pliku ".part" dla nieskończonych pobierań (przejść na edycja >> preferencje >> zakładka torrenty >> sekcja Pobieranie i zaznaczyć check box obok "Dodawanie '.part' do nazw nieukończonych plików"),
- zapisywanie plików w (ta sama lokalizacja co powyżej, ja ustawiłem wspólny katalog dla ukończonych oraz nieukończonych pobierań),
- można ustawić wywołanie skryptu po ukończeniu torrenta (ta sama lokalizacja co powyżej), ja z tej opcji nie korzystam, ponieważ gdybym chciał aby wyłączyć komputer po zakończeniu pobierania za pomocą tej opcji, transmission musiało by zostać uruchomione z poziomu root'a (potencjalne zagrożenie bezpieczeństwa).


Po stronie systemu operacyjnego:
- uruchamianie skryptu z poziomu zwykłego użytkownika za pomocą crontaba (nastąpi wyłączenie transmission bez wyłączenia komputera)
- uruchamianie skryptu z poziomu root'a za pomocą crontaba (nastąpi wyłączenie transmission oraz wyłączenie komputera)

Dodawanie skryptu do crontaba (zwykły użytkownik):
- w konsoli crontab -e i dodanie wiersza
*/2 * * * * /bin/bash /home/pawel/torrent_killer.sh

W powyższym przykładzie skrypt będzie uruchamiany co drugą minutę (przy tej opcji bardziej opłacalne jest ustawienie w transmission automatycznego uruchamiania skryptu po zakończeniu pobierania, ponieważ nastąpi tylko wyłączenie transmission bez wyłączenia komputera).

Dodawanie skryptu do crontaba (root):
- w konsoli crontab -e i dodanie wiersza
*/2 * * * * /bin/bash /home/root/torrent_killer.sh

Przy tej opcji po zakończeniu pobierania nastąpi wyłączenie komputera.

Zawartość skryptu:
#!/bin/bash

# Variables

Download_Folder="/home/pawel/Pobrane/torrenty/"
Killer=`ps aux | grep transmission | grep -v grep | awk '{print $2}'`

# Sprawdzenie czy w katalogu pobierań znajdują się niezakończone pobierania

# Instrukcja warunkowa sprawdzająca czy wszystkie pobierania się zakończyły i wyłączająca klienta transsmision

if [ ! -z `pidof transmission` ] && [ ! -z `find $Download_Folder -name \*.part -type f | head -n1 |awk '{print $1}'` ]
then echo "Znaleziono pliki"
else
if [ ! -z `pidof transmission` ]
then echo "Nie znaleziono plików *.part, ubijam transsmision" && kill -9 $Killer && halt -p

else
echo "Transmission nie jest uruchomiony"
fi
fi


Komentarz do skryptu:
Download_Folder - musi być ustawiony taki sam jak w programie transmission, żeby można było odnaleźć pliki z niedokończonymi pobieraniami
Killer - znalezienie id procesu programu transmission w celu późniejszego jego wykorzystania do zamknięcia transmission
pierwszy if - sprawdzenie czy program transsimison działa jeżeli tak to sprawdzenie czy w Download_Folder znajdują się pliki *.part, (potrzebne były head i awk aby wyświetlić tylko jedną wartość, w przeciwnym wypadku test otrzymywałby zbyt wiele argumentów). Jeżeli zostały znalezione pliki part jest wyświetlany komunikat "Znaleziono pliki" i kończone jest wykonywane skryptu. Konieczne jest sprawdzenie działania programu transmission w przeciwnym wypadku przy dodaniu skryptu do crona z poziomu root'a komputer by się cały czas wyłączał.
drugi if - sprawdzenie czy program transmission działa, jeśli tak to jest wyświetlany komunikat "Nie znaleziono plików *.part, ubijam transsmision" oraz wykonywane jest zamknięcie programu transmission (zwykły użytkownik) lub zamkniecie programu i wyłączenie komputera (root).
ostatni else - jeżeli program transmission nie jest uruchomiony następuje wyświetlenie komunikatu "Transmission nie jest uruchomiony" i kończone jest działanie skryptu


Uwagi:
- skrypt jest trochę rozbudowany (overkill :) ) jak na taką prostą czynność, można to zrobić inaczej ale do moich potrzeb nadaje się idealnie,
- na moim komputerze miałem wcześniej włączone uruchamianie skryptu z poziomu zwykłego użytkownika co minutę ale czasami następowało wyłączenie transmission zanim zostało rozpoczęte pobieranie, więc częstotliwość została zmieniona do dwóch minut
- jeżeli ktoś będzie chciał korzystać ze skryptu do wyłączania komputera po zakończeniu pobierania oprócz uruchamiania crona z konta użytkownika root należy rozważyć uruchamianie w większych odstępach czasu np. 5 lub 10 minut. Nie powinno się mieć przy tym ustawieniu włączonego automatycznego uruchamiania transmission po włączeniu komputera - przy braku pobierania torrentów następowałoby automatyczne wyłączanie komputera.




sobota, 22 lutego 2014

Zmniejszanie partycji ext4

Tak samo jak w poprzednim poście, jeżeli mamy fizyczny dostęp do serwera to polecam gparted, w przeciwnym wypadku ...

Rozpoczynamy od odmontowania partycji umount /dev/sdX.
Wykonujemy sprawdzenie systemu plików e2fsc -f /dev/sdX.
Zmniejszamy system plików do pożądanego rozmiaru resize2fs /dev/sdX rozmiar (rozmiar możemy podać w blokach, megabajtach M, gigabajtach G np. 2G).
Zmniejszamy rozmiar partycji (ja daję rozmiar partycji trochę większy niż ustawiony powyżej za pomocą polecenia resize2fs - mam wówczas gwarancję, że partycja nie będzie za mała).
Czyli fdisk /dev/sdX, wyświetlamy informację o partycji przez opcję p, usunięcie wybranej partycji przez opcję d i podanie numeru partycji do usunięcia.
Założenie partycji tego samego typu i o mniejszym rozmiarze n, w moim przypadku p (primary), początek partycji w tym samym miejscu więc albo numer bloku od którego się zaczynała albo enter jeżeli jest to pierwsza partycja.
Wprowadzamy nowy rozmiar partycji więc np. +2G (partycja o rozmiarze 2 GB, można też korzystać z megabajtów M).
Zapisujemy nową partycję w, wychodzimy z fdisk q.
Wykonujemy sprawdzenie systemu plików e2fsck -f /dev/sdX.
Jeszcze raz wykonujemy resize2fs /dev/sdX, żeby system plików całkowicie wypełnił partycję.
Ponowne e2fsck -f /dev/sdX.

Montujemy partycję mount /dev/sdX /katalog_montowania.

Powyższa procedura pozwoliła mi na zmniejszenie wielkości partycji bez utraty danych na niej zawartych.
Gdybym jednak miał na zmniejszanej partycji jakieś ważne dane to na pewno wykonałbym backup.

Powiększenie partycji ext4

Gdy mamy komfort dostępu fizycznego do serwera można skorzystać z gparted, w pozostałych sytuacjach należy:

Odmontować partycję którą chcemy powiększyć umount /dev/sdX.
Sprawdzić gdzie zaczyna się i kończy partycja przez fdisk /dev/sdX.
Wyświetlenie wszystkich informacji przez wprowadzenie p i ich skopiowanie np. do notatnika.
Usunięcia partycji, którą chcemy powiększyć przez naciśnięcie d, a następnie wprowadzenie jej numeru.
Zapisanie zmian przez w, stworzenie nowej partycji przez opcję n.
Wybranie tego samego typu partycji jak był poprzednio primary/extended.
Wprowadzenie bloku, w którym ma się partycja zaczynać (powinien być taki sam jak ten wypisany we wcześniejszym kroku za pomocą p).
Wprowadzamy nowy rozmiar przez wprowadzenie wartości wraz z typem np. +5G, +1024M itp.
Zapisanie zmian przez opcję w.
Wykonanie fsck na powiększonej partycj e2fsck -f /dev/sdX.
Rozszerzenie systemu plików do nowej wielkości przez resize2fs /dev/sdX.
Ponowne podmontowanie partycji mount -a lub mount /dev/sdX /ścieżka_do_katalogu_montowania.

W powyższy sposób udało mi się zwiększyć rozmiar partycji bez utraty danych na niej zapisanych.

niedziela, 19 stycznia 2014

Linux konwertowanie mp4 do mp3

W celu konwertowania mp4 do mp3 zainstalowałem program soundconverter (środowisko graficzne gnome).
Po instalacji zmodyfikowałem ustawienia w preferencjach, aby pliki wynikowe były zapisywane w formacie mp3.

Zdaję sobie sprawę z tego, że istnieje możliwość konwertowania z konsoli, ale z doświadczenia wiem, że po kilku miesiącach zapominam z jakich przełączników korzystałem.

Najłatwiejszym rozwiązaniem jest wiec instalacja programu, który będzie pamiętał wszystkie parametry za nas.

Linux konwertowanie audiobook do mp3

W celu konwertowania audiobooków (pliki w formacie cda) do mp3, zainstalowałem następujące pakiety za pomocą apt-get install:
sound-juicer
gstreamer0.10-ffmpeg
gstreamer0.10-lame


Po uruchomieniu sound-juicer niezbędne było zmodyfikowanie ustawień w preferencjach (ustawienie pliku wyjściowego na mp3).

sobota, 14 września 2013

bash skrypty do tworzenia baz mysql, dodawania użytkowników, nadawania uprawnień

Na serwerach (środowisko produkcyjne) nie powinno się instalować zbędnych programów/aplikacji i jedną z nich jest phpmyadmin.

W związku z tym, że w pracy często zakładam/usuwam bazy danych mysql i nie koniecznie za każdym razem chce przypominać sobie pełną składnie polecenia i wolałbym wykonać jedną pętle aby stworzyć wszystkie bazy danych.

Po przeszukaniu dostępnych bashowych skryptów w sieci udało mi się odnaleźć jeden prawie działający (chyba było to na stackoverflow). Po przerobieniu skryptu zaczął on działać poprawnie, więc postanowiłem na jego przykładzie dopisać kilka dodatkowych.

Sprawdzanie zaszyfrowanego hasła:
#!/bin/bash
EXPECTED_ARGS=1
E_BADARGS=65
MYSQL=`which mysql`

Q1="SELECT password('$1');"
SQL="${Q1}"
echo $SQL;
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 password"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"

W tym przypadku należy wykonać skrypt z podaniem parametru (hasłem, które należy zaszyfrować).
W powyższym przykładzie konto roota do mysql'a nie posiada hasła, jeżeli chcemy wykonać polecenie na root mysql, który posiada hasło należy zmodyfikować ostatni wiersz na:
$MYSQL -uroot -pMoje_hasło_root -e "$SQL"



Usuwanie użytkownika mysql (dwa parametry wykonania skryptu login/lokalizacja local lub remote):
#!/bin/bash

EXPECTED_ARGS=2
E_BADARGS=65
MYSQL=`which mysql`

Q1="DROP USER '$1'@'$2';"
Q2="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}"

if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 login local_remote password"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"





Tworzenia bazy danych oraz przypisywanie do nich uprawnień (dwa parametry wykonania skryptu nazwa bazy oraz nazwa użytkownika), można ten skrypt jeszcze rozbudować ale na moje potrzeby w zupełności wystarczy:
#!/bin/bash
EXPECTED_ARGS=2
E_BADARGS=65
MYSQL=`which mysql`

Q1="CREATE DATABASE IF NOT EXISTS $1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"
Q2="GRANT ALL ON $1.* TO '$2'@'localhost';"
Q3="GRANT ALL ON $1.* TO 'root'@'localhost';"
Q4="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}${Q3}${Q4}"
echo $SQL;
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 dbname dbuser"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"



Tworzenie użytkownika bazy danych (w tym przypadku potrzebne są trzy parametry login/remote lub local/ zaszyfrowane hasło - pierwszy skrypt):
#!/bin/bash

EXPECTED_ARGS=3
E_BADARGS=65
MYSQL=`which mysql`

Q1="CREATE USER '$1'@'$2' IDENTIFIED BY password '$3';"
Q2="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}"

if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 login local_remote password"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"



Powyższe skrypty można oczywiście udoskonalić np. w ostatnim tworzącym użytkownika można dodać automatyczne szyfrowanie hasła, ale tak jak napisałem powyżej na moje skromne potrzeby wystarczy.

Dlink wolny upload

Na domowym routerze miałem ostatnio problem z wysyłaniem plików.
Załączenie kilku zdjęć do wiadomości email trwało wieczność.

Problemy występowały przy wifi, spróbowałem się więc podłączyć kablowo przez router i w dalszym ciągu występował ten sam problem.

Postanowiłem więc podłączyć się do sieci bez routera i okazało się że transfer znacznie skoczył.

Po weryfikacji ustawień routera okazało się, że był włączony QOS bez podanych żadnych parametrów i było to przyczyną występowania problemu.

Gdy wyłączyłem QOS upload przyśpieszył.