Linuks z dnia na dzień wydaje mi się coraz fajniejszy ;-). Dzisiaj zainstalowałem sobie program QCad... myslałem, że to kolejny Open Source ktory się do niczego nie nadaje i straszliwie się zawiodłem. Program jest bardzo fajny - jak dla mnie bardziej intuicyjny niż produkt firmy Autodesk a drukowanie... Bajka. Naprawdę jestem pod wrażeniem, że ktoś zrobił coś tak poządnego i udostępnił to za darmo. Do tego OGROMNA biblioteka symboli dostępna za darmo na stronie producenta... czego chcieć więcej ;-).
Jeszcze jedno - aby zainstalować te symbole - ściągamy je sobie, następnie rozpakowujemy, w katalogu
/usr/share/qcad
tworzymy folder library a następnie do niego przenosimy te biblioteki symboli, które nas interesują.
niedziela, 2 marca 2008
sobota, 1 marca 2008
boost::regex, asio i... Debian
No nareszcie... udało mi się w końcu skompilować przykładowy program wykorzystujący tę bibliotekę. Żebym nie zapomniał zapiszę to sobie tutaj:
#include <boost/regex.hpp> //tak się włącza nagłówek
g++ p1.cc -o p1 /usr/lib/libboost_regex-gcc-mt-1_33_1.a
albo:
g++ p1.cc -o p1 -L/usr/lib/ -lboost_regex-gcc-mt-1_33_1
tak można kompilować. Nie wiem czemu wcześniej tak nie zrobiłem ;-).
Jak już mi się to udało to zainstalowałem sobie przy okazji bibliotekę asio - do obsługi sieci. Na etch-u miałem z tym mały problem. Asio znalazłem jako pakiet źródłowy w lennym i ściągnąłem na dysk.
Wlazłem do katalogu do którego paczki ściągnąłem, następnie poprosiłem system żeby zrobił:
dpkg-source -x asio_0.3.8~rc3-2.dsc
I utworzył się katalog w tym folderze katalog asio-0.3.8~rc3. Wszedem do tego katalogu i wydałem komendę:
dpkg-buildpackage -rfakeroot -uc -b
Zostałem poinformowany o brakujących zależnościach - wszystko udało się doinstalować apt-em, następnie znów poprosiłem Debiana żeby zrobił:
dpkg-buildpackage -rfakeroot -uc -b
Tym razem bez problemów wszystko się skompilowało (chwilkę to trwało...) i stałem się posiadaczem zajebiaszczej, świezutkiej paczki .deb ;-). Pojawiła się ona katalog wyżej - czyli tam, gdzie ściągnąłem pakiet źródłowy a nazywała się:
libasio-dev_0.3.8~rc3-2_all.deb
Pojawiła się też druga paczka - nie wiem skąd jak i dlaczego ale się pojawiła.
libasio-doc_0.3.8~rc3-2_all.deb
Obie zainstalowałem:
dpkg -i libasio-dev_0.3.8~rc3-2_all.deb
dpkg -i libasio-doc_0.3.8~rc3-2_all.deb
Teraz przykadowy program - kod z tutoriala, biblioteki asio, nie wiem czy wolno mi go tutaj wpisać ale co tam, piszę skąd poniższy kod wziąłem, zatem:
#include <iostream>
#include <asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
asio::io_service io;
asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!\n";
return 0;
}
a kompilacja - bo z tym znowu miałem problem... a wystarczyło czytać co kompilator do mnie mówi ;-)
g++ p2.cc -o p2 -L/usr/lib -lboost_date_time-gcc-1_33_1 -pthread
Wiadomo - date_time z boosta i pthread się linkuje. pthread w celu obsługi wątków - asio korzysta z tego gdzieś tam głęboko w swoich klasach. Można zrobć żeby korzystało z wątków boosta i chyba jeszcze z regexa boostowego ale ja już się w to na pewno nie będę bawił ogólnie to z tym boostem na debianie jest trochę dziwnie chociaż pewnie i tak jest w tym jakiś głębszy sens którego ja jeszcze nie rozumiem.
Wszystkie "ficzery" Debiana które na początku wydawały mi się irytujące zawsze okazywały sie jednak przemyślanymi rozwiązaniami więc pewnie i z tym jest tak samo.
#include <boost/regex.hpp> //tak się włącza nagłówek
g++ p1.cc -o p1 /usr/lib/libboost_regex-gcc-mt-1_33_1.a
albo:
g++ p1.cc -o p1 -L/usr/lib/ -lboost_regex-gcc-mt-1_33_1
tak można kompilować. Nie wiem czemu wcześniej tak nie zrobiłem ;-).
Jak już mi się to udało to zainstalowałem sobie przy okazji bibliotekę asio - do obsługi sieci. Na etch-u miałem z tym mały problem. Asio znalazłem jako pakiet źródłowy w lennym i ściągnąłem na dysk.
Wlazłem do katalogu do którego paczki ściągnąłem, następnie poprosiłem system żeby zrobił:
dpkg-source -x asio_0.3.8~rc3-2.dsc
I utworzył się katalog w tym folderze katalog asio-0.3.8~rc3. Wszedem do tego katalogu i wydałem komendę:
dpkg-buildpackage -rfakeroot -uc -b
Zostałem poinformowany o brakujących zależnościach - wszystko udało się doinstalować apt-em, następnie znów poprosiłem Debiana żeby zrobił:
dpkg-buildpackage -rfakeroot -uc -b
Tym razem bez problemów wszystko się skompilowało (chwilkę to trwało...) i stałem się posiadaczem zajebiaszczej, świezutkiej paczki .deb ;-). Pojawiła się ona katalog wyżej - czyli tam, gdzie ściągnąłem pakiet źródłowy a nazywała się:
libasio-dev_0.3.8~rc3-2_all.deb
Pojawiła się też druga paczka - nie wiem skąd jak i dlaczego ale się pojawiła.
libasio-doc_0.3.8~rc3-2_all.deb
Obie zainstalowałem:
dpkg -i libasio-dev_0.3.8~rc3-2_all.deb
dpkg -i libasio-doc_0.3.8~rc3-2_all.deb
Teraz przykadowy program - kod z tutoriala, biblioteki asio, nie wiem czy wolno mi go tutaj wpisać ale co tam, piszę skąd poniższy kod wziąłem, zatem:
#include <iostream>
#include <asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
asio::io_service io;
asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!\n";
return 0;
}
a kompilacja - bo z tym znowu miałem problem... a wystarczyło czytać co kompilator do mnie mówi ;-)
g++ p2.cc -o p2 -L/usr/lib -lboost_date_time-gcc-1_33_1 -pthread
Wiadomo - date_time z boosta i pthread się linkuje. pthread w celu obsługi wątków - asio korzysta z tego gdzieś tam głęboko w swoich klasach. Można zrobć żeby korzystało z wątków boosta i chyba jeszcze z regexa boostowego ale ja już się w to na pewno nie będę bawił ogólnie to z tym boostem na debianie jest trochę dziwnie chociaż pewnie i tak jest w tym jakiś głębszy sens którego ja jeszcze nie rozumiem.
Wszystkie "ficzery" Debiana które na początku wydawały mi się irytujące zawsze okazywały sie jednak przemyślanymi rozwiązaniami więc pewnie i z tym jest tak samo.
poniedziałek, 18 lutego 2008
C++
Warto czasem poczytać mądrą książkę a nie tylko ten internet ciągle. C++ to fajny język. Wszystko w nim można tak przepięknie zagmatwać. Dzisiaj na forum poprawiłem jakiemuś chłopakowi program do liczenia średniej ocen klasy. Pętla for, jakieś tablice... zacząłem się zastanawiać jak by to można było bardziej C++'owo zrobić...
#include <vector>
#include <iostream>
using namespace std;
class UCZEN
{
public:
string imie;
string nazwisko;
float srednia;
UCZEN(){};
};
class KLASA
{
public:
static int uczniow;
static float suma_srednich;
vector<UCZEN> uczniowie;
UCZEN u_tmp;
KLASA(bool b_);
KLASA() {};
UCZEN &operator()();
float srednia() {return suma_srednich/uczniow;};
};
KLASA::KLASA(bool b_)
{
int ilu_uczniow;
cout << "Wprowadz liczbe uczniow: ";
cin >> ilu_uczniow;
generate_n(back_inserter(uczniowie),ilu_uczniow,KLASA());
}
UCZEN &KLASA::operator()()
{
cout << "Podaj imie ucznia: ";
cin >> u_tmp.imie;
cout << "Podaj nazwisko ucznia: ";
cin >> u_tmp.nazwisko;
cout << "Podaj srednią ucznia: ";
cin >> u_tmp.srednia;
uczniow++;
suma_srednich+=u_tmp.srednia;
return u_tmp;
}
int KLASA::uczniow=0;
float KLASA::suma_srednich=0;
int main()
{
KLASA kl(true);
cout << "Srednia klasy wynosi: "<<kl.srednia()<<endl;
return 0;
}
Maszkaron, paskuda, szkarada, okropieństwo, wymoczek... tak bym ten kod podsumował ;-).
#include <vector>
#include <iostream>
using namespace std;
class UCZEN
{
public:
string imie;
string nazwisko;
float srednia;
UCZEN(){};
};
class KLASA
{
public:
static int uczniow;
static float suma_srednich;
vector<UCZEN> uczniowie;
UCZEN u_tmp;
KLASA(bool b_);
KLASA() {};
UCZEN &operator()();
float srednia() {return suma_srednich/uczniow;};
};
KLASA::KLASA(bool b_)
{
int ilu_uczniow;
cout << "Wprowadz liczbe uczniow: ";
cin >> ilu_uczniow;
generate_n(back_inserter(uczniowie),ilu_uczniow,KLASA());
}
UCZEN &KLASA::operator()()
{
cout << "Podaj imie ucznia: ";
cin >> u_tmp.imie;
cout << "Podaj nazwisko ucznia: ";
cin >> u_tmp.nazwisko;
cout << "Podaj srednią ucznia: ";
cin >> u_tmp.srednia;
uczniow++;
suma_srednich+=u_tmp.srednia;
return u_tmp;
}
int KLASA::uczniow=0;
float KLASA::suma_srednich=0;
int main()
{
KLASA kl(true);
cout << "Srednia klasy wynosi: "<<kl.srednia()<<endl;
return 0;
}
Maszkaron, paskuda, szkarada, okropieństwo, wymoczek... tak bym ten kod podsumował ;-).
sobota, 16 lutego 2008
Po sesji
No to już po sesji, nie było tak źle - tylko dwie banie ;-). Tak żeby nie było że nic nie robię - na sesji zacząłem pisać sapera - skończę pewnie jeszcze dzisiaj. Potem będę sobie musiał wymyślić coś fajnego, bo pisanie głupot przestaje mi się powoli podobać. Pozatym to napisałem wczoraj pierwszego w swoim krótkim życiu posta na forum i nikt na mnie jeszcze nie nakrzyczał.
piątek, 8 lutego 2008
Privateer Gemini Gold
Ludzie narzekają na brak gierek na linuksie a tymczasem na żadnym serwisie o grach dla systemu linuks nawet najmniejszej wzmianki o tej grze nie znalazłem. Jest świetna - klimatyczna, wciągająca i wogóle (przynjamniej jak dla mnie). Latamy sobie po kosmosie małym stateczkiem, możemy grać jako "wolny strzelec" - latać sobie, robić misje, uleszać statek, strzelać, handlować itp, jadnak prócz tego gra ma również scenariusz, w którym możemy uczestniczyć. Mamy też różne frakcje - strzelając do jednych - inni stają sienaszymi sojusznikami. Wogóle gierka genialna. Jeśli ktoś pamięta privateera z czasów amigi - MUSI w to zagrać. Grafika trochę niedzisiejsza ale gra nadrabia klimatem i grywalnością. Szczerze wszystkim polecam. Strona , z której można porać grę:
http://priv.solsector.net/files.htm
Miłej zabawy.
Ps.: Przed rozpoczęciem radzę zajrzeć do manuala - sterowanie statkiem kosmicznym to jednak wyzwanie ;-).
http://priv.solsector.net/files.htm
Miłej zabawy.
Ps.: Przed rozpoczęciem radzę zajrzeć do manuala - sterowanie statkiem kosmicznym to jednak wyzwanie ;-).
czwartek, 7 lutego 2008
Najnowsze wine w Debianie Etch
Potrzebna mi była najnowsza wersja wine. W repozytoriach Debiana Etch obecnie jest wersja 0.9.25 a ja potrzebowałem conajmniej 0.9.5... Na oficjalnej stronie Wine jest paczka, która u mnie nie sprawiała żadnych problemów. Sposób instalacji paczki znajduje się tu:
http://www.winehq.org/site/download-deb
trzeba dodać repozytorium i dodać je do listy zaufanych:
sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/etch.list -O /etc/apt/sources.list.d/winehq.list
wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
Następnie oczywiście
aptitude update
aptitude install wine
i możemy sobie instalować programy windowsowe. Nie musimy ich instalować z konta roota. Jeśli nic nie grzebaliśmy w konfiguracji instalowane programy znajdziemy gdzieś w podkatalogach katalogu:
$HOME/.wine/drive_c/
http://www.winehq.org/site/download-deb
trzeba dodać repozytorium i dodać je do listy zaufanych:
sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/etch.list -O /etc/apt/sources.list.d/winehq.list
wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
Następnie oczywiście
aptitude update
aptitude install wine
i możemy sobie instalować programy windowsowe. Nie musimy ich instalować z konta roota. Jeśli nic nie grzebaliśmy w konfiguracji instalowane programy znajdziemy gdzieś w podkatalogach katalogu:
$HOME/.wine/drive_c/
środa, 6 lutego 2008
Fajna piosnka ;-)
Jak w tytule - Sum 41 - Pieces. Niestety nie trafiłem na żadną inną fajną piosenkę tego zespołu ;-).
wtorek, 5 lutego 2008
URL encoded string...
Zaczęło się od niewinnego spojrzenia na to, co przesyłane jest do googli w pasku adresu gdy w polu zapytania wpiszemy coś, co zawiera spacje i polskie znaki... Adresy URL muszą być kodowane w czymś, co jest opisane w RCF 2396. Szybko przejrzałem dokumentację libcurl. Jest tam funkcja curl_easy_escape, która zmieni zwykły ciąg znaków w odpowiendio zakodowany, możliwy do przesłania w adresie URL. Coby lepiej zapamiętać na szybko sobie coś napisałem ;-):
#include <curl/curl.h>
char *kompletny_url(char *zapytanie_url)
{
char poczatek[]={"www.google.pl/search?hl=pl&q="};
char koniec[]={"&btnG=Szukaj+w+Google&lr="};
char *url;
int dlugosc[3],i;
for(dlugosc[0]=0;poczatek[dlugosc[0]];dlugosc[0]++) {};
for(dlugosc[1]=0;zapytanie_url[dlugosc[1]];dlugosc[1]++) {};
for(dlugosc[2]=0;koniec[dlugosc[2]];dlugosc[2]++) {};
url=malloc(dlugosc[0]+dlugosc[1]+dlugosc[2]+1);
if (!url) return NULL;
for(i=0;i<dlugosc[0];i++) url[i]=poczatek[i];
for(i=0;i<dlugosc[1];i++) url[i+dlugosc[0]]=zapytanie_url[i];
for(i=0;i<dlugosc[2];i++) url[i+dlugosc[0]+dlugosc[1]]=koniec[i];
return url;
}
int main(void)
{
CURL *easyint;
CURLcode error;
char zapytanie_normalne[]={"nylonową żyłką"};
char *zapytanie_url,*zapytanie_kompletne;
zapytanie_url=NULL;
zapytanie_kompletne=NULL;
easyint = curl_easy_init();
if(easyint)
{
zapytanie_url=curl_easy_escape(easyint,zapytanie_normalne,0);
if (zapytanie_url) zapytanie_kompletne=kompletny_url(zapytanie_url);
if (zapytanie_kompletne)
{
curl_easy_setopt(easyint, CURLOPT_URL, zapytanie_kompletne);
error = curl_easy_perform(easyint);
}
curl_easy_cleanup(easyint);
}
return 0;
}
Tak swoją drogą to coraz bardziej utwierdzam się w przekonaniu, że nie studiując informatyki trudno się nauczyć pisać "przejrzysty i czytelny" kod...
#include <curl/curl.h>
char *kompletny_url(char *zapytanie_url)
{
char poczatek[]={"www.google.pl/search?hl=pl&q="};
char koniec[]={"&btnG=Szukaj+w+Google&lr="};
char *url;
int dlugosc[3],i;
for(dlugosc[0]=0;poczatek[dlugosc[0]];dlugosc[0]++) {};
for(dlugosc[1]=0;zapytanie_url[dlugosc[1]];dlugosc[1]++) {};
for(dlugosc[2]=0;koniec[dlugosc[2]];dlugosc[2]++) {};
url=malloc(dlugosc[0]+dlugosc[1]+dlugosc[2]+1);
if (!url) return NULL;
for(i=0;i<dlugosc[0];i++) url[i]=poczatek[i];
for(i=0;i<dlugosc[1];i++) url[i+dlugosc[0]]=zapytanie_url[i];
for(i=0;i<dlugosc[2];i++) url[i+dlugosc[0]+dlugosc[1]]=koniec[i];
return url;
}
int main(void)
{
CURL *easyint;
CURLcode error;
char zapytanie_normalne[]={"nylonową żyłką"};
char *zapytanie_url,*zapytanie_kompletne;
zapytanie_url=NULL;
zapytanie_kompletne=NULL;
easyint = curl_easy_init();
if(easyint)
{
zapytanie_url=curl_easy_escape(easyint,zapytanie_normalne,0);
if (zapytanie_url) zapytanie_kompletne=kompletny_url(zapytanie_url);
if (zapytanie_kompletne)
{
curl_easy_setopt(easyint, CURLOPT_URL, zapytanie_kompletne);
error = curl_easy_perform(easyint);
}
curl_easy_cleanup(easyint);
}
return 0;
}
Tak swoją drogą to coraz bardziej utwierdzam się w przekonaniu, że nie studiując informatyki trudno się nauczyć pisać "przejrzysty i czytelny" kod...
poniedziałek, 4 lutego 2008
Zabawy z libcurl
Sesja to czas relaksu i obijania się, zatem w zacząłem się bawić z biblioteką libcurl. Wczoraj zatrzymałem się na tym, że pobierane dane są nam dostarczane w porcjach i bardzo łatwo zrzucić je do pliku. Od razu pomyślałem "A co jeśli ja chcę wrzucić je wszystkie do jednego bufora w pamięci?". Oczywiście da się i oczywiście na dzień przed egzaminem z angielskiego nie mogłem nie poświęcić kilku chwil żeby takie coś napisać ;-). Oto efekt:
#include <stdio.h>
#include <curl/curl.h>
typedef struct
{
char *big_buf;
long big_buf_size;
} BUFOR_INFO;
size_t wrt_data( void *ptr, size_t size, size_t nmemb, void *buf)
{
size_t buf_size=size*nmemb;
BUFOR_INFO *bi;
bi=(BUFOR_INFO *) buf;
char *new_buf;
new_buf=malloc(bi->big_buf_size + buf_size);
if (!new_buf) return 0;
int i;
for (i=0;i<(bi->big_buf_size-1);i++)
new_buf[i]=bi->big_buf[i];
for(i=(bi->big_buf_size-1);i<(bi->big_buf_size + buf_size - 1);i++)
new_buf[i]=((char *)ptr)[i-bi->big_buf_size+1];
new_buf[i]=(char)NULL;
free(bi->big_buf);
bi->big_buf=new_buf;
bi->big_buf_size+=buf_size;
return buf_size;
}
int main(void)
{
CURL *easyint;
CURLcode error;
BUFOR_INFO bufor;
bufor.big_buf_size=1;
easyint = curl_easy_init();
if(easyint)
{
curl_easy_setopt(easyint, CURLOPT_URL, "http://www.google.pl");
curl_easy_setopt(easyint, CURLOPT_WRITEFUNCTION, wrt_data);
curl_easy_setopt(easyint, CURLOPT_WRITEDATA, &bufor);
error = curl_easy_perform(easyint);
if(!error) printf("%s \n",bufor.big_buf);
else printf("Wystpił błąd!\n");
curl_easy_cleanup(easyint);
}
return 0;
}
A kompilować można tak:
gcc curl.c `pkg-config --cflags --libs libcurl`
Ogólnie to mi się ten kod nie podoba ale działa i to się liczy ;-).
Ps.: Po wklejeniu kodu na bloga wszystkie wcięcia poznikały... szkoda, z wcięciami było trochę ładniej ;-).
#include <stdio.h>
#include <curl/curl.h>
typedef struct
{
char *big_buf;
long big_buf_size;
} BUFOR_INFO;
size_t wrt_data( void *ptr, size_t size, size_t nmemb, void *buf)
{
size_t buf_size=size*nmemb;
BUFOR_INFO *bi;
bi=(BUFOR_INFO *) buf;
char *new_buf;
new_buf=malloc(bi->big_buf_size + buf_size);
if (!new_buf) return 0;
int i;
for (i=0;i<(bi->big_buf_size-1);i++)
new_buf[i]=bi->big_buf[i];
for(i=(bi->big_buf_size-1);i<(bi->big_buf_size + buf_size - 1);i++)
new_buf[i]=((char *)ptr)[i-bi->big_buf_size+1];
new_buf[i]=(char)NULL;
free(bi->big_buf);
bi->big_buf=new_buf;
bi->big_buf_size+=buf_size;
return buf_size;
}
int main(void)
{
CURL *easyint;
CURLcode error;
BUFOR_INFO bufor;
bufor.big_buf_size=1;
easyint = curl_easy_init();
if(easyint)
{
curl_easy_setopt(easyint, CURLOPT_URL, "http://www.google.pl");
curl_easy_setopt(easyint, CURLOPT_WRITEFUNCTION, wrt_data);
curl_easy_setopt(easyint, CURLOPT_WRITEDATA, &bufor);
error = curl_easy_perform(easyint);
if(!error) printf("%s \n",bufor.big_buf);
else printf("Wystpił błąd!\n");
curl_easy_cleanup(easyint);
}
return 0;
}
A kompilować można tak:
gcc curl.c `pkg-config --cflags --libs libcurl`
Ogólnie to mi się ten kod nie podoba ale działa i to się liczy ;-).
Ps.: Po wklejeniu kodu na bloga wszystkie wcięcia poznikały... szkoda, z wcięciami było trochę ładniej ;-).
sobota, 2 lutego 2008
Przenoszenie /usr na nową partycję
Jako że zaczęło mi brakować miejsca na partycji z linuksem postanowiłem przenieść katalog /usr na nową partycję. Podobno nie powinno się tego robić zwykłym poleceniem cp. Można wykorzystać np. polecenie rsync.
Zatem gdy już miałem gotową partycję (partycja na którą przeniosłem /usr to /dev/hda8), zrobiłem tak:
aptitude install rsync
mkdir /mnt/newusr
mount /dev/hda8 /mnt/newusr
rsync -aH /usr/ /mnt/newusr
Wykonanie ostatniego polecenia chwilkę potrwało. Następnie test czy wszystko działa:
mv /usr /usr_backup
umount /dev/hda8
mkdir /usr
mount /dev/hda8 /usr
Teraz tylko zmiana w /etc/fstab i restart. Dodałem taką linijkę:
/dev/hda8 /usr ext3 defaults 0 0
Po restarcie wszystko działało jak trzeba więc niezbyt pewny czy dobrze robię wywaliłem /usr_backup:
rm -rf /usr_backup
I żeby sprawdzić czy system się uruchomi, znów zrestartowałem komputer.
Wszystko działa... i problemy z brakiem miejsca zniknęły.
Zatem gdy już miałem gotową partycję (partycja na którą przeniosłem /usr to /dev/hda8), zrobiłem tak:
aptitude install rsync
mkdir /mnt/newusr
mount /dev/hda8 /mnt/newusr
rsync -aH /usr/ /mnt/newusr
Wykonanie ostatniego polecenia chwilkę potrwało. Następnie test czy wszystko działa:
mv /usr /usr_backup
umount /dev/hda8
mkdir /usr
mount /dev/hda8 /usr
Teraz tylko zmiana w /etc/fstab i restart. Dodałem taką linijkę:
/dev/hda8 /usr ext3 defaults 0 0
Po restarcie wszystko działało jak trzeba więc niezbyt pewny czy dobrze robię wywaliłem /usr_backup:
rm -rf /usr_backup
I żeby sprawdzić czy system się uruchomi, znów zrestartowałem komputer.
Wszystko działa... i problemy z brakiem miejsca zniknęły.
piątek, 1 lutego 2008
Pierwszy wpis
Z braku lepszych sposobów tracenia czasu - zakładam z dniem dzisiejszym bloga. Ciekawe kiedy mi się znudzi...
Subskrybuj:
Posty (Atom)