Development z Zapomnianej Strony

..:: Paweł Hofman .NET Portal ::..

Podczas pracy nad konfiguracją dual-boota na MacBooku Pro, boot-manager zupełnie zgłupiał i obok opcji “Windows” zaczął jakąś wymyślną nazwą opisywać uruchamianie OS X Maverics.

Na szczęście istnieje to oto wymyślne polecenie, które potrafi pobłogosławić boot-managera i kazać mu z powrotem użyć nazwy dysku twardego, na którym zainstalowany jest MacOS:

sudo bless --folder /System/Library/CoreServices –bootefiOczywiście uruchamiany to polecenie w terminalu Maverics’a.



W końcu, po tylu latach czekania udało się! Gratulacje dla firmy Xamarin, wreszcie mamy Mono w wersji hardfloat na swoje Raspberry Pi.

Jak skompilować i zainstalować tę wersję można poczytać tutaj lub tutaj. Trochę czasu to trwa,  trzeba być naprawdę cierpliwym (niemal cały dzień, jeśli robimy to na urządzeniu).

Niestety sama kompilacja wymaga też zainstalowania poprzedniej wersji Mono, która hardfloat nie była. Kończymy więc z dwoma wersjami działającymi jednocześnie (stara v2.8 w /usr/bin/mono i nowa v3.2 w /usr/local/bin/mono), przy czym domyślą dla uruchamianych plików .NET .exe jest stara wersja.

Jeśli zatem mamy program, który wyświetla tylko aktualną datę, to po uruchomieniu:

./current_date.exeotrzymamy:

Current date: 0/735244/0001 1:26:16 AM

Z kolei uruchamiając:

mono current_date.exeotrzymamy spodziewaną aktualną datę:

Current date: 1/11/2014 1:27:20 AM

Ustawmy zatem nowszą wersję Mono jako domyślną:

sudo update-alternatives --install /usr/bin/cli cli /usr/local/bin/mono 50    
sudo update-alternatives --set cli /usr/local/bin/mono

Od tej pory oba sposoby uruchamiania dadzą ten sam, spodziewany wynik.



Dla niektórych może jest to i zbytnia perwersja, ale lubię, gdy używając jakiegoś narzędzia, stosuję się do sugerowanych przez nie konwencji. Dzięki temu wszystko to, co robię nie odstaje od siebie. I tak patrząc na repozytorium w SVN, każdy commit przypisany był do użytkownika systemowego i oznaczany po prostu jego loginem (a często i jakimiś magicznymi przy- i przedrostkami – wystarczy spojrzeć na przykład z codeplex.com: “SND\FeydRauth_cp”). GiT z kolei próbuje opatrzeć wszystko właścicielem w formacie “<login> <email>”.

Jak zatem przenosząc repozytorium utrzymać jednolite nazwy autorów tak, aby nie dało się odróżnić, która część pochodzi z czasów, gdy używany był jeden system kontroli wersji, a które już po przeprowadzce?

Odpowiedź jest bardzo prosta – użyć opcji “-A <nazwa_pliku_txt>” podczas klonowania repozytorium SVN, która zapewni translację autorów. W pliku tym zapisujemy reguły, każda w osobnej linii, w postaci:

<nazwa_autora_svn> = <nazwa_autora_git>Czyli np.:

pawel = pawel <pawel@email.com>
pawelh = pawel <pawel@email.com>

Dodatkowo, jeśli nie zależy nam na jakiejkolwiek późniejszej synchronizacji możemy dodać również opcję “--no-metadata”, która zapobiegnie doklejaniu dodatkowych danych w komentarzach, które opisywałyby źródłowe commity SVN, już docelowo w GiT-ie.

Całe polecenie wygląda wtedy tak:

git svn clone svn+ssh://<svn_url> <local_name> -A authors.txt --no-metadata

Oczywiście zakładamy tutaj, że:

- svn+ssh:// – to wykorzystywany schemat do repozytorium SVN (równie dobrze może to być samo svn:// lub http://)

- svn_url – to pełny adres gałęzi, którą będziemy klonować

- local_name – to nazwa lokalnego folderu, w którym zostanie utworzone repozytorium GiT

- authors.txt – to nazwa pliku z regułami translacji autorów opisanymi powyżej.

 

Teraz pozostaje tylko upewnić się, że ustawiliśmy w konfiguracji GiTa ten sam login i email dla nowego autora i ładnie wypchnąć nowe repozytorium.



Poniższa prosta procedura gwarantuje odzyskanie dużej ilość miejsca zajętego przez dynamiczne dyski VHD maszyny wirtualnej utworzonej w Hyper-V w Windows 8 Pro:

1. Włącz system, który będzie optymalizowany.
2. Opróżnij kosz, usuń pliki z katalogów ‘temp’, usuń zbędne punkty przywracania systemu, wyłącz hibernację, zmniejsz plik stronicowania.
3. Defragmentuj dysk (najlepiej x3 w Windows XP)
4. Wyzeruj wolne miejsce używając sdelete.exe (dostępne tutaj od SysInternals).
5. Wyłącz system.

6. W Hyper-V kompaktuj rozmiar dysku VHD.

Gotowe!



Nowy komputer to nowe problemy do rozwiązania. Dziwne, że to urządzenie miało w zamyśle twórcy służyć ich rozwiązywaniu ;) Najpierw zasilacz okazał się niestabilny i za każdym razem, gdy w systemie wzrastało zapotrzebowanie na moc, restart!

Później, po kilku dniach zabawy z Windows 8, niespodziewanie oczom moim ukazały się dość częste BSOD (dla niewtajemniczonych, Blue Screen of Death, niebieski ekran śmierci w Windows). Otóż płyta Asus P8Z77-V Pro posiada kontroler sieci LAN Intel 82579V. A kontroler ten posiada pewną nietypową właściwość. Po uśpieniu komputera zaczyna nagle przedstawiać się jako zupełnie inny sprzęt – 82579LM.

Aby ten problem rozwiązać, należy aktualizować EPROM tejże karty sieciowej. Odpowiednie narzędzie można pobrać ze strony Intela tutaj.

I życie staje się piękniejsze!



You want it, you got it!

Zabawa przy Windows Phone 8 zmusiła mnie do zmiany systemu na Windows 8. Wszystko zainstalowało się bez problemów. Co ciekawe udało mi się przy tej okazji obalić kolejny mit. Otóż wersja Windows 8 UPGRADE nie musi być wcale instalowana na istniejącą wersję Windows 7. Ta ostatnia musiała być po prostu kiedyś wcześniej przypisana do naszej maszyny. Po przypadkowym sformatowaniu partycji systemowej z poziomu instalatora i tak wszystko udało się pięknie aktywować.

No ale dosyć tego pięknego ;) Co zepsuło się tym razem? To proste – po zalogowaniu się z użyciem swojego identyfikatora Windows Live (przemianowanego na konto Microsoft, czy jakoś tak), lokalna nazwa katalogu domowego użytkownika wyglądała jakoś dziwnie. Zamiast spodziewanego:

C:\Users\Pawelzobaczyłem:

C:\Users\pawel_000Skąd się wzięły te zera na końcu i po co one komu. Nie mam pojęcia. Ale jak się ich pozbyć?

Na to odpowiedź znalazłem w tym wątku na StackOverflow.com.

Ponieważ już jesteśmy zalogowani na tym koncie, procedura wygląda następująco (w razie problemów zawsze można utworzyć innego użytkownika lokalnego z uprawnieniami administratora, przelogować się, wykonać to wszystko z jego poziomu i usunąć go na końcu):

  • Uruchamiamy “Zarządzanie komputerem” (“Mój komputer”, menu kontekstowe i “Zarządzaj”)
  • Przechodzimy do opcji “Użytkownicy i grupy lokalne”, a następnie “Użytkownicy”
  • Zmieniamy nazwę użytkownika z “pawel_000” na “Pawel”
  • Zmieniamy nazwę katalogu lokalnego z C:\Users\pawel_000 na C:\Users\Pawel
  • Przy użyciu regedit, zmieniamy lokalizację awatara dla naszego profilu tutaj (ProfileImagePath):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\

 

HINT:

Jednak moja późniejsza praca na tym koncie uświadomiła mi, że nie wszystko jest jeszcze gotowe. Duża ilość programów podpowiadała źle folder, do którego chciała się zainstalować (zawierał on dalej pawel_000), nie potrafiła poprawnie zlokalizować niektórych ustawień lub ich zapisać. Okazało się, że w rejestrze istnieje jeszcze kilka wpisów, które trzeba poprawić. Są to lokalizacje wszystkich folderów specjalnych użytkownika. Należy je poprawić używając regedit w tej lokalizacji:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell FoldersGotowe!



Kilka dni temu miała miejsce premiera najnowszej wersji systemu operacyjnego Synology DSM 4.1. (do pobrania tutaj). Nie ma więc na co czekać. Aktualizujemy swój NAS i oto oczom naszym ukazuje się pakiet opcjonalny “Mono 2.11.1 (beta)”, który po zainstalowaniu dostarcza nam pełną funkcjonalność .NET Frameworka. Czyli jest wszystko to, co opisywałem wcześniej (oczywiście bez etapu kilkugodzinnej kompilacji) i coś ekstra dostarczone przez Synology. Dodatkowo aktualizuje się wewnętrzny serwer Apache tak, że w katalogu “web” możemy od razu tworzyć w pełni funkcjonalne stronki ASPX i MVC!



Jakiś czas temu pokazałem jak skompilować dystrybucję Mono 2.10.9 na swój NAS. Jednak dlaczego nie posunąć się o krok dalej i nie uruchomić stron ASPX na naszym urządzeniu?

Jak zatem skompilować testowy serwer XSP i uruchomić go? Równie dobry opis znajduje się tutaj (tyle, że po rosyjsku).

 

Zacznijmy zabawę od pobrania i wypakowania źródeł dla serwera XSP:

wget http://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2
tar -xvf xsp-2.10.2.tar.bz2 cd xsp-2.10.2

Upewnijmy się, że kompilator mono jest widoczny, tworząc odpowiednie dowiązania do /opt/bin:

ln -s /opt/mono-2.10.9/bin/dmcs /opt/bin/dmcs
ln -s /opt/mono-2.10.9/bin/gacutil /opt/bin/gacutil
ln -s /opt/mono-2.10.9/bin/mdoc /opt/bin/mdoc

I przechodzimy do konfiguracji (w razie potrzeby instalujemy brakujące pakiety - ja musiałem chociażby pkgconfig). Tutaj tak samo, jak w przypadku instalacji Mono, nie pozwalamy na bezpośrednią instalację do katalogu /opt/bin, tylko wymuszamy folder “mono-2.10.9”. Pozwoli to trzymać serwer XSP razem z odpowiadającą mu wersją Mono, jak i w przyszłości na szybką deinstalację (razem z Mono) poprzez proste usunięcie tego folderu.

ipkg install pkgconfig
export PKG_CONFIG_PATH=/opt/mono-2.10.9/lib/pkgconfig/
./configure --prefix=/opt/mono-2.10.9 --disable-docs

Budujemy i instalujemy:

make
make install


Build Environment
Install prefix: /opt/mono-2.10.9
Datadir: /opt/mono-2.10.9/share
Libdir: /opt/mono-2.10.9/lib
Build documentation: no
Mono 2.0 compiler: /opt/bin/gmcs
Mono 4.0 compiler: /opt/bin/dmcs
Target frameworks: .NET 2.0, .NET 4.0
Build SQLite samples: yes

Na koniec tworzymy jeszcze niezbędne dowiązania, aby łatwiej uruchamiać testowe strony:

ln -s /opt/mono-2.10.9/bin/xsp2 /opt/bin/xsp2
ln -s /opt/mono-2.10.9/bin/xsp4 /opt/bin/xsp4

Finał! Uruchamiamy przykład:

cd /opt/mono-2.10.9/lib/xsp/test
xsp4 --port 8888 --applications /:.
A w oknie przeglądarki wpisujemy: http://my_nas:8888/. Nic prostszego.

Gotowe!



Synology NAS pozwala za pomocą panelu administracyjnego w bardzo łatwy sposób skonfigurować domyślną stronę WWW dla naszego urządzenia. Tak samo możemy tam włączyć strony domowe dla użytkowników.

Do wybranego katalogu serwera WWW (np. /volume1/web) wrzucamy cały kod strony html/css/php i to w zasadzie wszystko.

Problem pojawia się niestety, gdy chcemy ograniczyć dostęp do tych zasobów za pomocą najprostszego logowania. Ponieważ pod maską chodzi Apache wydawać by się mogło, że wystarczy dorzucić odpowiednio przygotowane pliki .htaccess i .htpasswd.

Nic bardziej mylnego. Tzn. one zadziałają, ale zaraz po wpisaniu hasła zostaniemy automatycznie przekierowaniu z portu 80 (lub 8080) na port 5000 albo 5001, gdzie uruchomiona jest konsola administrowania urządzeniem. Podsłuchując, co się wtedy dzieje od strony protokołu HTTP okazuje się, że zaraz po zalogowaniu otrzymujemy klasyczny “redirect” (tj. odpowiedź z kodem 302 (3xx)).

Rozwiązanie jak uniknąć przekierowania znalazłem tutaj. Polega ono na edycji pliku PHP strony próbkowania Synology Manager, który gdy nie znajdzie nic w domyślnym folderze stron WWW, to właśnie przekierowuje na panel administratora (lub definitywnie zmieniamy mu nazwę na sample.php.bak).

vi /usr/syno/synoman/phpsrc/web/sample.php

i wykomentowujemy na samym końcu tego pliku:

# else
# {
#    header("Location: ".$admin_link);
# }

A na koniec restartujemy serwer Apache:

/usr/syno/etc/rc.d/S97apache-user.sh restart

Podpowiedzi:

  • Ponieważ .htaccess wymusza logowanie dla całego podrzewa katalogów, dlatego lepiej użyć podfolderu w katalogu głównej witryny WWW i w nim umieścić dostęp przez hasło.
    Użycie np. katalogu “secure” i umieszenie tam .htaccess, spowoduje, że domyślny folder http://www.mój-nas.pl będzie miał dostęp wolny, natomiast http://www.mój-nas.pl/secure/ będzie wymagał logowania.
    Jest to o tyle pomocne, że inne aplikacje (jak chociażby PhotoStation nie będą wymagały podania tego hasła!)
  • Zwyczajowo w pliku .htaccess umieszczamy lokalizację do pliku z hasłami bez podawania pełnej ścieżki, czyli np.

AuthUserFile .htpasswd

ale, nie oznacza to, że katalogiem, w którym poszukiwany będzie ten plik jest folder witryny WWW!. Wręcz przeciwnie, domyślnie jest nim katalog: /usr/syno/apache

I tak oto uzyskaliśmy dostęp za hasłem!



Czasem zamiast zestawić proxy (ot, chociażby tinyproxy) dużo prościej jest po prostu zalogować się na zdalny serwer i użyć przeglądarki w terminalu – lynx.

Na stacji Synology zainstalujemy ją poprzez polecenie:

ipkg install lynxI dalej z górki: (G) – wpisujemy adres witryny, (Strzałka w Górę) i (Strzałka w Dół), przechodzimy po łączach, (Spacja) – następny ekran, (Strzałka w Lewo) – cofnij do poprzedniej witryny, (Strzałka w Prawo) – otwórz zaznaczone łącze, (D) – pobierz plik…

Co jednak, jeśli chcemy za jej pomocą pobrać duże pliki? Takie powiedzmy 1GB i więcej?

To boleśnie przekonamy się o tym, że nasza stacja nie ma tyle miejsca na dane tymczasowe i wszystko zostanie urwane w połowie.

Prosta rada, to przed uruchomieniem lynxa, ustawić tę oto zmienną środowiskową:

export LYNX_TEMP_SPACE=/katalog/z/dużą/ilością/wolnego/miejsca

Ciekawostka jest taka, że nawet najnowsza wersja przeglądarki (tj. 2.8.6) nie umożliwia podania tego katalogu w pliku konfiguracyjnym lynx.cfg.

 

Udanego pobierania!



Autor

Paweł Hofman [CodeTitans]

ASP.NET
C/C++, C#, Objective-C
SQL

License and Disclaimer

Moje Gry i Aplikacje

Zobacz mnie na GoldenLine

Zobacz mnie na LinkedIn
Supported by Polish SQL Server User Group (PLSSUG)

Supported by WrocNet.org

Zine.net.pl

Wpisy

Projekty

Moje projekty open-source:

Sign in