Wednesday, December 28, 2011

Podsumowanie roku przez Google

Już coroczny przegląd statystyk wyszukiwania i tego co się wydarzyło w mijającym roku 2011.


Więcej na www.googlezeitgeist.com

Jest też podsumowanie tego co oglądano najczęściej na YouTube.


Lista najczęściej oglądanych dostępna na:

Monday, December 26, 2011

Konfiguracja maszyny wirtualnej na KVM

KVM jest coraz atrakcyjniejszym rozwiązaniem oferującym wirtualizację, do tego jest standardowo w jadrze systemu Linux, więc nic nie musimy dodatkowo instalować.

Do pełnej wirtualizacji lepiej nadają się systemy uniksowe, jeżeli chcesz wirtualizować systemy z rodziny Windows niezbędne będzie użycie sterowników parawirtualizowanych dla systemu Wondows jako gościa.

Dlatego KVM świetnie nadaje się do wyrtualizacji serwerów Linux. Jeżeli chcesz postawić serwer WWW w bezpiecznym środowisku, czy zbudować wirtualną sieć z serwerami Linux, KVM jest świetnym rozwiązaniem.

W końcu, co najważniejsze, to zanosi się na to, że KVM ma szansę stać się w najbliższej przyszłości numerem 1 wśród rozwiązań wirtualizacyjnych dla platformy Linux. Więcej informacji na ten temat można znaleźć na stronie Open Virtualization Alliance oraz na stronie projektu www.linux-kvm.org.

Przedstawię w jaki sposób używać KVM. Ponieważ używam dystrybucji Debian, będzie to sposób konfiguracji charakterystyczny dla tego systemu, tzw. "Denian's way". Co prawda określenie to odnosi się głównie do konfiguracji sieci, ale może również kojarzyć się z nieużywaniem specjalnych narzędzi tworzonych przez Red Hat, takich jak Virsh.

Pierwsze co musimy przygotować to wirtualne karty sieciowe dla naszych gości. Do tego trzeba zbudować most, tworzący wirtualny przełącznik, którego co najmniej jeden port będzie rzeczywistym interfejsem sieciowym. Dzięki niemu będziemy przekazywać połączenia między siecią wirtualną a rzeczywistą. Oczywiście sposobów konfiguracji może być wiele, my zakładamy, że host gości będzie miał połączenie z internetem.

Do stworzenia mostu musimy mieć zainstalowaną paczkę bridge-utils, chyba że w naszym systemie dostępne jest już polecenie brctl. Sam most będziemy tworzyć poprzez modyfikację pliku /etc/network/interfaces, a nie brctl.
Natomiast do stworzenia wirtualnych interfejsów, które mamy zamiar później dołączyć do mostu
być może potrzebna jeszcze będzie paczkę vtun, jeżeli jeszcze jej nie mamy. Po instalacji tej paczki należy ręcznie zamontować jej moduł: modprobe tun. W przyszłości system podczas startu załaduje go sam. Do zarządzania tymi interfejsami będzie nam jeszcze potrzebne narzędzie tunctl, które zawiera paczka uml-utilities.

Teraz możemy już przystąpić do konfiguracji interfejsów, więc odpalamy w vim'e plik /etc/network/interfaces i z przykładowej konfiguracji:
auto lo 
iface lo inet loopback 
allow-hotplug eth0 
iface eth0 inet dhcp 
auto eth0
tworzymy coś takiego:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5). 
# The loopback network interface
auto lo
iface lo inet loopback 
# The primary network interface
allow-hotplug eth0 
iface eth0 inet manual 
# RouterOS
iface tap0 inet manual
pre-up tunctl -b -u grzesiek
pre-up ifconfig tap0 up
post-down tunctl -d tap0 
# Fedora 16
iface tap1 inet manual
pre-up tunctl -u grzesiek -t tap1
pre-up ifconfig tap1 up
post-down tunctl -d tap1 
# CentOS 6
iface tap2 inet manual
pre-up tunctl -u grzesiek -t tap2
pre-up ifconfig tap2 up
post-down tunctl -d tap2 
# CentOS 6 x86_64
iface tap3 inet manual
pre-up tunctl -u grzesiek -t tap3
pre-up ifconfig tap3 up
post-down tunctl -d tap3 
iface br0 inet static
address 10.0.0.1
netmask 255.255.255.0
gateway 172.16.16.101
broadcast 10.0.0.255
network 10.0.0.0
bridge_ports eth0 tap0 tap1 tap2 tap3
bridge_maxwait 0
bridge_stp off
bridge_fd
auto eth0
auto tap0
auto tap1
auto tap2
auto tap3
auto br0
To moja przykładowa konfiguracja na laptopie. Zmieniamy konfigurację eth0 na manual, natomiast całą konfiguracje wpisujemy dla br0, naszego nowego mostu. Jak widzimy do tego mostu należą eth0, tap0, tap1, tap2, tap3. Każdy interfejs tapX jest oddzielny dla każdego hosta, w ich konfiguracji należy zmienić nazwę użytkownika, z jakim prawami jest tworzony nowy interfejs. W moim przypadku jest to "grzesiek".

Teraz należy zresetować sieć skryptem /etc/init.d/networking i sprawdzić czy istnieją wszystkie interfejsy tap (polecenie ifconfig) oraz czy poprawnie został stworzony most i dodane do niego interfejsy. Dla konfiguracji, którą przedstawiłem wynik polecenia brctl show powinien być następujący:


bridge name bridge id STP enabled interfaces
br0 8000.72a5b61e39bf no eth0
tap0
tap1
tap2
tap3

Teraz możemy sobie wybrać jakąś lokalizacje na przechowywanie obrazów i stworzyć obraz przykładowym poleceniem: qemu-img create -f raw routeros.raw 800M.
To polecenie stworzy obraz dysku o nazwie routeros.raw i rozmiarze 800 MB.
Następnie dla wygody tworzymy skrypt, który skonfiguruję zaporę dla wirtualnych hostów, aby przekazywać im połączenie internetowe:
#!/bin/sh
iptables -t nat -A POSTROUTING  -o wlan0 -j MASQUERADE
iptables -t nat -A POSTROUTING  -s 10.0.0.0/24 -d 0/0 -j MASQUERADE
Nie zapomnij włączyć przekazywania pakietów, odkomentuj linię net.ipv4.ip_forward=1 w pliku /etc/sysctl.conf i wydaj polecenie sysctl -p. Reguły te przekazują połączenie przez interfejs bezprzewodowy do sieci wirtualnej. Możemy dla wygody zapisać ten skrypt pod nazwą network.sh w katalogu, w którym będziemy przechowywać obrazy wirtualnych hostów i uruchamiać przed korzystaniem z nich. Oczywiście można dodać go do /etc/rc.local aby system robił to automatycznie.
Kolejnym krokiem jest stworzenie skryptu dla każdego hosta, tu przykładowy dla RouterOS:
#!/bin/sh
# -boot d z cdrom
kvm -hda /virt/routeros.raw -cdrom /virt/iso/mikrotik-5.8.iso -boot c -m 256 -net nic,macaddr=DE:AD:BE:EF:24:13 -net tap,ifname=tap0 -enable-kvm -smp 1 -daemonize & #-nographic 
Skrypt zapisujemy pod nazwą routeros.sh i za jego pomocą uruchamiamy wirtualny host. Watro wyjaśnić znaczenie poszczególnych opcji:
-hda - wskazuje na dysk host
-cdrom - wskazuje na obraz płyty w wirtualnym napędzie
-boot - decyduje o kolejności botowania, c oznacz dysk z opcji -hda, z oznacz obraz z -cdrom
-m - ilość pamięci przeznaczonej dla hosta
-net nic,macaddr - definiuje adres MAC interfejsu hosta
-net tap,ifname - wskazuje wirtualny interfejs przeznaczony dla danego hosta
-smp - ilość rdzeni przeznaczony dla hosta
-daemonize - uruchamia hosta w trybie demona, nie wyświetla jego terminalu w bieżącym, dzięki temu host może pracować jako serwer i nie blokować terinala
-nographic - nakazuje nie wyświetlać okna z monitorem hosta
Jeżeli pierwszy raz uruchamiamy hosta z pustym dyskiem i chcemy zainstalować system z obrazu to opcję -boot ustawiamy na d, po instalacji na c. gdy już skonfigurujemy ustawiania sieci w hoście i uzyskamy dostęp zdalny możemy użyć opcji -nographic, aby nie wyświetlał się zbędny ekran serwera.
Gdyby maszyna wirtualna się nie uruchomiła należy sprawdzić, czy mamy załadowane moduły kvm oraz dla procesorów Intel kvm_intel, a dla AMD kvm_amd. Oczywiście jeżeli procesor wspiera wirtualizację wszystko powinno działać bez zarzutu.

Wednesday, November 2, 2011

Dzień z życia (Life in a Day)

W 2010 roku na portalu YouTube ruszył projekt, którego celem było nakręcenie filmu dokumentalnego o jednym dniu życia na ziemi. Dniem tym był 24 lipiec 2010 r. - tysiące użytkowników youtube.com z całego świata mogło nagrać swój dzień (dokładnie 24 lipca) i przesłać go do projektu Life in a Day.

Z 4500 godzin przesłanych nagrań powstał 90-minutowy film dokumentalny. To pierwszy film tego typu, od 31 października 2011 r. dostępny jest już na YouTube.

O filmie: http://www.filmweb.pl/film/Dzie%C5%84+z+%C5%BCycia-2011-593899

Pełen film dostępny pod adresem http://youtu.be/JaFVr_cJJIY



Tuesday, November 1, 2011

Obsługa HTTP Pipelining w Chrome 17

Pipelining to technologia przyśpieszająca działanie protokołu HTTP, została wprowadzona wraz z wersją HTTP/1.1. Pozwala na niesekwencyjne wysyłanie zapytań do serwera w ramach jednej sesji TCP. Dla odróżnienia Keep-Alive daje już duże przyśpieszenie, a pozwala na sekwencyjne wysyłanie zapytań w ramach jednej sesji. Apache wspiera obie metody. Z kolei Firefox wspiera, ale domyślnie jest to wyłączone. Opera jest obecnie jedyną przeglądarką, która to wspiera domyślnie.

Teraz Chrome będzie wspierać tą funkcję. Aby lepiej zrozumieć jej znaczenie polecam zapoznać się z stroną: http://www.igvita.com/2011/10/04/optimizing-http-keep-alive-and-pipelining/

Najzabawniejsze jest to, że technika Pipelining istnieje od 1999 w RFC 2616.

http://code.google.com/p/chromium/issues/detail?id=8991

Capsicum - nowy sposób na izolację procesów

Capsicum, tak nazywa się nowe rozwiązanie opracowane w laboratorium Uniwersytetu Cambridge przy finansowym wsparciu firmy Google. Celem projektu jest kompleksowe rozwiązanie problem z bezpieczeństwem przeglądarki Chrome i systemu operacyjnego Chrome OS.
Capsicum to tzw. sandbox framework, który rozszerza POSIX API. Jego użycie wymaga zmiany kodu w aplikacjach. Poza tym jest to rozwiązanie na poziomie aplikacji, póki co, bo biblioteka dopiero się rozwija.
Na początek wprowadzono ją do nowego wydania FreeBSD 9.0, ale Google ma w planach przeportowanie go na system Linux.
W publikacjach na temat Capsicum (http://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf) wspomina się o tym, że użyta technika rozwiązuje wszystkie problemy w przeciwieństwie do swoich konkurentów, w tym do SELinux. Pojawia się pytanie, czy Capsicum wyprze SELinux?
Okazuje się, że nie koniecznie, pisze o tym Robert Watson, jedne z developerów Capsicum:
> How is Capsicum positioned, from user & admin perspective, when compared to 
> the MAC work on FreeBSD and SELinux on Linux? Is one the superset of 
> another, will one obsolete another?

This is a point addressed in some detail in the paper, which considers the 
relationship between Capsicum and other security models.  Capsicum is really 
addressed at the application author, whereas MAC models are typically 
addressed at a blend of system integrators and system administrators.  As a 
result, users mostly benefit from Capcisum transparently.
Ponadto jeden z deweloperów SELinux w swojej notatce poświęconej konkurencji ze strony Capsicum stwierdza, że z technicznego punku widzenia nie ma powodu, który nie pozwalałby na działanie obu tych technologi na tym samym systemie. To ważny fakt, ponieważ można się w sieci natknąć na takie informacje.
Rozwiązanie użyte w projekcie Capsicum jest o tyle prostsze, że nie wymaga administrowania w przeciwieństwie do SELinux, gdzie np. zmiana konfiguracji Apache może pociągnąć za sobą konieczność zmiany polityki SELinux, a ta wymaga już ponownego uruchomienia serwera.
Jednak z ogólnego punktu widzenia Capsicum wcale nie jest antidotum na wszystkie problemy związane z bezpieczeństwem. Capsicum nie można użyć do kontroli np. współpracy różnych części systemu.
Trzeba pamiętać, że jest to rozwiązanie problemu z bezpieczeństwem przeglądarki internetowej, które może mieć szersze zastosowanie, a nie odwrotnie. Zresztą jak Russell Coker zauważył, deweloperzy Capsicum ogłaszają, że stworzyli coś nowego ale nie zależy im na tym, aby to propagować.

Strona projektu: http://www.cl.cam.ac.uk/research/security/capsicum/

Wednesday, October 5, 2011

Testowanie wydajności serwera Apache

Posiadasz serwer HTTP Apache, który po prostu działa i nigdy wcześniej nie musiałeś przejmować się kwestią wydajności, aż do dziś? Jeżeli tak to przyda Ci się narzędzie do testowania wydajności serwera HTTP.

Ten wpis nie jest o tym, jak poprawić wydajność serwera Apache czy MySQL, lecz o tym jak przetestować maksymalne obciążenie serwera Apache oraz pośrednio bazy danych i skryptów PHP. Niemniej jednak wspomnę o pewnych ustawienia dot. wydajności tych serwerów.

Więc, gdy już staniesz przed zadaniem polegającym na oszacowaniem, czy Twój serwer sprosta określonemu zadaniu czas zapoznać się z co najmniej jednym narzędziem przeznaczonym to testowania jego wydajności. Ponieważ mowa tu o konkretnym serwerze jakim jest Apache, to najlepszym wyborem będzie narzędzie ab (skrót od ApacheBench).

ApacheBench możemy zainstalować w systemie Debian instalując paczkę apache2-utils. Dobrze jest te same testy wykonać bezpośrednio z samego serwera (czyli testujemy sam serwer) oraz ze zdalnego hosta, gdzie do testu wydajności serwera zostanie wkomponowana wydajność łącza, którym posługuje się serwer.

Najciekawszymi opcjami programu ab są parametry:
-c - określa ilość jednoczesnych zapytań
-t - określa czas trwania testu
-n - określa całkowitą ilość zapytań, które mają zostać wysłane

Serwer można testować na różne sposoby. Możemy kazać mu obsłużyć np. 2 tyś. zapytań i patrzeć ile mu to zajmie czasu (z określaniem ilości maksymalnych połączeń lub bez). Taki test ma następująca składnię:

ab -c 150 -n 200 <adres serwera>

Wynik takiego testu odpowie na pytanie ile czasu zajmie dla serwera obsłużenie 200 zapytań przy założeniu, że maksymalna ilość jednoczesnych zapytań nie będzie większa niż 150.

grzesiek@home:~$ ab -c 150 -n 200 http://abc.defgh.pl/sklep/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking abc.defgh.pl (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests


Server Software:        Apache
Server Hostname:        abc.defgh.pl
Server Port:            80

Document Path:          /sklep/
Document Length:        4180 bytes

Concurrency Level:      150
Time taken for tests:   27.192 seconds
Complete requests:      200
Failed requests:        0
Write errors:           0
Total transferred:      929000 bytes
HTML transferred:       836000 bytes
Requests per second:    7.36 [#/sec] (mean)
Time per request:       20393.908 [ms] (mean)
Time per request:       135.959 [ms] (mean, across all concurrent requests)
Transfer rate:          33.36 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       56  652 1002.6    189    3453
Processing:  1039 14081 7456.0  16816   26197
Waiting:      991 10618 5224.2  12306   21415
Total:       1100 14733 7740.0  19039   26429

Percentage of the requests served within a certain time (ms)
  50%  19039
  66%  20760
  75%  21232
  80%  21387
  90%  22152
  95%  23612
  98%  23821
  99%  24356
 100%  26429 (longest request)


Z przedstawionego wydruku wynika, że 27 sekund.

Drugim sposobem testowania może być test, który sprawdza ile zapytań serwer zdoła obsłużyć np. w czasie 3 minut przy założeniu, że maksymalna ilość jednoczesnych połączeń  nie będzie większa niż 300. Oto przykład:

ab -c 300 -t 300  <adres serwera>

Oczywiście podane w przykładach obciążenia są przesadzone, chyba że posiadasz bardzo dobre łącze.

Poza ab watro również zainteresować się programem httperf, który potrafi wykonywać testy z obciążeniem podobnym do rozkładu Poissona oraz http_load. Ten ostatni pod Debianem należy samemu skompilować.

http://httpd.apache.org/docs/2.0/programs/ab.html
http://www.hpl.hp.com/research/linux/httperf/
http://acme.com/software/http_load/

Wednesday, September 21, 2011

Czerwony znak zachęty dla konta root

W SUSE Linux Enterprise podpatrzyłem fajne ustawienie, a mianowicie chodzi o zmianę koloru znaku zachęty tzw. prompt po zalogowaniu się na konto root. Jest to o tyle przydatne, że dostajemy wzrokowe ostrzeżenie przypominające nam o tym, aby od tego momentu uważać co się robi.

Oczywiście wcześniej to robiłem, ale jak zwykle czas sprawia, że człowiek zapomina jak to się robi i gdy chce to zrobić ponownie na innym systemie ponownie szuka. Dlatego muszę to sobie zapisać.

Dla konta root modyfikujemy plik /root/.bashrc:


#export PS1='\h:\w\$ '
export PS1='\[\033[1;31m\]\h:\w\$\[\033[0m\] '

Pierwsza pogrubiona sekwencja znaków określa jak ma być kolorowany tekst ale nie określa kiedy należy zaprzestać kolorowania. Za to odpowiada ostatnia pogrubiona sekwencja, dzięki niej reszta wprowadzonego tekstu w terminalu nie jest kolorowana. Podkreślona jedynka sprawia, że znak zachęty jest pogrubiony, zero w tym miejscu oznaczałoby brak pogrubienia.


Jak i co znajdziemy tu:

Sunday, July 24, 2011

Ochrona przed atakiem typu buffer overflow (Stack-Smashing Protector)

Jak działa metoda buffer overflow? Przyjrzyjmy się przykładowemu programowi.


Tak na marginesie to trzeba mieć talent, aby takie coś napisać. Musiałem przerobić mój przykład tak, aby atak się udał ponieważ pierwotnie nie było to możliwe.
Program działa prosto, oczekuje jako parametru hasła. Poprawnym hasłem jest "root". Autoryzacja powiedzie się tylko wtedy, gdy wpiszemy "$ ./bflow2 root". 
Cały błąd projekcyjny tego programu leży w tym, że do autoryzacji używamy w ogóle nie potrzebnej zmiennej auth. Jak by tego było małe, to jest jeszcze ona zadeklarowana przed buforem, który można przepełnić. Nie ma sprawdzania długość hasła wprowadzonego przez użytkownika.
Zanim przejdę do rzeczy wspomnę jeszcze, że najpierw skompiluję i przetestuje program na swoim systemie Debian Squeeze amd64, a później na CentOS 5. Wyniki będą różne. W systemie Debian od wersji Lenny wszystkie możliwe paczki są kompilowane z opcją ochrony stosu. Mechanizm ten stworzył IBM, to tak zwany stack-smashing protector. Dokumentacje GCC zawiera te opcje.
Do rzeczy. Najpierw uruchomimy program z parametrem, który zapełni cały bufor, następnie w debuggerze gdb sprawdzimy ile jeszcze bajtów zostało do nadpisania zmiennej auth.


Cyfrę "1" w kodzie hexadecymalnym reprezentuje liczba "31". Można to sobie sprawdzić wydając polecenie  'echo "1111111111"|hd'.
Jedynek jest 10, zapełniamy cały bufor. Podkreśliłem je na czerwono. Trzeba pamiętać, że w pamięci bajty są umieszczone w odwrotnej kolejności. Dlatego wartości "31" nie są ciągłe.
Na zielono podkreśliłem adres zmiennej auth na stosie oraz wynik działania programu.
Jeżeli słowa zawierające koniec tablicy buff i zmienną auth odwrócimy to zobaczymy ile jest między nimi bajtów:
0x00313131   0x00000000   0xffe32000
0x31313100   0x00000000   0x0020e3ff   odwrócone
Bajty stanowiące odstęp między końcem tablicy buff, a zmienną auth oznaczyłem kursywą. Natomiast samą zmienną auth pogrubiłem. Teraz nie ma już wątpliwości, należy dopisać jeszcze 6 jedynek ('1') aby nadpisać zmienną auth. (Znak '1' ani '0' nie reprezentują w pamięci liczb 1 i 0, zapisywane są odpowiednimi kodami ASCII)


Jak widać atak powiódł się. Program dotarł do końca, wypisując tekst 'end' i uzyskał dostęp. Mimo wszystko system wykrył ingerencję w stosie programu. Świadczy o tym komunikat "Segmentation fault.". Dzieje się tak ponieważ większość najważniejszych programów w systemie Debian są kompilowane, z ochroną stosu.
Po opuszczeniu debuggera wywołałem jeszcze trzy razy program. Pierwszy raz miał o jedną jedynkę za mało (15), druki 16, a trzeci raz o jedną za dużo (17). Wpisując szesnaście jedynek program sam się nie zakończył, ale kod wykonał do końca, o czym świadczy wypisanie testu 'end'.
Teraz skompilujemy program z opcją -fstack-protector.


Tym razem zamiast samych jedynek użyłem kolejnych liczb, teraz można zobaczyć jak powinno się czytać zrzut pamięci od tyłu. Jak widać kompilator odwrócił kolejność zmiennych na stosie i nie można teraz poprzez tablicę buff nadpisać zmiennej auth, ponieważ jest ona przed nią.
Nawet z opcją -fstack-protector da się nadpisac w taki sposób zmienne z funkcji main(). Aby temu zapobiec należy użyć opcji -fstack-protector-all.
Teraz przetestujemy ten sam kod na systemie CentOS 5.


Najpierw sprawdzamy jaki jest odstęp między zmiennymi. Łoł - nie ma żadnego. Wystarczy dodać tylko jeden znak, czyli zamiast jako parametr podać 10 znaków, należy podać 11 i gotowe.
Dodałem 'x', jak widać działa pięknie. Potem kompilujemy program z ochroną stosu i również działa jak powinno - przerwał program i nie pozwolił mu dalej pracować. Różnice w zachowaniach kompilatora na obu tych systemach wynikają z kompilacji z różnymi opcjami gcc i nie tylko.
W systemie Debian opcja ochrony stosu zapobiegła atakowi, a system w całości wykonała kod programu, w CentOS program został natychmiast przerwany.

Saturday, July 23, 2011

FreeBSD vs. Linux?

Ostatnio na urlopie miałem więcej czasu niż zwykle i temat FreeBSD ponownie powrócił. FreeBSD jest lepszy od GNU/Linux czy nie? Warto poświęcać czas na uczenie się nowego systemu, czas który mógłbym poświęcić na zgłębianie tajników już dobrze znanego mi systemu z pod znaku pingwina? W tym tekście postaram się odpowiedzieć na te i wiele innych pytań z mojego punktu widzenia, co należy podkreślić.

System FreeBSD nurtował mnie od dawna, nawet można powiedzieć, że od kiedy o nim przeczytałem. Jednak poważniejsze próby podbicia tego systemu miały miejsce jakieś dwa lata temu. Jak zwykle podchodząc poważnie do tematu kupiłem książkę, która pomogłaby mi lepiej zrozumieć ten system, a co za tym idzie usprawni migrację. Szczerze mówiąc to byłem bardzo napalony na ten system, ach ten demon. Niestety lektura książki "FreeBSD 6. Księga eksperta" nie podtrzymała mojego zapału, wręcz przeciwnie, trochę nawet mnie rozczarowała. Oczywiście nie była to wina jakości samej książki, raczej argumentów jakie autor używał do udowodnienia, że FreeBSD jest lepszy od GNU/Linux.

Po wstępnym zapoznaniu się z nowym systemem i kilku podejściach przejścia z GNU/Linux na FreeBSD szybko zdałem sobie sprawę, że ten system na desktop się nie nadaje. Chyba że czyimś celem jest ciągłe bawienie się samym system. FreeBSD pozostawał nadal opcją jako system serwerowy, tylko ciężko uczyć się nowego systemu i nabierać w jego obsłudze wprawy, gdy nie używasz go na co dzień.

Tak to wyglądało te dwa lata temu. W międzyczasie próbowałem jeszcze kilka razy ale to takie trochę jakby dla zabicie nudy. Wpadła mi też w ręce książka "FreeBSD 7. Instalacja i konfiguracja" ale nie wniosła żadnych nowych rewelacji.

Teraz na nowo podszedłem do tematu. Konfigurowałem we FreeBSD te same usługi i mechanizmy co w GNU/Linux, przejrzałem chyba wszystkie dyskusje w internecie na temat wyższości BSD nad GNU/Linux i stwierdzam co następuje :)

Na celownik pozwolę sobie wziąć pewien artykuł, do którego często odsyłają zwolennicy FreeBSD na polskich forach. Ale bez obaw, w języku angielskim również pełno takich argumentów - przykład.
Oczywiście nie będę tu komentował wszystkich fragmentów, które wydały mi się nie do końca prawdą lub bliższych emocji niż logice. Wybrałem tylko te najbardziej sprzeczne z własna ideologią.

Niesłuszne zarzuty
Najpierw czytamy, że system GNU/Linux jest rozwijany przez niezorganizowaną rzeszę:
"...ludzi żyjących w różnych państwach, mówiących różnymi językami i posiadających odmienne ideologie."
Potem o tym:
"Ze względu na podział panujący w Gnu i Linux trudno wyszczególnić jednoznacznie jakąś grupę osób odpowiedzialnych za rozwój całego projektu."
Nie ma gwarancji :) ale zaraz, przecież takie są założenia licencji GPL:
"For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software."
Poza tym przeanalizujmy to dokładnie. Jeżeli instalujesz FreeBSD na serwerze i coś nie działa, to gdzie wtedy kieruje się swoje żale? Otóż pozostaje Ci tyle sam co w przypadku Linuksa, zgłosić błąd, a najprędzej zainstalować starsza wersję lub coś podobnego.
Poza tym w przypadku Linuksa można sobie wykupić taką 'odpowiedzialność'. Są nią dystrybucje komercyjne. Prawdopodobnie dlatego wiele dużych firm wybiera Linuksa.
Natomiast za rozwój całego projektu odpowiedzialni są deweloperzy danej dystrybucji.
Podobne zarzuty przeczytałem we wspomnianej książce, dlatego mnie tak rozczarowała.

Linuksowi zarzuca się również, że ma 100 różnych dystrybucji, natomiast następny fragment jest o współpracy, ale czego?
"Współpraca 
Każdy z system z rodziny BSD ma swoje własne cele i założenia, które są realizowane przez developerów. Daje to możliwość równoległego testowania różnych technologi i rozwiązań. Sprzyja to również ogólnemu rozwojowi wszystkich systemów. Ze względu na niedrastyczne różnice kodów poszczególnych BSD istnieje możliwość wymiany technologicznej. Czyli w momencie w którym jakaś technologia zostanie wprowadzona i przetestowana przez jeden z systemów może nastąpić przeportowanie jej do innego BSD przy stosunkowo niewielkim nakładzie pracy. Taka wymiana nie jest możliwa z systemem Linux a przynajmniej nie z taką łatwością."
Oto jedna z największych bzdur. Okazuje się że nie tylko Linux ma wiele dystrybucji, jest FreeBSD, OpenBSD, NetBSD, PC-BSD i DragonFly BSD, a nawet więcej. Nie ma tylko jednego FreeBSD rozwijanego przez zespół niecałych 20 programistów. Najlepsze, to to że różne odmiany *BSD potrafią się dzielić nowymi rozwiązaniami a GNU/Linux nie hehee. Dobrym ostatnim przykładem jest Upstart. Jak widać nie trafny przykład.

Teraz kolejna perła :)
Jak wiemy licencja BSD jest bardziej liberalna niż GPL. Jak to w tym artykule ładnie ujęto:
"Ideologia GPL i BSD. Niewolników wolności i prawdziwie wolnych."
Z tego też powodu FreeBSD ma taką otóż przewagę:
"Komercja

Równie ważne jak sam system jest fakt jego wykorzystania przez rynkowych liderów. Dlatego ważny jest proces komercjalizacji, nie systemu, ale produktów na nim opartych. Istnieje wiele rozwiązań komercyjnych wykorzystujących Gnu/Linux jak i BSD. To znaczy, że zarówno pierwszy jak i drugi system dają się łatwo sprzedać. Niestety dość restrykcyjna licencja GPL często odstrasza dużych graczy."
Okazuje się, że życie w tej kwestii pokazuje zupełnie co innego. Owszem, Mac OS X korzysta z tej wolności oraz wielu producentów urządzeń UTM. Jednak ostatnio największe koncerny skupiają swoje rozwiązania na platformie Linux, a nie FreeBSD. Gorący przykład do Oracle, o członkach The Linux Foundation nie wspomnę. Obecnie największą firmą wykorzystującą GNU/Linux jest Google. Ostatnio również pisałem o tym, że Yahoo! pomału migruje na GNU/Linux. Także argument bardzo nie trafny, a już na pewno nie mający wiele wspólnego z prawdą. Na ironię, to GNU/Linux posiada komercyjne wersje, a nie FreeBSD hehe

Kolejna perła :)
Tym razem o tym w czym się specjalizuję, czyli zapora ogniowa. Dlatego też nie skończę tylko na cytowaniu i komentowaniu ale także napisze trochę o moich doświadczeniach, bo testowałem zaporę we FreeBSD. Ale najpierw ironia:
"Systemy plików

Niewątpliwie Linux obsługuje największą ilość różnorakich systemów plików. Między innymi ext2, ext3, ext4, FAT, HFS, JJFS, JFS, UDF, XFS, ReiserFS, Reiser4, Tux3. Zapewne większość z nich jest bardzo dobrze przetestowana. Jednak warto zauważyć że przy tak dużej ilości systemów plików bardzo trudnym staje się dokładne przetestowanie nowej wersji jądra wraz ze wszystkimi możliwymi systemami plików. Co niekiedy zmniejsza stabilność naszej maszyny.
Z kolei systemy BSD nie obsługują tak imponującej ilości systemów plików. Są w stanie wykorzystać między innymi UFS, FAT, ext2 oraz ZFS. Dzięki małej różnorodności każdy aspekt poszczególnego systemu plików jest zbadany i należycie przetestowany co minimalizuje straty danych. 
Firewall

Ważnym zabezpieczeniem systemu operacyjnego jest firewall. Dlatego też standardem stało się dołączanie zapory ogniowej do systemu. Linux standardowo dystrybuowany jest z netfilter/iptables, który zapewnia pełną dowolność w zarządzaniu naszymi portami i pakietami sieciowymi.
Natomiast systemy z rodziny BSD wykorzystują inne filtry pakietów. Są nimi PF lub IPFW w zależności od upodobań developerów. Istotną przewagę nad szeroko wykorzystywanym netfilter’em filtry BSD mają w prostocie konfiguracji. Bardzo dużą uwagę poświęcili developerzy kwestiom tworzenia reguł. Zapewniło to znaczącą poprawę czytelności wszystkich plików konfiguracyjnych, oczywiście są one human-readable. Filtry BSD w żadnej mierze nie ustępują wydajnością ani funkcjonalnością netfilter’owi, niejednokrotnie go przewyższając."
No tak, Linux obsługuje masę systemu plików, to źle, to bardzo źle ale tak się składa, że firewall to ona ma jeden a nie trzy: IPF, IPFW i PF! Ok, to który wybrać hehe? [FreeBSD Handbook: Chapter 30 Firewalls]
Jak widać minimalizm względnie pojęty.
Ale przyjrzyjmy się ostatniemu zdaniu, które twierdzi, że możliwości powyższych zapór są większe niż zapory Netfilter. G**** prawda, bo inaczej nie powiem. Gdzie w tym PF znajdę taki mechanizm jak moduł recent? A może moduł string ma któraś z tych trzech zapór ogniowych?
Znalazłem książkę o PF, jest tego dużo. Pamietam ile trzeba było czasu poświęcić na to, aby sprawnie posługiwać się zaporą Netfiltera. Skoro tyle czasu poświęciłem na naukę jednej, to teraz mam kupić książkę do drugiej i poświęcić wiele czasu na to, aby nauczyć się robić to samo tylko tyle, że na innym systemie? Czy to ma sens? Czy się opłaca? Zwłaszcza, że moduły iptables oferują coraz to więcej możliwości.
Znalazłem blog, którego autor po wieloletnim używaniu FreeBSD zachwycił się Ubuntu! Sam nie lubię Ubuntu. Jak widać upodobania dotyczące używanego systemu w przypadku FreeBSD vs. Linux nie wiele się różnią od powszechnych wojen w świecie GNU/Linux zwanych 'Która dystrybucja jest lepsza'.
Dla zaprawionego linuksiarza przesiadka na FreeBSD z praktycznego punktu widzenia nie wiele oferuje korzyści. Moim zdaniem nie opłaca mi się uczyć nowych mechanizmów jeżeli nie oferują one więcej. Wcześniej może tak było, ale obecnie GNU/Linux jest na takim etapie rozwoju, że nie wiele jest mechanizmów we FreeBSD, których nie oferowałby GNU/Linux.

Pozytywne cechy FreeBSD
Mimo iż piszę o tym, że FreeBSD wcale nie jest lepszy od GNU/Linux to nie znaczy, że nie cenię sobie pewnych rozwiązań zaimplementowanych we FreeBSD. Mało tego, wiele tych rozwiązań zostało przeniesionych do świata GNU/Linux. System portów FreeBSD został zaimplementowany w Gentoo! Jądro FreeBSD jest obecnie jedną z opcji w dystrybucji Debian!

Kiedyś FreeBSD szczyciło się mechanizmem Jali, ale teraz GNU/Linux ma LXC. National Security Agency (NSA) wybierając platformę do implementacji mechanizmu MAC (SELinux) wybrało GNU/Linux, a nie FreeBSD.

Oczywiście FreeBSD jest niemal wzorcowym systemem pod względem implementacji. Jeżeli weźmiemy pierwszą lepszą książkę poświęconą systemom operacyjnym, to rozwiązania zaimplementowane we FreeBSD są często bliższe ideałowi, niż te w GNU/Linux. Lista właściwości jądra FreeBSD naprawdę robi wrażenie. To główny powód, dla którego interesuje się tym systemem.
Należy jednak zaznaczyć, że mimo, iż implementacji np. wątków i procesów w jądrze Linux jest dosyć dziwna to nie znaczy, że są wolniejsze, czy mniej funkcjonalne w stosunku do tych wzorcowych z FreeBSD. Pisałem o tym w poprzednim roku.

Kolejną przyciągającą rzeczą do FreeBSD jest jej społeczność. Jest bardziej dojrzała i mniej w niej fanatyków, aczkolwiek jak pokazywałem wcześniej też ich tam nie brakuje. Muszę przyznać, że poruszane tematy w magazynach poświęconych *BSD są bardziej zaawansowane niż te znajdujące się w prasie poświęconej GNU/Linux. Wynika to pewnie z tego, że użytkowników *BSD jest mniej, a odsetek fanatyków w tej populacji zdecydowanie mniejszy niż w GNU/Linux. Nie przeszkadza to jednak w niczym, aby czytać z pożytkiem teksty przeznaczone dla *BSD ponieważ zdecydowana większość zawarta tam informacji ma odwzorowanie w systemach GNU/Linux. Oprogramowanie jest wspólną cechą obu tych systemów, a system to tylko ok. 20% różnicy, na którym to oprogramowanie jest uruchomione.
Nie wątpliwie FreeBSD ma znacznie lepsza dokumentację.

Tak naprawdę, to cała różnica pomiędzy FreeBSD, a GNU/Linux sprowadza się do innego jądra i innej filozofii połączenia innych komponentów systemowych. Tym drugim różnią się również poszczególne dystrybucje systemu GNU/Linux. Ważną kwestią są również mechanizmy bezpieczeństwa. Mimo, iż FreeBSD wstępnie jest lepiej skonfigurowany pod tym względem to nie znaczy, że konfiguracji tej nie da się zastosować w GNU/Linux. Oba systemy mają równoważne mechanizmy np. do ochrony przed atakiem typu buffer overflow. System przeznaczony do testów penetracyjnych dla profesjonalistów od bezpieczeństwa BackTrack bazuje na systemie Linux, a nie FreeBSD.

Wnioski
GNU/Linux jest dominującym systemem dla rozwiązań serwerowych. To sprawia, że wszelkie prace nad rozwojem tego typu systemów i rozwiązania są, i będą implementowane na tej platformie. Jak wiadomo duży może więcej.

Natomiast całą filozofie wyższości FreeBSD nad GNU/Linux można groteskowo sprowadzić do poniższej ilustracji.
Więcej argumentów za nie znalazłem :)

Na koniec wspomnę jeszcze tylko o jednej z prawd jaką odkryłem w przeszłości, gdy bardzo interesowałem się programowaniem. Jak wiadomo tam również obecna jest wieczna dyskusja na temat 'Który język programowania jest lepszy'. Otóż okazuje się, że najlepszym językiem dla danej osoby jest ten, który zna najlepiej.

Kolejną mądra zasadę, która padła podczas dyskusji FreeBSD vs. Linux na forum linuxquestions.org jest:
"Use the right tool for the job."

Thursday, July 21, 2011

Microsoft - "don't panic!"

Microsoft z okazji zbliżającego się 20-lecia systemu GNU/Linux po prostu chce powiedzieć wszystkiego najlepszego i zaproponować rozejm i współpracę?





http://h-online.com/-1282639

Thursday, July 14, 2011

Friday, July 8, 2011

Windows 7 - problem z usługą Bufor wydruku

Ostatnio w pracy miałem ciekawą usterkę. Na jednym z komputerów nagle, ni stąd, ni zowąd zniknęły wszystkie drukarki. To nie kabel, ani nic związanego z łącznością. System wyłączył usługę Bufora wydruku. Problem tylko w tym, że nawet jeżeli włączę ją ręcznie, to i tak zaraz zostanie automatycznie wyłączona. Trochę mi to zajęło zanim znalazłem sposób na naprawienie tego problemu - w końcu z systemami Windows mam teraz mniej do czynienia niż z Linuksem.
Przyczyna ponoć było zapchanie bufora wydruku. Wyczyścić go można poprze usuniecie zawartości katalogu C:\WINDOWS\system32\spool\PRINTERS - ufff, i wszystko wróciło do normy.

Dodano 23 grudnia 2011:
Opisany wyżej problem zaczął powtarzać się coraz częściej, a mianowicie czyszczenie bufora pozwalało na jednorazowe drukowanie. Nowym rozwiązaniem pogarszającego się problemu jest użycie tego narzędzia: http://windows.microsoft.com/en-US/windows-vista/Troubleshoot-printer-problems#EOD
Na razie z powodzeniem...

Saturday, June 25, 2011

GIMP - efekt starych, poszarpanych zdjęć

Tak się złożyło, że muszę przygotować do druku pewną publikację. Ponieważ robię to we własnym zakresie, a domu nie mam Adobe InDesign i Adobe Photoshop postanowiłem do tego wykorzystać darmowe narzędzia, czyli Gimp i Scribus.
Na jednej ze stron bardzo pasowałyby stare zdjęcia z poszarpanymi krawędziami, jak to niektórzy bardzo lubią. Gimp ma taki filtr ale jego efekt, raz że nie spełnia moich oczekiwań, dwa że potrzebna jest mi przeźroczystość. Postanowiłem zrobić to sam i muszę przyznać, że końcowy efekt jest super.


Teraz opiszę jak otrzymać taki efekt. Po przygotowaniu obrazu do publikacji tworzymy nowy dokument o takich samych rozmiarach i rozdzielczości, najlepiej w formacie TIFF i tłem ustawionym na przeźroczystość. Następnie przeźroczystą warstwę zapełniamy czarnym kolorem. Ustawiamy marginesy określające zakres efektu w głąb obrazu i przedstawionym poniżej pędzlem malujemy białym kolorem poszarpane krawędzie.



Gdy już skończymy zapisujemy nasza wzór do formatu TIFF. Następnie otwieramy obraz, do którego chcemy zastosować efekt i nasz wzór.



Teraz warstwę z naszego wzorca/maski przenosimy do obrazu docelowego (powyżej). Następnie ustawiamy dla przeniesionej warstwy tryb Screen. Powinniśmy otrzymać taki sam efekt ja na przedstawiony poniżej obrazie.



Teraz bierzemy magiczną różdżkę i zaznaczamy białą obwódkę. Tu najważniejszy jest parametr tolerancja. W Photoshopie jego domyślną wartością jest 32, w Gimpie jest nisza. Proponuje ją zmienić na większą, ale jaką to już powinieneś zdecydować sam. Ja wybrałem 29.9, poniższy obraz przedstawia dlaczego.



Pewnie zauważyłeś, że podczas rysowania maski czarno na białym ;) widać, że ten pędzel nie tworzy ostrych wzorów, tylko posiada również częściowo przeźroczyste piksele. Dzięki temu krawędzie obrazu nie są ostre, posiadają również łagodne przejścia do koloru białego.
Pisząc wcześniej o regulacji parametru tolerancja dla magicznej różdżki właśnie to miałem na myśli, aby ustawić go tak, aby część pikseli przejściowych nie została zaznaczona.Teraz usuwany zaznaczenie.


I dzięki pozostawieniu przejściowych pikseli otrzymujemy efekt porwanego zdjęcia, gdzie widać biały papier pod warstwą lakieru na jego wierzchu.

Pozostało jeszcze nadać jej starą koloryzację. Przedstawiam parametry, które mi dały zadowalający efekt.

Zdejmujemy kolor, ale nie do końca, pozostawiamy 20%.


Nadajemy jej żółty odcień poprzez regulację kolorów, tzn. resztki kolorów ;)



Następnie troszkę zmniejszamy jasność, a podbijamy kontrast.


Teraz tylko importujemy i voila :)

Thursday, June 23, 2011

iPad i nowości od Apple

W poprzedni weekend w moje ręce wpadł iPad, wersja pierwsza. Byłem tak zadowolony z wygody przeglądania sieci, że nawet nie przeglądałem zainstalowanych w nim aplikacji.
Muszę przyznać, że iPad zrobił na mnie ogromne wrażenie. Nigdy wcześniej przeglądanie Internetu nie było tak wygodne.
Na konferencji Apple Worldwide Developers Conference 2011 (6 czerwca) Steve Jobs przedstawił nowości jakie zafundowała jego firma użytkownikom.





Tuesday, May 31, 2011

HP ProBook 4320s z SUSE Linux Enterprise Desktop 11 SP1

Około tydzień temu stałem się posiadaczem powyższego laptopa z preinstalowanym systemem SLED 11. Pierwsze wrażenie z użytkowania były trochę rozczarowujące, zwłaszcza to, że NetworkManager zrywał mi połączenie bezprzewodowe z siecią. To oraz architektura i568 i brak wpływu na układ partycji - na swap zabrał ok 7GB - wystarczyło, aby pod wpływem negatywnych emocji rozpocząć testowanie innych systemów linuksowych. Niestety na żadnym nie udało mi się zmusić touchpada do prawidłowego działania. Nawet na Windows 7 bez instalacji sterowników nie działa on prawidłowo. O ile na platformę Windows te sterowniki są dostępne, to już na Linuxa nie. Ale o tym napiszę dokładniej.

Otóż na stronie HP do tego modelu dostępne są wszystkie sterowniki, nawet do Linuksa, tylko że przeznaczone są one wyłącznie do systemu SUSE! Ponieważ to paczka PRM, to próbowałem ją zainstalować na Fedorze 15. Efekt taki, że gdy Xorg załadował sterownik z tej paczki, to touchpad w ogóle przestał działać.
Mało tego, eksplorując zasoby paczki natrafiłem na plik Relase.txt, gdzie możemy dowiedzieć się, że prace nad wersją sterownika dla systemu Linux rozpoczęły się w kwietniu 2010 roku. Sterownik jest dopracowany i gotowy, na SLED 11 działa świetnie. Oto jak się okazale prezentuje.


Ciekawe tylko czemu, gdy odwiedzi się stronę producenta wyeksponowane są pięknie wszystkie sterowniki: http://www.synaptics.com/support/drivers oprócz tych dla Linuksa.

Zacząłem głęboko zastanawiać się nad tym jaki interes firma Synaptics ma w tym, aby jej sterowniki nie były powszechnie dostępne dla systemu Linux. Podczas instalacji Windows 7 dziesiątki razy zgadzałem z postanowieniami licencyjnymi instalując masę sterowników w Windows. To jakiś obłęd, jakie korzyści mają te firmy z mniejszej dostępności sterowników do swojego sprzętu? ATI już to "ćwiczył" i jak na tym wyszedł, sam kupując komputer wybierałem koniecznie kartę NVIDIA, aby sterowniki działały pod Linuksem.

Wracając do pytania o korzyści firmy Synaptics z nieudostępniania sterownika ogólnie dla systemu Linux, to powiem tak: Debian powinien dodać sobie do nazwy systemu słówko "Enterprise". Dlaczego?
Bo w niczym nie ustępuje wielkiemu SUSE - kolejne 'rozwiązania dla biznesu' - skąd ja to znam? no tak, Windows...

Otóż SUSE Linux Enterprise Desktop wcale nie jest nadzwyczajnym Linuksem, jego repozytoria są tak ubogie, że nie mogłem uwierzyć. Nie znajdziesz tam klienta FileZilla, nawet Thunderbird jest dostępny dopiero po uaktywnieniu repozytorium Extras i to w wersji 2.0.0. Na Debianie Squeeze mam Icedove 3, a podobno Debian jest skostniały.
Teraz trochę przejadę się po graficznej konfiguracji serwerów w SLED 11. Dajmy na to Samba, dopóki nie wszedłem do terminala i nie utworzyłem konta w Sambie za pomocą pdbedit to dalej nic nie działało.

Ostatecznie po aktualizacji, NetworkManager przestał zrywać mi połączenie z routerem. Okazało się, że problem jest znany. Po instalacji compiza system wygląda jak trzeba - przynajmniej on jest w repozytoriach.


Jak widać wtyczki w Firefox są od razu preinstalowane - i to się nazywa klasa Enterprise ;)

Gdyby touchpad działał mi pod Debianem, to od razu bym go przeinstalował i to jest własnie powód, dla którego Synaptics nie udostępnia swoich sterowników, a raczej Novell ich nie udostępnia - może płaci dla Synaptics za to. Oto co kasa robi z oprogramowania.

Podsumowując, gdybym kupił sobie SLED 11 na komputer stacjonarny to na pewno żałowałbym wydanych pieniędzy. SUSE to nie Debian, ale też i nie Windows, więc ciesze się z tego co mam.
Żaby nie było, że nic dobrego nie zauważyłem w SLED to dodam, że mało zużywa pamięci, nie całe 300MB (po starcie z compizem) i to się nazywa system, nie to co Windows 7, gdzie ilość RAMu to: x-1 GB.

Dodano 6 czerwca:
Wczoraj miarka się przebrała, przestał działać VirtualBox. Oczywiście nie było go w standardowych repozytoriach, zainstalowałem paczkę na SLES 11 z oficjalnej strony projektu. Działał bez problemu do wczoraj. W sobotę była jakaś mała aktualizacja i VirtualBox stracił prawa do własnych plików.
Powiedziałem sobie dość, i przeinstalowałem na Debiana. Touchpad nie działa prawidłowo, ale za to cała reszta działa.

Sunday, May 22, 2011

Biznes w Internecie, czyli Polska Internetowa

"Google zleciło wiodącej firmie konsultingowej Boston Consulting Group przygotowanie niezależnego raportu na temat znaczenia internetu dla polskiej gospodarki. Naszym zdaniem, internet istotnie wpływa na wzrost gospodarczy, a raport dostarcza informacji wyjściowych do zaplanowania jego rozwoju."
W ramach dalszych działań Google stworzyło akcję Internetowa Rewolucja, skierowaną do Polskich firm. Partnerami akcji są home.pl oraz (uwaga!) Polską Konfederacją Pracodawców Prywatnych Lewiatan. Honorowym patronatem akcji jest Ministerstwo Gospodarki.
Nie ma co ukrywać, że większe obroty w polskim internecie przełożą się na większe dochody Google.



Więcej na www.polskainternetowa.pl

Thursday, May 5, 2011

Żenujące właściwości systemu Windows

Dziś trochę o systemie, którego nie używam, już nawet wiem dlaczego :)

Konfigurowałem nowy laptop z Windows 7 dla użytkownika końcowego. Włączyłem konto gościa i ukryłem swoje konto administracyjne. Mówiąc ukryłem mam na myśli wpisanie konta do klucza SpecialAccounts>UserList w rejestrze. Zawsze tak robię, potem podczas logowania wystarcza wcisnąć trzy klawisze Ctrl+Alt+Del aby móc się zalogować na nasze niewidzialne konto - nie widać nie korci.
Tym razem trzy klawisze nie działają, może jest to związane z kontem "Gość". Z tegoż to konta próbowałem uruchomić regedit jako administrator (nazwa konta "grzesiek"). Wpisałem:

runas /user:grzesiek regedit

i otrzymałem informację, że do uruchomienia tej aplikacji potrzebuję konta z większymi uprawnieniami. Dobrze gada, ale ja musiałem szybko coś zmienić w systemie. Więc pomyślałem, czy pozwoli na to:

runas /user:grzesiek cmd

wpisałem hasło i poszło. Z nowej konsoli bez problemu uruchomiłem regedit - co za logika zabezpieczeń ;).

Zainteresowany tym przypadkiem chciałem powtórzyć eksperyment w domu na wirtualce. Trochę się pośpieszyłem i stało się.


Co się stało? Otóż jak wiecie domyślnie Windows pozwala mieć na koncie administratora puste hasło. Takie też miałem ustawione, bo to był system testowy, więc było wygodniej. Logował się automatycznie i nie zawracał głowy.
Tylko, że po ukryciu tego konta ("grzesiek") z konta gościa nie mogę odblokować swojego konta, bo jak polityka bezpieczeństwa systemu stwierdziła "niedozwolone puste hasła"! No nie. ale jak zakładałem konto administratora bez hasła to pozwolił. To jest właśnie Windows, zablokowany zresztą ;)

Thursday, April 21, 2011

Yahoo! dołączył do The Linux Foundation

The Linux Foundation zrzesza największe firmy, którym zależy na rozwoju systemu Linux. Zazwyczaj wykorzystują go w swoim biznesie, członkowie płacą roczne składki, które są stopniowane. I tak:

Platinum Membership (500,000USD)
Gold Membership (100,000USD)
Silver Membership (5,000 - 20,000USD)

The Linux Foundation właśnie poinformował, że Yahoo! dołączyło do grona Silver Membership. Pod adresem http://www.linuxfoundation.org/about/members możemy zobaczyć spis członków Linux Foundation.

Dlaczego fakt dołączenia Yahoo! jest wart odnotowania? Już mówię. Jeżeli interesowałeś się systemem FreeBSD, lub masz zamiar, to zapewne usłyszysz o tym, że wiele firm, w tym własnie Yahoo! używa tego systemu. Pamiętam, że w książce poświęconej FreeBSD we wstępnie przeczytałem, że o stabilności tego systemu może świadczyć fakt, że twórcy serwisu Yahoo! wybrali FreeBSD, a nie Linuksa mimo, iż był on jeszcze we wstępnej fazie rozwoju. Natomiast dziś możemy usłyszeć o tym, że Yahoo! przechodzi na Linuksa.

W dniach 6-7 kwietnia 2001 r. w San Francisco miał miejsce panel Linux Foundation Collaboration Summit z udziałem dyrektorów największych firm (IBM, AMD, Yahoo!), gdzie dyskutowano na temat przyszłości systemu Linux w roli systemu Enterprise oraz w rozwiązaniach Cloud.




http://www.linuxfoundation.org/news-media/announcements/2011/04/yahoo-joins-linux-foundation

Sunday, April 17, 2011

Linux ma już 20 lat

W 2009 roku 40-lecie obchodził UNIX, natomiast w tym roku swoje 20-lecie obchodzi Linux. Linux Foundation przygotował video z tej okazji.




W przedstawionym filmie wspomniano o poniższej reklamie IBM

W sierpniu planowana jest konferencja celebrująca to wydarzenie.
I'll be celebrating 20 years of Linux with
The Linux Foundation!

Saturday, April 16, 2011

Koniec komercyjnej wersji OpenOffice.org, co z LiberOffice?

Wczoraj Oracle ogłosił, że OpenOffice będzie całkowicie wolnym projektem i wersja komercyjna nie będzie dłużej rozwijana. Najciekawsze w tym jest to, że we wrześniu ubiegłego roku w wyniku niejasnej strategi Oracle po przejęciu Sun społeczność open source oddzieliła się od głównego projektu tworząc nowy projekt zwany LiberOffice. Jego celem miało być zapewnienie wolności i dalszego rozwoju dla tego produktu. Natomiast dziś, osiem miesięcy po tym wydarzeniu Oracle ogłasza, że oddaje projekt OpenOffice całkowicie w ręce społeczności open source.
Wiadomość dobra ale nagła zmiana decyzji podejrzana. Warto wspomnieć, że coraz jaśniej kształtuje się pewien model zarabiania na projektach open source. Polega on na rozwijaniu wraz z społecznością projektu oferującego podstawową funkcjonalność, którego mogą używać wszyscy, oraz rozwijaniu dodatkowych funkcji dedykowanych dla dużych rozwiązań, które są produktem komercyjnym. Doskonałym przykładem jest MySQL, na którym obecnie zarabia również Oracle.

http://www.marketwire.com/press-release/Oracle-Announces-Its-Intention-to-Move-OpenOfficeorg-to-a-Community-Based-Project-NASDAQ-ORCL-1428324.htm

Thursday, March 10, 2011

Wysyłanie poczty przez mutt (w skrypcie)

"All mail clients suck. This one just sucks less."
The Mutt E-Mail Client
www.mutt.org

Prawda, że ładne hasło? Miałem problem z wysyłaniem wiadomości przez mutt, a właściwie z kodowaniem znaków. Napisałem skrypt, który wysyła powiadomienia o zmianie pliku na listę mailingową. Swoją drogą miało być góra po 10 linii kodu na plik (mniej więcej jak to przedstawiłem we wcześniejszym wpisie), a wyszło prawie 300 linii - jak zwykle :).
Kodowanie w systemie mam ustawione na UTF-8, jak wysyłam e-maila poleceniem

echo "śćńłó" | mutt -s "test ółąę" do@mnie.nie

to nie ma problemów z polskimi znakami, czyli kodowaniem, ale jak wrzucę to w skrypt i odpalę przez crona to w niektórych serwisach (zwłaszcza poczta przez www) jest problem z polskimi znakami.
Zacząłem grzebać w opcjach klienta mutt i znalazłem parę fajnych opcji (plik /etc/Muttrc):

set send_charset="utf-8"
set charset="utf-8"
set edit_headers=yes
set realname="od kogo [jak chcesz]"
set from="to@nie.jestod.root"
set use_from=yes
my_hdr Reply-To: odp@do.mnie.pl

Ta druga rozwiązuje ten problem, szkoda tylko, że przez cały dzień myślałem, że to ta pierwsza - trudno, czasami trzeba się przespać z problemem.

Dlaczego wybrałem Mutt? Wygodny sposób na wysyłanie e-maili z załącznikami (opcja -a)

Jak objawiały się problemy z kodowaniem? Pierwszy to

Content-Type: multipart/mixed; boundary="ZGiS0Q5IWpPtfppv"
powinno być
Content-Type: text/plain; charset=utf-8

oraz

Subject: Zmiana =?unknown-8bit?Q?rozk?= =?unknown-8bit?B?xYJhZHUgemFqxJnEhyAtIFJhZHp5bWnFhHNrYQ==?=

powinno być

Subject: =?utf-8?B?YWFhw7PFgsWExbzFmw==?=

i wszystko jasne, prawda :)

Logowanie działań przez SFTP

Jakiś czas temu pisałem o tym, jak przez SFTP zamknąć w klatce użytkownika. Teraz o dodatkowej funkcjonalności, którą jest logowanie tego co użytkownik pobiera itp.. Ponieważ czasami są to dane osobowe to lepiej monitorować ich zdalne pobieranie.

Wystarczy zmodyfikować linię:
Subsystem sftp internal-sftp -l VERBOSE

Monday, March 7, 2011

Monitorowanie zmian pliku

Testowałem rozwiązanie, polegające na monitorowaniu zmian pliku w sieci. Powiadomienie można wysyłać poprzez e-mail, a przedstawiony kod przedstawia tylko samą operację porównywania.

#!/bin/sh
wget serwer.pl/download/Plik.pdf
if [ -f Plik.md5 ]; then
md5sum -c Plik.md5
if [ $? -eq 0 ]; then
echo "bez zmian"
else
echo "zmienił się"
  md5sum Plik.pdf > Plik.md5
fi
else
md5sum Plik.pdf > Plik.md5
fi

Tuesday, February 22, 2011

Zamiana tekstu w BASH

Dziś na forum trafiłem na ciekawe pytanie, jak napisać skrypt, który posiada tablice wzorców oraz tablice zamienników tych wzorców i zamieni wszystkie wystąpienia wzorca w tekście. Skrypt trzeba napisać w powłoce Bash, co mnie zainteresowało, ponieważ zazwyczaj unikam programowania w nim.
Postanowiłem zmierzyć się z tym zadaniem i dosyć szybko (dzięki dokumentacji) udało mi się napisać taki skrypt.


array1=( a1 b1 c1 d1 )
array2=( A1 B1 C1 D1 )

text="aaaa  a1 bbbb  cccc c1"
echo ${text}
n=${#array1[@]}

for ((i = 0;i<n;i++))
do
text=$(echo -n "$text" |  sed "s/${array1[$i]}/${array2[$i]}/g")
done
echo -n "$text"

Skrypt wygląda delikatnie mówiąc brzydko, ale działa


grzesiek@home:~$ ./test.sh
aaaa a1 bbbb cccc c1
aaaa  A1 bbbb  cccc C1grzesiek@home:~$

Tak naprawdę całą robotę załatwia tu sed, jak zwykle zresztą :). Istotne jest też to, jak używać tablic w powłoce Bash (uuu tablice w Bash...) i jak tekst ze zmiennej przesłać z powrotem do tej zmiennej, tak aby przechodził prze sed.

Sunday, February 20, 2011

Czy Google Chrome szpieguje swoich użytkowników?

Google Chrome od początku zaskakiwał pozytywnie użytkowników i zdobywała ich uznanie. Nie potrzebował na to tyle czasu, co inne przeglądarki. Jej dynamiczny rozwój jest fundowany przez jedną z największych informatycznych firm jaką jest Google. Być może dlatego Chrome jest oskarżany, czy podejrzewany o szpiegowanie swoich użytkowników.

Wielu internautów twierdzi, że Chrome jest naszpikowany szpiegowskim kodem i jeżeli już, to lepiej używać Chromium. Chromium to pierwotny projekt Chrome zawierający tylko kod open source. Uważa się, że Google dodaje do niego tajne technologie, aby szpiegować użytkowników.

Oczywiście tak nie jest. Zwróć uwagę na to, iż Google obecnie jest najinnowacyjniejszą firmą informatyczną. Niemal co miesiąc wprowadza nowe produkty, które maja ułatwić wyszukiwanie, czy samo używanie sieci. Do tworzenia i rozwijania najlepszych rozwiązań potrzebne są dane statystyczne, na podstawie których podejmuje się decyzje dotyczące kierunku rozwoju. Poza tym, mówi się, że Google zbiera o nas dane itp. a pomija się np. fakt, że zakładając sobie darmowe konto pocztowe, czy jakąś inna usługę (poza Google) trzeba podać takie dane jak data urodzenia i tym podobne. Potwierdzamy zgodę na przetwarzanie w celach handlowych i wszystko przebiega bez afery, podczas gdy Google zbiera dane do analizy rozwiązań jest oskarżane o szpiegostwo.

Co do rozwiązań Google, które utrzymuje w tajemnicy, to nie ma co się dziwić. Przecież jakąś tajemnice muszą mieć, dotyczącą swoich technologii. Warto zwrócić uwagę na to, że wiele z tych technologi trafia do świata open source. Mało która firma tak go wzbogaca jak Google.

W przypadku Google najważniejsze jest to, aby zrozumieć sposób w jaki oni zarabiają. Firma ta słynie z tego, że prowadzi innowacyjny system reklam, który jest najmniej uciążliwy dla użytkownika, a mimo to osiągają duże dochody. Jednym zdaniem udało im się połączyć rozwój wyszukiwania z korzyściami finansowymi. Problem w tym, że sposób ten jest tak sprytny, że nie wszyscy go rozumieją. W przypadku korzystania z samej wyszukiwarki sposób w jaki Google na tym zarabia jest bardzo ukryty, ale z kolei w serwisie youtube.com jest to bardziej widoczne. Google np. sprytnie minimalizuje ilość reklam na rzecz ich trafności, przy takich samych, a nawet większych zyskach. Do tego jednak potrzebne są pewne informacje zbierane podczas wyszukiwania.

Chromium w porównaniu do Google Chrome to projekt zawierający tylko HTML i inne podstawowe technologie, najprościej mówiąc jest to część techniczna niezbędna do przeglądania sieci. Natomiast Chrome jest wyposażony w szereg dodatków sprawiających, że korzystanie z przeglądarki i sieci jest jeszcze prostsze.

Google, jak mało która firma informuje użytkowników jak działają jej usługi. Dobrym przykładem jest ten film.


Więcej informacji można znaleźć w poniższych miejscach:
http://en.wikipedia.org/wiki/Google_Chrome#Usage_tracking
http://blog.chromium.org/2010/06/in-open-for-rlz.html
http://www.google.com/chrome/intl/pl/privacy.html

Sunday, January 30, 2011

KVM i LXC

Tydzień temu testowałem wirtualizację, którą mógłbym wprowadzić na serwerze. Poświęciłem na to dosłownie cały weekend, a robiłem to tak namiętnie, że prawie cały miniony tydzień spędziłem w łóżku!
Przynajmniej nauczyłem się dwóch nowych rzeczy ;) Pierwsza to pełna wirtualizacja sprzętowa na KVM, a druga to wirtualizacja LXC, tak zwana system-level.

Celem wirtualizacji było oddzielenie usług zewnętrznych od wewnętrznych. Czyli np. instalujemy nowy system na wirtualnej maszynie i tam stawiamy usługę WWW. Na macierzystej maszynie tylko przekierowujemy pakiety z portu 80. Wirtualna maszyna nie posiada publicznego adresu, tylko prywatny.

KVM sprawdziło się świetne, bardzo małe zużycie zasobów i możliwość odpalenie takiej maszyny bez trybu graficznego. Niestety VirtualBox w domu nie zastąpi, ponieważ nie wiem czemu ale nawet jak system Windows nic nie robi to jeden rdzeń ciągle jest wykorzystywany na 100% - jakby jakaś pętla w kółko chodziła. Niemniej jednak KVM na serwer byłby świetny, gdyby nie mały szkopuł, na moim serwerze procesor nie wspiera Intel VT, a KVM działa na zasadzie pełnej wirtualizacji oferowanej przez procesor.
Nic tylko czekać na lepszy serwer, a póki co KVM jest świetny w domowych testach jeżeli chodzi o Linuksa.

Tak więc zawiedziony moim prockiem na serwerze musiałem szukać dalej i znalazłem LXC. LXC to też wirtualizacja ale oferowana przez mechanizmy systemowe, rzekłbym nawet, że to nic innego jak odpowiednik BSD Jail na Linux. Też działa świetne, a nawet lepiej. Mniejsze zużycie procesora i nie wymaga procesora z technologią wirtualizacji. Jedyne co może się nie spodobać to to, że taki system w klatce nie jest kompletną kopią normalnego systemu, wielu rzeczy nie trzeba na nim uruchamiać, gdyż są one realizowane przez system gospodarza. Najważniejsze w tym systemie to same programy i ich środowisko, a nie mechanizmy systemowe.
Fajne jest to, że nie tak jak w KVM wszystkie dane znajdują się w jednym pliku jakim jest dysk wirtualnej maszyny tylko w nowej strukturze katalogów, która rozpoczyna się we wskazanym miejscu. Dzięki temu bez problemu możemy w każdej chwili sięgnąć po jakieś dane z wirtualnego systemu, co bardzo ułatwia tworzenie kopii danych.
Co do Debiana, to po raz kolejny okazał on się dobrym wyborem, ponieważ posiada potrzebne narzędzie zwane debootstrap do budowania struktury systemu bazowego. Ułatwia to tworzenie kontenera LXC.
Niedobrą informacją może być to, że w Debian Lenny LXC jeszcze nie ma, trzeba samemu je kompilować. Mi się udało dopiero wersję 6.0 LXC skompilować na tym systemie, ale ponieważ Squeeze tuż tuż to chyba poczekam i nie będę dalej w to się bawił.

KVM:
http://www.weilnetz.de/qemu-doc.html
http://wiki.debian.org/KVM
http://wiki.debian.org/QEMU#GuestsonNATedinternalnetwork
http://wiki.qemu.org/Qemu-doc.html

LXC:
http://www.ibm.com/developerworks/linux/library/l-lxc-containers/#running-lxc-tools
http://blog.foaa.de/2010/05/lxc-on-debian-squeeze/
http://blog.bodhizazen.net/linux/lxc-configure-ubuntu-lucid-containers/
http://wiki.debian.org/LXC

Wednesday, January 19, 2011

Linux dla internautów

Dziś słów kilka o tym, do czego można polecić Linuksa z czysty sumieniem. Sam używam go już dosyć długo, nie znaczy to jednak, że gdy rozmowa schodzi na temat Linuksa to polecam go każdemu. Wręcz przeciwnie, przeważnie milczę. Nie dlatego, że do niczego się on nie nadaje, tylko dlatego, że Linux lepszy jest w czymś innym, niż "on" potrzebuje.
Ponieważ chciałbym wesprzeć popularyzację Linuksa musiał wymyślić jakieś zastosowanie, które spodobałoby się przeciętnemu użytkownikowi komputera. Z mojego doświadczenia wynika, że Linux najlepiej sprawdza się w dwóch przypadkach:
  • serwer
  • programowanie
Jeżeli o mnie chodzi, to przeszedłem na Linuksa z ze względu na drugi punkt, pierwszy pojawił się później. Co do zastosowań domowych to nie jest za wesoło - zależy co się robi na komputerze.

Tak więc myślałem nad tym, w jakim zastosowaniu, a raczej dla kogo Linux może być fajny na komputerze domowym. W końcu wymyśliłem, a może trochę ściągnąłem od Google. Chodzi dokładnie o Chrome OS, czyli system oparty na Linuksie dla ludzi, którzy najczęściej korzystają z komputera aby użyć sieci. To fakt takich jest dużo i tu rzeczywiście można by polecić Linuksa. Oto najważniejsze powody jakie przyszły mi do głowy:
  • brak wirusów
  • dostępne są najpopularniejsze przeglądarki z najważniejszymi wtyczkami
  • możliwość kontroli treści (np. dla dzieci) przez dansguardiana
  • ładny pulpit (efekty 3D)
Do tego należy dodać, że aplikacje Web cały czas rozwijają się, więc dla internauty częściej wystarcza przeglądarka, a coraz mniej potrzebne jest tradycyjne oprogramowanie. Mam nadzieję, że rozwój takich technologii jak HTML5 i WebGL umocni sens wykorzystywania systemu Linux jako komputer internauty.

Mam zamiar napisać przewodnik, który będzie wyjaśniał jak skonfigurować Debiana w roli systemu do przeglądania Internetu.

Tuesday, January 18, 2011

sftp w klatce

Udostępnianie katalogu dla użytkownika stwarza problemy w bezpieczeństwie. Zakładamy mu konto, podpinamy tam WWW i dajemy SSH i SFTP - przynajmniej ja tak robiłem. Aby użytkownik nie chodził mi po katalogach innych (nie miałem takich) i nie zaglądał do konfiguracji bardzo restrykcyjnie ustawiałem prawa do katalogów i plików. Nie da mu się wyłączyć powłoki, bo sftp przestanie działać.

Trzeba to naprawić i użyć klatki, czyli jail!

Cenna dokumentacja: sshd_config

W konfiguracji sshd ustawiamy:

Subsystem sftp internal-sftp


Match User admin
ChrootDirectory /home/jail/%u
Banner /etc/issue_my.net

W /home/jail/ tylko root może zapisywać, tworzymy w nim katalogi dla użytkowników, również tylko root może tam zapisywać - tak jak w katalogu głównym /. Baner może być indywidualny, jak w przykładanie dla dopasowania do użytkownika admin.

Dzięki internal-sftp możemy już zabrać dla użytkownika powłokę i wstawić /usr/sbin/nologin. W ten sposób sprawę z logowaniem przez ssh mamy załatwioną, a indywidualny baner go o tym poinformuje.

Aha, w katalogu użytkownika tworzymy np. katalog www i jego właścicielem robimy dopiero użytkownika, będzie mógł zapisywać w nim.

Dlatego nie używam serwera FTP.

Thursday, January 13, 2011

World IPv6 Day

8 czerwca 2011 roku będziemy mogli przetestować w saki globalnej protokół IPv6. World IPv6 Day to kolejny krok w kierunku zmian, które zbliżają się coraz większymi krokami.

W teście wezmą udział: Google, Facebook oraz Yahoo. Organizacja ISOC zaprasza do testu również inne zainteresowane organizacje.

Jeżeli Twój ISP udostępnia routing dla protokołu IPv6 również będziesz mógł połączyć się np. z Google z użyciem nowego protokołu. Dostępny jest już test, za pomocą którego sprawdzimy, czy z naszej strony nie ma żadnych problemów.

Test będzie trwał 24 godziny.

DOSBox

Ostatnio nauczyłem się dwóch rzeczy, pierwsza to techniczna, a druga zasada obowiązująca w życiu. Zacznę od tej drugiej. Otóż mówi się, że potrzeba jest matką wynalazku. Odkryłem kto jest ojcem wynalazku - to wojna.
W wyniku "wojny" musiałem zrobić coś czego normalnie bym nie zamierzał robić, ale ponieważ byłem do tego zmuszony, to nie miałem wyjścia.

Problem polegał na przeniesieniu programu DOS (księgowego) z Windows XP na Vista. Zdziwiło mnie to, że po raz kolejny rozwiązuje problem z systemem Microsoftu dzięki projektom open source! Rozwiązania dla biznesu zawiodły, musiałem użyć emulatora DOSBox. Czyż to nie kpina? Microsoft nie zajmuje się tak bardzo problemem starszych programów DOS-owych powszechnych w księgowości jak programiści udostępniający swój kod na licencji GNU GPL.

Ostatnio pisałem o tym, czym jest Linux. Widocznie należałoby jeszcze wspomnieć o tym, że GNU to nie tylko darmowe narzędzia dla otwartego systemu, ale również dla Microsoft Windows.

Powiem więcej, zauważyliście na jakim poziomie jest notatnik w Windows? problem ten rozwiązuje projekt GNU GPL zwany Notepad++.

Saturday, January 8, 2011

Jak powstał Linux?

No własnie, jak on powstał? Często ładnie się pisze w stylu:
Jeżeli kilku ostatnich lat nie spędziłeś w jaskini, to na pewno słyszałeś już o Linuksie.
lub
Jeżeli kilka ostatnich lat spędziłeś na planecie Ziemia, to na pewno słyszałeś już o Linuksie.
co rzeczywiście jest prawdą, ale czy naprawdę ludzie rozumieją tą całą zagmatwaną sytuację? Co wiąże Linuksa z jakimś Uniksem?  Czym różni się Free Software Foundation od Open Source i jak one są powiązane z Linuksem?
Od dawna poruszałem ten problem i wiem, że świadomość użytkowników, zwłaszcza tych pseudo (kilkudniowych) jest mała. Opisywałem to już wcześniej na stronie http://c-plus-plus.w.interia.pl/debian/ [ zakładki Linux->UNIX ]. Opisało to też wiele innych osób, więc w czym problem?
Problem uświadomiła mi pewna osoba, z którą obecnie pracuję nad nowym portalem. Jest on prozaiczny i standardowy, ludzie nie chcą zagłębiać się w te wszystkie szczegóły. Wiele osób uważa, że użytkownik systemu wcale nie musi być informatykiem (słusznie) i wiedzieć jaka jest historia jego systemu. Czy to prawda? Prawda, ale!
Jeżeli ktoś używa Microsoft Windows, to rzeczywiście nie musi wiedzieć jak powstał. Skoro tak uważam, to dlaczego w przypadku Linuksa uważam inaczej? Bo za Windows zapłacił, a Linuksa dostajesz za darmo. Nie wiem jak Wy, ale jak ja dostaję coś za darmo to pierwsza myśl jak mi przychodzi do głowy to "dlaczego"? Dlaczego ktoś rozdaje system, za który normalnie trzeba byłoby zapłacić? Nadal uważasz, że nie jest to takie istotne?
Pytań jest wiele, ale wszystkie sprowadzają się jednego, do przeszłości, tam znajdziemy odpowiedzi na wszystkie pytania. Problem polega na tym, że ludzie nie uważają historii za ciekawą i dlatego stronią od niej. Historia jest bardzo ważna, pozwolę sobie przypomnieć żelazną regułę:
aby zrozumieć teraźniejszość należy poznać przeszłość
Tak więc z jednej strony świadomy jak ważna jest historia Linuksa, a z drugiej niechęci do czytania o historii rozmyślałem nad innymi sposobami, którymi mógłbym dotrzeć do wielu ludzi. W końcu mnie olśniło, zresztą Google też tak robi, tyle tylko, że oni robią coś na kształt kreskówek. Napiszę bajkę o tym skąd wywodzi się Linux.
Dawno, dawno temu, gdy komputery były wykorzystywane tylko w laboratoriach, naukowcy stworzyli system operacyjny, który pozwalał na korzystanie z jednego komputera przez wiele osób. Z czasem, gdy komputery trafiały do innych instytucji i zaczęły być wykorzystywane do celów przemysłowych stworzony system stał się produktem, który można było sprzedawać. Ponieważ nad jego rozwojem pracowało kilka innych instytucji, w momencie, gdy doszło do sprzedaży wybuchła wojna o to, kto jest prawowitym właścicielem systemu. Był to problem, z którym do tej pory jeszcze się nie spotkano. Wówczas wiele osób uświadomiło sobie jakie zagrożenia niesie za sobą komercja dla rozwoju oprogramowania komputerowego. Jeden z naukowców postanowił zapobiec podobnym sytuacjom w przyszłości i stworzył nową ideę wolnego oprogramowania, zwaną GNU. Jej celem było stworzenie nowego systemu, który byłby całkowicie wolny i dostępny dla wszystkich. Naukowiec stworzył podstawowe narzędzia do pisania oprogramowania i udostępnił je bezpłatnie innym, w zamian za to wszystkie stworzone przy ich pomocy programy również musiały być dostępne dla innych. W ramach projektu ochotnicy z całego świata stworzyli prawie wszystkie składniki niezbędne do złożenia kompletnego systemu operacyjnego. Jednak nadal brakowało jednego elementu, bez którego system nie był jeszcze gotowy. W końcu po siedmiu latach, projekt, doczekał się brakującego elementu, którym było jądro systemu. Stworzył go student informatyki z Finlandii przy pomocy narzędzi udostępnionych przez projekt GNU i nazwał go Linux. Od tej pory projekt GNU posiadał wszystkie niezbędne składniki do złożenia kompletnego systemu operacyjnego na wzór pierwotnego systemu stworzonego przed laty w laboratoriach. Ponieważ wszystkie składniki były ogólnie dostępne powstawały liczne wariacje systemów składające się z tych samych części, jądra Linux i narzędzi z projektu GNU. Wersje te zwane są dystrybucjami, a jedną z pierwszych był Debian GNU/Linux. Pojawienie się brakującego elementu bardzo przyśpieszyło rozwój nad projektem otwartego systemu. GNU/Linux jest cały czas udoskonalany, powstały środowiska graficzne na wzór innych systemów komercyjnych i wiele programów realizujących różne zadania. Obecnie GNU/Linux jest najpopularniejszą odmianą pierwotnego systemu stworzonego przez naukowców w laboratoriach.

Wystąpili
System operacyjny stworzony w laboratoriach przez naukowców - UNIX™ 
Wojna o prawa do systemu - Unix wars
Naukowiec, który stworzył projekt GNU - Richard Stallman
Twórca brakującego elementu, jądra - Linus Torvalds
Kompletny system - GNU/Linux

Przedstawiona historia przedstawia wszystkie najważniejsze fakty z przeszłości i przede wszystkim wyjaśnia dlaczego powstał Linux, dlaczego ma otwarty kod i co ma wspólnego z Uniksem i jaka jest różnica między Linuksem a GNU. Tyle wystarczy, choć jeszcze wieleee pozostało do wyjaśnienia, ale to już dla chętnych. Mam nadzieję, że tekst zostanie opublikowany.

Sunday, January 2, 2011

Python 3.1

Ostatnio pisałem o problemie dzielenia w Pythonie, podczas gdy wynik ma być mniejszy od 1 wynikiem jest 0. Pisałem też, że problem ten nie występuje w nowszej wersji Pythona 3.1. Wtedy mnie to dosyć zniechęciło do Pythona ale gdzieś podświadomie wiedziałem, że jest to język na tyle dobry, iż ma jakieś rozwiązanie tego problemu. Ostatnio wpadała mi w ręce książka "Python 3. Kompletne wprowadzenie do programowania. Wydanie II" i to nie przypadkiem ;).

Mimo, iż Pythona używałem już wcześniej to nigdy nie czytałem żadnej książki o nim (w wersji papierowej). Spodziewałem się, że taka książka może dużo wyjaśnić i pokazać Pythona w nowym świetle. Chodzi głownie o wyjaśnienie filozofii tego języka. Takie mam własnie odczucie ją czytając.

Jeszcze jest za wcześniej, aby oceniać tą książkę ale już mogę przedstawić kilka ciekawostek, które wyczytałem.

Po pierwsze to środowisko IDLE. W Windows jest domyślnie dodawane do instalacji Pythona. W Linuksie można również je zainstalować jako dodatkową paczkę. Tak samo sytuacja wygląda z samym interpreterem Pythona w wersji 3.x. W Windows dostaniemy najnowszą wersję, na moim systemie jakim jest wersja stabilna Debiana domyślnie jest Python w wersji starszej 2.x z pewnych powodów - systemowych. Nie oznacza to jednak, że nie można jednocześnie posiadać wersji nowszej, owszem, można, tylko również trzeba dodatkowo to zainstalować i jest.


Tak samo sprawa wygląda z środowiskiem IDLE, które jest napisane w GUI Tkinter. To standardowa biblioteka Pythona do pisania programów z GUI, bazuje ona na Tk. Jej zaletą jest "lekkość". Za IDLE przemawia również wbudowany debugger, więc czemu nie.



Kolejną rzeczą jest rozmiar liczb. Nie wiem jak we wcześniejszych wersjach Pythona ale w 3.x zmienne są ograniczone tylko przez dostępną pamięć w komputerze. Ciekawe.

Co do samych wersji to faworyzowana jest wersja 3.1 lub późniejsze bo zawiera pewne poprawki wersji 3.0.

Pisałem o instalacji dodatkowo Pythona 3, w wyniku czego mamy kilka interpreterów - jak widać na pierwszym zdjęciu. Chodzi o to, że zapis w skrypcie:

#!/usr/bin/env python

oznacz, że interpreter może być zainstalowany w innej ścieżce niż wymieniona albo używa pierwszy napotkany w tym katalogu - pierwszym będzie zapewne ten o najniższym numerze. Możemy to przetestować.


grzesiek@home:~/Desktop$ cat test.py 
#!/usr/bin/env python
import sys


print(sys.version)

grzesiek@home:~/Desktop$ ./test.py 
2.6.6 (r266:84292, Oct  9 2010, 12:24:52) 
[GCC 4.4.5]

Dlatego preferuje samemu wywoływać interpreter ale nie w kodzie np.:

grzesiek@home:~/Desktop$ cat test.py 
#!/usr/bin/python3.1
import sys

print(sys.version)
 
grzesiek@home:~/Desktop$ ./test.py 
3.1.3 (r313:86834, Nov 28 2010, 10:01:07) 
[GCC 4.4.5]

tylko tak:

grzesiek@home:~/Desktop$ python3.1 test.py 
3.1.3 (r313:86834, Nov 28 2010, 10:01:07) 
[GCC 4.4.5]


Kwestia upodobań.

Teraz kilka ciekawych przykładów.

>>> "test"[2]
's'
>>> _
's'
>>> "test"[0]
't'

"_" to ostatnie wykonanie wyrażenie.

>>> int(" xxx3")
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    int(" xxx3")
ValueError: invalid literal for int() with base 10: ' xxx3'
>>> int(" 3 ")
3

Obiekt przestaje istnieć, jeżeli zostało usunięte ostatnie odniesienie do niego. Tym właśnie są wszystkie zmienne. Zmienne są niezmienne - prawda, że śmieszne. Krotki i napisy również.

Wyliczanie elementów krotki i napisu:

>>> "aa","bb","cc"
('aa', 'bb', 'cc')
>>> len(("aa",))
1
>>> len("aa")
2

Listy można zmieniać:

>>> x = ["a","b","c"]
>>> x
['a', 'b', 'c']
>>> x.append("x")
>>> x
['a', 'b', 'c', 'x']
>>> list.append(x,999)
>>> x
['a', 'b', 'c', 'x', 999]
>>> x[0]
'a'
>>> x[0] = 0
>>> x
[0, 'b', 'c', 'x', 999]
>>>


Tożsamość:

>>> a = 5
>>> b = 5
>>> a is b
True
>>> a2 = "test"
>>> b2 = "test"
>>> a2 is b2
True
>>> a3 = [1,2,3]
>>> b3 = [1,2,3]
>>> a3 is b3
False
>>> a3 = b3
>>> a3 is b3
True
>>> a4 = (1,2,3)
>>> b4 = (1,2,3)
>>> a4 is b4
False
>>> a = 4
>>> a is b
False

Porównanie:

>>> a2 == b2
True
>>> a4 == b4
True

Ładnie wygląda:

>>> a =3
>>> 0 < a < 10
True

Operator przynależności:

>>> a3
[1, 2, 3]
>>> 2 in a3
True
>>> 10 not in a3
True
>>> a2
'test'
>>> "t" in a2
True

Operatory arytmetyczne nie tylko dla liczb:

>>> nazwa = "cos"
>>> nazwa += " tam"
>>> nazwa
'cos tam'

>>> x
[0, 'b', 'c', 'x', 999]
>>> x += nazwa
>>> x
[0, 'b', 'c', 'x', 999, 'c', 'o', 's', ' ', 't', 'a', 'm']
>>> x += "999"
>>> x
[0, 'b', 'c', 'x', 999, 'c', 'o', 's', ' ', 't', 'a', 'm', '9', '9', '9']

Elementy wbudowane:

>>> dir()
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'a2', 'a3', 'a4', 'b', 'b2', 'b3', 'b4', 'main', 'nazwa', 'os', 'x']
>>> dir("__builtins__")
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> dir('b')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']


Liczby:

>>> 0b1010101
85
>>> 0xEEEEE
978670
>>> bin(1234)
'0b10011010010'
>>> hex(1234)
'0x4d2'
>>> oct(1234)
'0o2322'
>>> import math
>>> math.pi
3.141592653589793
>>> 1,3.14
(1, 3.14)


Nie będę tu opisywał dokładnie tych przykładów ale i tak są przydatne - przynajmniej dla mnie.