<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>News and Notes</title><link href="https://notatnik.akademicki.eu/" rel="alternate"/><link href="https://notatnik.akademicki.eu/feeds/all.atom.xml" rel="self"/><id>https://notatnik.akademicki.eu/</id><updated>2025-12-21T20:00:00+01:00</updated><entry><title>[72] s-tui - narzędzie do testowania hosta przy dużym obciążeniu systemu</title><link href="https://notatnik.akademicki.eu/cpu-temp-stress-test.html" rel="alternate"/><published>2025-12-21T20:00:00+01:00</published><updated>2025-12-21T20:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2025-12-21:/cpu-temp-stress-test.html</id><summary type="html">&lt;p class="first last"&gt;Testowanie temperatury przy maksymalnym obciążeniu procesora (s-tui)&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Testowanie przy obciązeniu hosta wymaga maksymalnego obciążenia procesora.
Program &lt;em&gt;s-tui&lt;/em&gt; posiada dwa tryby pracy:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;monitorowanie&lt;/li&gt;
&lt;li&gt;obciążanie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Drugi tryb wymaga zainstalowania &lt;em&gt;stress-ng&lt;/em&gt;.
Pozwala na sprawdzenie temperatury i stabilności przy dużym obciążeniu systemu.&lt;/p&gt;
</content><category term="software"/><category term="linux"/><category term="admin"/></entry><entry><title>[71] Dezaktywacja uśpienia/hibernacji systemu na ekranie logowania (linux)</title><link href="https://notatnik.akademicki.eu/disable-login-screen-hibernate-sleep.html" rel="alternate"/><published>2024-09-27T20:00:00+02:00</published><updated>2024-09-27T20:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2024-09-27:/disable-login-screen-hibernate-sleep.html</id><summary type="html">&lt;p class="first last"&gt;Deaktywacja usypiania i hibernacji systemu na ekranie logowania gdy żaden użytkownik nie jest zalogowany.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;W przypadku zainstalowania linux-a ze środowiskiem graficznym komputer jest usypiany lub hibernowany gdy żaden użytkownik nie jest zalogowany.&lt;/p&gt;
&lt;p&gt;Jednym z prostszych sposobów, który choć jest niezbyt elegancki to działa na większości dystrybucji jest modyfikacja systemd:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
&lt;/pre&gt;
&lt;p&gt;Aby powrócić do ustawień standardowych z włączoną hibernacją i usypianiem:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
&lt;/pre&gt;
&lt;p&gt;Samo polecenie powoduje zlinkowanie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Created symlink /etc/systemd/system/sleep.target → /dev/null.
Created symlink /etc/systemd/system/suspend.target → /dev/null.
Created symlink /etc/systemd/system/hibernate.target → /dev/null.
Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.
&lt;/pre&gt;
&lt;p&gt;W przypadku ekranu logowania do systemu od tej pory pojawi się ostrzeżenie o przejściu do uśpienia z powodu braku aktywności lecz samo przejście nie będzie skuteczne.&lt;/p&gt;
</content><category term="software"/><category term="linux"/><category term="admin"/></entry><entry><title>[70] HAProxy - JupyterHub</title><link href="https://notatnik.akademicki.eu/jupyterhub-behind-haproxy.html" rel="alternate"/><published>2023-05-02T10:00:00+02:00</published><updated>2023-05-02T10:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2023-05-02:/jupyterhub-behind-haproxy.html</id><summary type="html">&lt;p class="first last"&gt;Konfiguracja JupyterHub za HAProxy&lt;/p&gt;
</summary><content type="html">&lt;p&gt;JupyterHub wymaga dla poprawnego działania (dostęp do panelu admina, poprawne ładowanie strony, ...) wprowadzenia zmiany do standardowej konfiguracji HAProxy.&lt;/p&gt;
&lt;p&gt;W konfiguracji dla backendu (pool) należy wprowadzić:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# add X-Forwarded-Proto
http-request set-header X-Forwarded-Proto https if { ssl_fc }
&lt;/pre&gt;
&lt;p&gt;OPNSense umożliwia wprowadzenie tej konfiguracji przez: Services -&amp;gt; HAProxy -&amp;gt; Virtual Services -&amp;gt; Backend Pool -&amp;gt; Edit Server po odblokowaniu &lt;em&gt;advanced mode&lt;/em&gt; w polu  &lt;em&gt;Option pass-through&lt;/em&gt;&lt;/p&gt;
</content><category term="software"/><category term="HAProxy"/><category term="JupyterHub"/></entry><entry><title>[69] NeoVim - lua config - konfiguracja podstawowa</title><link href="https://notatnik.akademicki.eu/neovim-part-i.html" rel="alternate"/><published>2022-07-02T18:00:00+02:00</published><updated>2022-07-02T18:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2022-07-02:/neovim-part-i.html</id><summary type="html">&lt;p class="first last"&gt;Przejście na konfigurację w lua dla neovim.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Konfiguracja aktualna zawarta w repozytorium &lt;a class="reference external" href="https://github.com/piotrczaja/neovim-config"&gt;https://github.com/piotrczaja/neovim-config&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Zależności:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;fd:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dnf install fd-find
pacman -S fd
zypper in fd
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;ripgrep:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pacman -S ripgrep
dnf install ripgrep
zypper install ripgrep
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content><category term="software"/><category term="vim nvim"/></entry><entry><title>[68] openSUSE Tumbleweed - brakujące nsswitch.conf</title><link href="https://notatnik.akademicki.eu/missing-file-nsswitch-in-opensuse.html" rel="alternate"/><published>2022-06-10T21:00:00+02:00</published><updated>2022-06-10T21:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2022-06-10:/missing-file-nsswitch-in-opensuse.html</id><summary type="html">&lt;p class="first last"&gt;openSUSE Tumbleweed wymaga skopiowania pliku nsswitch.conf do katalogu /etc&lt;/p&gt;
</summary><content type="html">&lt;p&gt;W obecnej wersji openSUSE Tumbleweed nie ma w katalogu /etc pliku nsswitch.conf&lt;/p&gt;
&lt;p&gt;Trzeba go zatem skopiować:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cp /usr/etc/nsswitch.conf /etc/nsswitch.conf
&lt;/pre&gt;
&lt;p&gt;Od tej pory ostrzeżenia i potencjalne błędy powinny ustać.&lt;/p&gt;
</content><category term="software"/><category term="linux openSUSE admin"/></entry><entry><title>[67] Przygotowanie raportów / referatów / prac dyplomowych / ...</title><link href="https://notatnik.akademicki.eu/scientific-report-preparation.html" rel="alternate"/><published>2022-01-21T07:00:00+01:00</published><updated>2022-01-21T07:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2022-01-21:/scientific-report-preparation.html</id><summary type="html">&lt;p class="first last"&gt;Wskazówki techniczne do przygotowania prac zaliczeniowych i dyplomowych.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;W trakcie zajęć wielokrotnie zadawane są pytania o techniczne przygotowanie konspektów, referatów, raportów, prac dyplomowych oraz innych prac zaliczeniowych.
Aby ułatwić dostęp do przygotowanych informacji zebrałem to co wcześniej napisałem w jednym miejscu.
Zapraszam osoby zainteresowane do zapoznania się z tymi materiałami.&lt;/p&gt;
&lt;p&gt;Prace powiązane (html):&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://notatnik.akademicki.eu/plagiarism-intro.html"&gt;Plagiat - wprowadzenie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://notatnik.akademicki.eu/citations-intro.html"&gt;Cytowania&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://notatnik.akademicki.eu/bibliography-intro.html"&gt;Bibliografia załącznikowa - wprowadzenie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prace powiązane (PDF):&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://cdn.netlib.eu/public/artykuly/jak_zach_prawa_aut_inf_zrod.pdf"&gt;Jak zachować prawa autora informacji źródłowej w publikacjach? [PDF]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://cdn.netlib.eu/public/artykuly/kompozycja_publikacji.pdf"&gt;Uzupełniając treść formą graficzną: kompozycja publikacji [PDF]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://cdn.netlib.eu/public/artykuly/zarys_ter_pub_nauk.pdf"&gt;Zarys terminologii publikacji naukowych [PDF]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><category term="academic"/><category term="students"/></entry><entry><title>[66] Jakość transmisji spotkań z wykorzystaniem ZOOM-a</title><link href="https://notatnik.akademicki.eu/zooms-transmission-quality.html" rel="alternate"/><published>2022-01-12T07:00:00+01:00</published><updated>2022-01-12T07:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2022-01-12:/zooms-transmission-quality.html</id><summary type="html">&lt;p class="first last"&gt;ZOOM domyślnie ogranicza jakość audio/video - pomysły na obejście ograniczeń i zwiększenie jakości transmisji.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;ZOOM zapewnia wiele opcji optymalizacji zależnie od posiadanej licencji oraz platformy systemowej na której jest uruchomiony klient.
W przypadku Linuksa i licencji edukacyjnej jakość transmisji jest często niewystarczająca.
Dokonałem przeglądu przepisów na obejście ograniczeń licencyjnych i środowiskowych oraz wybrałem te, które działają na kliencie linuksowym z podstawową licencją akademicką.&lt;/p&gt;
&lt;p&gt;Na tej podstawie powstała krótka instrukcja, która przegląda dostępne w tej konfiguracji opcje: &lt;a class="reference external" href="https://cdn.netlib.eu/materialy/zoom2021/"&gt;[LINK]&lt;/a&gt;&lt;/p&gt;
</content><category term="tools"/><category term="software"/></entry><entry><title>[65] Klucze ED25519 dla SSH</title><link href="https://notatnik.akademicki.eu/new-ssh-keys.html" rel="alternate"/><published>2021-06-30T07:00:00+02:00</published><updated>2021-06-30T07:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2021-06-30:/new-ssh-keys.html</id><summary type="html">&lt;p class="first last"&gt;Klucze RSA w wersji poniżej 2048 stały się mniej bezpieczne - czas na ed25519&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Po wielu latach używania klucza RSA w komunikacji SSH przyszedł czas na wymianę kluczy.
Stosowane klucze RSA o długości poniżej 3076 uważa się obecnie za niezbyt bezpieczne.&lt;/p&gt;
&lt;p&gt;Nawet jeśli stosowało się długie klucze to dobrze dostosować się do współczesnych rozwiązań.
Algorytm nie jest całkiem nowy - problemy z kompatybilnością już nie powinny istnieć.&lt;/p&gt;
&lt;p&gt;Generowanie klucza:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
ssh-keygen -o -a 256 -t ed25519 -N '' -f ~/.ssh/id_ed25519 -C &amp;quot;USER&amp;#64;HOSTNAME&amp;quot;
&lt;/pre&gt;
&lt;p&gt;gdzie:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;-a 256 – ilość rund KDF użytych przy generowaniu klucza. Im wyższa wartość, tym lepiej lecz wolniejsze jest działanie.&lt;/li&gt;
&lt;li&gt;-t ed25519 – wybór rodzaju klucza,&lt;/li&gt;
&lt;li&gt;-N '' – puste hasło dla klucza,&lt;/li&gt;
&lt;li&gt;-f ~/.ssh/id_ed25519 – nazwa pliku w którym ma zostać zapisany klucz.&lt;/li&gt;
&lt;/ul&gt;
</content><category term="tools"/><category term="linux"/><category term="software"/></entry><entry><title>[64] Manipulowanie plikami PDF</title><link href="https://notatnik.akademicki.eu/pdf-files.html" rel="alternate"/><published>2021-01-30T07:00:00+01:00</published><updated>2021-01-30T07:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2021-01-30:/pdf-files.html</id><summary type="html">&lt;p class="first last"&gt;Najbardziej przydatne polecenia do manipulowania plikami PDF.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Podział pliku PDF na kolejne strony:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pdftk PLIK.pdf burst
&lt;/pre&gt;
&lt;p&gt;Polecenie to podzieli na pliki o dymyślnych nazwach pg_0001.pdf, pg_0002.pdf, itd.&lt;/p&gt;
&lt;p&gt;Można też sterować nazwami plików wynikowych i wpłynąć na ich rozmiar:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pdftk PLIK.pdf burst output site_%02d.pdf compress
&lt;/pre&gt;
&lt;p&gt;Polecenie to podzieli na pliki o nazwach site_01.pdf, site_02.pdf itd.&lt;/p&gt;
</content><category term="tools"/><category term="linux"/><category term="software"/></entry><entry><title>[63] Utrzymanie logów systemd</title><link href="https://notatnik.akademicki.eu/systemd-journal.html" rel="alternate"/><published>2021-01-21T07:00:00+01:00</published><updated>2021-01-21T07:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2021-01-21:/systemd-journal.html</id><summary type="html">&lt;p class="first last"&gt;Systemd trzyma dosyć obszerne logi - można zwolnić to miejsce wykorzystując wiele kryteriów.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Zwolnienie miejsca wg. kryterium czasowego:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
journalctl --vacuum-time=10d
&lt;/pre&gt;
&lt;p&gt;wyczyści logi starsze niż 10 dni.&lt;/p&gt;
&lt;p&gt;Polecenie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
journalctl --vacuum-size=2G
&lt;/pre&gt;
&lt;p&gt;zwolni miejsce zajmowane przez logi powyżej wyznaczonego limitu 2GB.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="linux"/><category term="systemd"/></entry><entry><title>[62] OBS + VirtualCam w linuksie</title><link href="https://notatnik.akademicki.eu/obs-virtualcam-on-linux.html" rel="alternate"/><published>2021-01-09T07:00:00+01:00</published><updated>2021-01-09T07:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2021-01-09:/obs-virtualcam-on-linux.html</id><summary type="html">&lt;p class="first last"&gt;Sposób na problemy ze współpracą OBS VirtualCam z przeglądarkami internetowymi (m.in w Jitsi).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;OBS Studio od wersji 26.1 wspiera domyślnie w linuksie (po zainstalowaniu &lt;em&gt;v4l2loopback-dkms&lt;/em&gt;) kamerę wirtualną.
Można ją później wykorzystać w Zoom-ie, Jitsi itp.&lt;/p&gt;
&lt;p&gt;O ile Zoom nie ma problemów z korzystaniem z kamery wirtualnej tak w przypadku przeglądarek internetowych przy korzystaniu m.in. z Jitsi pojawia się błąd związany z wyborem kamery internetowej (uprawnienia).&lt;/p&gt;
&lt;p&gt;Zmiana uprawnień do pliku wirtualnego urządzenia nie likwiduje problemu.&lt;/p&gt;
&lt;p&gt;Rozwiązaniem jest odpowiednia kolejność uruchamiania programów oraz sterowanie dostępnością poszczególnych kamer.&lt;/p&gt;
&lt;p&gt;Aby kamera wirtualna z OBS Studio działa w przeglądarce:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Należy wyłączyć wszystkie programy związane z kamerami (wirtualnymi i rzeczywistymi).&lt;/li&gt;
&lt;li&gt;Po wykonaniu tego kamera rzeczywista powinna być włączona ale nie aktywna.&lt;/li&gt;
&lt;li&gt;Włączyć przeglądarkę logując się na pożądany serwis (np. Jitsi).&lt;/li&gt;
&lt;li&gt;Wyłączyć w oprogramowaniu przeglądarki (klient Jitsi) kamerę by ją zwolnić na chwilę.&lt;/li&gt;
&lt;li&gt;Uruchomić OBS Studio z dostępem do kamery rzeczywistej i uruchomić kamerę wirtualną.&lt;/li&gt;
&lt;li&gt;Wybrać w oprogramowaniu przeglądarki (Jitsi) kamerę wirtualną.&lt;/li&gt;
&lt;/ol&gt;
</content><category term="tools"/><category term="admin"/><category term="linux"/><category term="hardware"/><category term="software"/></entry><entry><title>[61] Klawiatura Keychron K1 (wersja 4)</title><link href="https://notatnik.akademicki.eu/keychron-k1-v4.html" rel="alternate"/><published>2021-01-07T21:00:00+01:00</published><updated>2021-01-07T21:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2021-01-07:/keychron-k1-v4.html</id><summary type="html">&lt;p class="first last"&gt;Uruchomienie klawiatury Keychron K1 pod linuksem.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Klawiatura Keychron K1 (wersja 4) działa pod linuksem zgodnie z opisem producenta ale dopiero po wykonaniu kilku dodatkowych działań.
Zaraz po podłączeniu w systemie linuksowym pojawiają się cztery problemy:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;nie da się wpisać hasła przy inicjowaniu systemu, kiedy LUKS pyta o hasło potrzebne do odszyfrowania głównego systemu plików,&lt;/li&gt;
&lt;li&gt;nie działa kombinacja klawiszy &lt;em&gt;fn + X + L&lt;/em&gt;, która przełącza klawisze multimedialne na funkcyjne i na odwrót,&lt;/li&gt;
&lt;li&gt;aktywne są tylko klawisze multimedialne a klawisze funkcyjne nie są dostępne.&lt;/li&gt;
&lt;li&gt;klawiatura nie pojawia się zgodnie z opisami w Internecie pod &lt;em&gt;/sys/module/hid_apple/&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do uruchomienia klawiatury konieczny jest dostęp do systemu Windows 10.
Jeśli uruchamianie systemu linuksowego wymaga wpisania hasła LUKS do głównego systemu plików to potrzebna jest inna klawiatura by wpisać to hasło.&lt;/p&gt;
&lt;p&gt;Aby klawiatura działała pod linuksem należy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;Pod Windows10:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Przełączyć klawiaturę na system Win/Android.&lt;/li&gt;
&lt;li&gt;Zaktualizować firmware klawiatury zgodnie z opisem producenta.&lt;/li&gt;
&lt;li&gt;Zresetować klawiaturę do ustawień fabrycznych: &lt;em&gt;fn + Z + J&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Przełączyć pod windowsem działanie klawiszy funkcyjnych/multimedialnych: &lt;em&gt;fn + X + L&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Pod linuksem:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Sprawdzić czy można zmienić działanie klawisza &lt;em&gt;fn&lt;/em&gt; tak by po jego wciśnięciu z klawiszem funkcyjnym dostępne były funkcje multimedialne:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
echo 0 | sudo tee /sys/module/hid_apple/parameters/fnmode
&lt;/pre&gt;
&lt;p&gt;(Domyślnie jest tam wartość 1)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Jeśli wszystko zadziała to możemy utrwalić zmiany:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
echo &amp;quot;options hid_apple fnmode=0&amp;quot; | sudo tee -a /etc/modprobe.d/hid_apple.conf
mkinitcpio -P
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Od tej pory domyślnymi klawiszami są klawisze funkcyjne a multimedialne działają po dodatkowym wciśnięciu &lt;em&gt;fn&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Na podstawie: &lt;a class="reference external" href="https://mikeshade.com/posts/keychron-linux-function-keys/"&gt;https://mikeshade.com/posts/keychron-linux-function-keys/&lt;/a&gt;&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="linux"/><category term="hardware"/></entry><entry><title>[60] GDM - konfiguracja</title><link href="https://notatnik.akademicki.eu/gdm-config.html" rel="alternate"/><published>2021-01-06T07:00:00+01:00</published><updated>2021-01-06T07:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2021-01-06:/gdm-config.html</id><summary type="html">&lt;p class="first last"&gt;Konfiguracja ekranu logowania GDM w linuksie.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ekran logowania GDM pokazuje wszystkich użytkowników o ID większym od 1000.&lt;/p&gt;
&lt;p&gt;Aby ukryć użytkownika o ID &amp;gt; 1000 należy wpisać w pliku /var/lib/AccountsService/users/&amp;lt;USER&amp;gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
[User]
SystemAccount=true
&lt;/pre&gt;
</content><category term="tools"/><category term="admin"/><category term="linux"/><category term="gdm"/></entry><entry><title>[59] OpenVPN - certyfikaty (client, OPNSense)</title><link href="https://notatnik.akademicki.eu/openvpn-opnsense-client-certificate.html" rel="alternate"/><published>2020-06-28T21:00:00+02:00</published><updated>2020-06-28T21:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2020-06-28:/openvpn-opnsense-client-certificate.html</id><summary type="html">&lt;p class="first last"&gt;Konfiguracja klientów OpenVPN dla clientów OPNSense.&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="klient-android-linux-windows"&gt;
&lt;h2&gt;Klient Android/Linux/Windows&lt;/h2&gt;
&lt;p&gt;=&amp;gt; SYSTEM/ACCESS/USERS&lt;/p&gt;
&lt;p&gt;Utworzyć użytkownika:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
USERNAME: Nazwa użytkownika (nazwa hosta, urządzenia, bez domeny vpn)
FULLNAME: Opisowa nazwa (np. YOMIMONO TABLET)
Login shell: /sbin/nologin
W podstawowej konfiguracji bez przynależności do grup użytkowników.
Zaznaczyć utworzenie certyfikatu użytkownika.
&lt;/pre&gt;
&lt;p&gt;Utworzyć certyfikat użytkownika:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Name: -&amp;gt; username
CN: pełna nazwa domenowa dla danej sieci VPN
&lt;/pre&gt;
&lt;p&gt;Certyfikaty zapamiętane zostaną w SYSTEM/TRUST/CERTIFICATES&lt;/p&gt;
&lt;p&gt;=&amp;gt; VPN/OPENVPN/ClientSpecificOverrides&lt;/p&gt;
&lt;p&gt;Przypisać stałe IP dla klienta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
CN: pełna nazwa domenowa dla danej sieci VPN
DESCRIPTION: np YOMIMONO STATIC IP
Advanced: ifconfig-push IP NETMASK
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="klient-android"&gt;
&lt;h2&gt;Klient Android&lt;/h2&gt;
&lt;p&gt;=&amp;gt; VPN/OPENVPN/ClientExport:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
EXPORT TYPE: FileOnly
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="klient-linux-windows"&gt;
&lt;h2&gt;Klient Linux/Windows&lt;/h2&gt;
&lt;p&gt;=&amp;gt; VPN/OPENVPN/ClientExport:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
EXPORT TYPE: Archive
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="tools"/><category term="admin"/><category term="openvpn"/></entry><entry><title>[58] OpenVPN - certyfikaty (client, easy_rsa v3)</title><link href="https://notatnik.akademicki.eu/openvpn-easyrsa-client-certificate.html" rel="alternate"/><published>2020-04-20T21:00:00+02:00</published><updated>2020-04-20T21:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2020-04-20:/openvpn-easyrsa-client-certificate.html</id><summary type="html">&lt;p class="first last"&gt;Przejście na easy_rsa w wersji 3.X wprowadziło inny sposób generowania certyfikatów dla klientów.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Zgodnie z preferowanym dla easy_rsa v3 sposobem obsługi następują następujące procedury dla generowania i odwołania certyfikatu klienta.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;Generowanie certyfikatu klienta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./easyrsa gen-req client1 nopass
&lt;/pre&gt;
&lt;p&gt;gdzie client1 to nazwa pełna domenowa klienta np. dla tetsudai.vpn.example.com:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./easyrsa gen-req tetsudai.vpn.example.com nopass
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Podpisanie certyfikatu klienta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./easyrsa sign-req client client1
&lt;/pre&gt;
&lt;p&gt;gdzie client1 to nazwa pełna domenowa klienta np. dla tetsudai.vpn.example.com:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./easyrsa sign-req client tetsudai.vpn.example.com
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Weryfikacja certyfikatu klienta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
openssl verify -CAfile pki/ca.crt pki/issued/client1.crt
&lt;/pre&gt;
&lt;p&gt;gdzie client1 to nazwa pełna domenowa klienta np. dla tetsudai.vpn.example.com:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
openssl verify -CAfile pki/ca.crt pki/issued/tetsudai.vpn.example.com
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Gotowe certyfikaty należy skopiować na host klienta i zaktualizować ścieżki do plików certyfikatów w konfiguracji.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Odwołanie certyfikatu klienta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./easyrsa revoke client1
./easyrsa gen-crl
&lt;/pre&gt;
&lt;p&gt;gdzie client1 to nazwa pełna domenowa klienta np. dla tetsudai.vpn.example.com:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./easyrsa revoke tetsudai.vpn.example.com
./easyrsa gen-crl
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Po odwołaniu certyfikatu, jeśli to konieczne należy skopiować plik crl.pem w miejsce w którym serwer go odczytuje.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;UWAGA: Po stronie serwera przedawnienie CRL.pem powoduje brak możliwości połączenia się klientów z serwerem.&lt;/strong&gt;
Towarzyszy temu log: VERIFY ERROR: depth=0, error=CRL has expired: CN=....  po stronie serwera.
Można temu zaradzić generując nowy/aktualizując plik CRL.pem przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./easyrsa gen-crl
&lt;/pre&gt;
</content><category term="tools"/><category term="admin"/><category term="openvpn"/></entry><entry><title>[57] JupyterHub: pyenv + IRKernel</title><link href="https://notatnik.akademicki.eu/jupyterhub-pyenv-r.html" rel="alternate"/><published>2020-03-20T20:50:00+01:00</published><updated>2020-03-20T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2020-03-20:/jupyterhub-pyenv-r.html</id><summary type="html">&lt;p class="first last"&gt;Dostęp do środowiska R z JupyterLab instalowanego w środowisku dedytkowanego użytkownika (przez pyenv).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Po zainstalowaniu środowiska R należy (jako root by zainstalować globalnie) udostępnić odpowiedni kernel dla JupyterLab:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
R&amp;gt; install.packages('IRkernel')
&lt;/pre&gt;
&lt;p&gt;Spowoduje to udostępnienie odpowiedniego kernela dla wszystkich użytkowników.&lt;/p&gt;
&lt;p&gt;Następnie jako użytkownik USER (ten który instalował jupyterhub w pyenv), po aktywacji środowiska (pyenv), w którym jest zainstalowany JupyterHub, należy udostępnić ten kernel przez uruchomienie polecenia:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
R&amp;gt; IRkernel::installspec()
&lt;/pre&gt;
&lt;p&gt;co w utworzy odpowiednią konfigurację w katalogu:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
~/.local/share/jupyter/kernels
&lt;/pre&gt;
&lt;p&gt;Aby kernel ten był widoczny z JupyterHub należy utworzony przez R katalog zlinkować do:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
~/.pyenv/versions/3.X.X/envs/NAME/share/jupyter/kernels
&lt;/pre&gt;
&lt;p&gt;gdzie zainstalowany jest JupyterHub.&lt;/p&gt;
&lt;p&gt;O tej pory w JupyterHub powinno być dostępne dodatkowe środowisko R do uruchamiania notebooków.&lt;/p&gt;
&lt;p&gt;Na końcu trzeba sprawdzić uprawnienia dostępu do dodanych katalogów konfiguracyjnych.&lt;/p&gt;
</content><category term="tools"/><category term="sysadmin"/><category term="jupyterhub"/><category term="r"/><category term="pyenv"/></entry><entry><title>[56] JupyterHub: pyenv + IPKernel</title><link href="https://notatnik.akademicki.eu/jupyterhub-pyenv-python.html" rel="alternate"/><published>2020-03-18T20:50:00+01:00</published><updated>2020-03-18T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2020-03-18:/jupyterhub-pyenv-python.html</id><summary type="html">&lt;p class="first last"&gt;Udostępnianie, dostępnych z JupyterLab,  izolowanych przez pyenv środowisk z pakietami Pythona.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Po zainstalowaniu JupyterHub/JupyterLab przez pyenv, logiczną konsekwencją jest udostępnienie dedykowanych dla wyróżnionych celów, izolowanych środowisk, z różnymi zestawami zainstalowanych pakietów.&lt;/p&gt;
&lt;p&gt;Do ujawnienia przeszukiwanych ścieżek służy &lt;em&gt;jupyter --paths&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
config:
    /home/USER/.jupyter
    /home/USER/.pyenv/versions/3.X.X/envs/name/etc/jupyter
    /usr/local/etc/jupyter
    /etc/jupyter
data:
    /home/USER/.local/share/jupyter
    /home/USER/.pyenv/versions/3.8.2/envs/name/share/jupyter
    /usr/local/share/jupyter
    /usr/share/jupyter
runtime:
    /home/USER/.local/share/jupyter/runtime
&lt;/pre&gt;
&lt;p&gt;Domyślnie narzędzia tworzą kernele w:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
/home/USER/.local/share/jupyter/kernels/
&lt;/pre&gt;
&lt;p&gt;jednak JupyterHub zainstalowany przez USER-a w pyenv i uruchomiony przez ROOT-a przez systemd śledzić będzie tylko lokalizację:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
/home/USER/.pyenv/versions/3.X.X/envs/name/share/jupyter/kernels
&lt;/pre&gt;
&lt;p&gt;Z tego powodu dla dodania nowego środowiska Pythona należy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;stworzyć odpowiednie środowisko:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pyenv virtualenv 3.X.X NAME
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;zalogować się do niego, zainstalować pakiet dla kernela &lt;em&gt;ipykernel&lt;/em&gt; i sprawdzić ścieżkę uruchamiania:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pyenv activate NAME
pip install ipykernel
pyenv which python
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;co wskaże na ścieżkę:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
/home/USER/.pyenv/versions/NAME/bin/python
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;w lokalizacji &lt;em&gt;/home/USER/.local/share/jupyter/kernels/&lt;/em&gt; należy przygotować katalog &lt;em&gt;NAME&lt;/em&gt; z plikiem kernel.json:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
{
 &amp;quot;argv&amp;quot;: [ &amp;quot;/home/USER/.pyenv/versions/NAME/bin/python&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;ipykernel&amp;quot;,
      &amp;quot;-f&amp;quot;, &amp;quot;{connection_file}&amp;quot;],
 &amp;quot;display_name&amp;quot;: &amp;quot;NAME&amp;quot;,
 &amp;quot;language&amp;quot;: &amp;quot;python&amp;quot;
}
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;i zlinkować ten katalog do ścieżki:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
/home/USER/.pyenv/versions/3.X.X/envs/name/share/jupyter/kernels
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Od tej pory w JupyterLab powinno być dostępne dodatkowe środowisko &lt;em&gt;NAME&lt;/em&gt; do uruchamiania notebooków.&lt;/p&gt;
&lt;p&gt;Na końcu trzeba sprawdzić uprawnienia dostępu do dodanych katalogów konfiguracyjnych i środowisk Pythona.&lt;/p&gt;
</content><category term="tools"/><category term="sysadmin"/><category term="ipkernel"/><category term="pyenv"/><category term="jupyterhub"/></entry><entry><title>[55] JupyterHub: systemd + pyenv</title><link href="https://notatnik.akademicki.eu/jupyterhub-pyenv-systemd.html" rel="alternate"/><published>2020-03-16T20:50:00+01:00</published><updated>2020-03-16T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2020-03-16:/jupyterhub-pyenv-systemd.html</id><summary type="html">&lt;p class="first last"&gt;JupyterHub instalowany w pyenv i sterowany przez systemd.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;JupyterHub i JupyterLab są aplikacjami napisanymi w Pythonie.&lt;/p&gt;
&lt;p&gt;Podstawowy plik konfiguracyjny /etc/systemd/system/jupyterhub.service:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
[Unit]
Description=Jupyterhub

[Service]
User=root
Environment=&amp;quot;PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/USER/.pyenv/versions/.../bin/&amp;quot;
ExecStart=/home/USER/.pyenv/versions/.../bin/jupyterhub -f /etc/jupyterhub/jupyterhub_config.py
WorkingDirectory=/etc/jupyterhub

[Install]
WantedBy=multi-user.target
&lt;/pre&gt;
&lt;p&gt;Dzięki temu w katalogu jupyterhub tworzone są pliki:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
jupyterhub_cookie_secret
jupyterhub-proxy.pid
jupyterhub.sqlite
&lt;/pre&gt;
&lt;p&gt;oraz pliki konfiguracyjne: JupyterLab, JupyterHub, JupyterNotebook.&lt;/p&gt;
&lt;p&gt;JupyterHub musi być uruchomiony przez użytkownika ROOT by umożliwić uruchamianie instancji jupyterlab z prawami poszczególnych użytkowników (przez PAM).&lt;/p&gt;
&lt;p&gt;JupyterHub i JupyterLab jest zainstalowany w virtualenv/pyenv dla odseparowania od interpretera systemowego oraz innych globalnie instalowanych pakietów Pythona.&lt;/p&gt;
&lt;p&gt;Środowiska wirtualne tworzone są przez użytkownika USER.
Do uruchomienia przez innych użytkowników służy odpowiednie zarządzanie uprawnieniami do katalogów z virtualenv/pyenv.&lt;/p&gt;
</content><category term="tools"/><category term="sysadmin"/><category term="jupyterhub"/><category term="systemd"/><category term="pyenv"/></entry><entry><title>[54] JupyterHub: revProxy (nginx)</title><link href="https://notatnik.akademicki.eu/jupyterhub-nginx.html" rel="alternate"/><published>2020-03-14T20:50:00+01:00</published><updated>2020-03-14T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2020-03-14:/jupyterhub-nginx.html</id><summary type="html">&lt;p class="first last"&gt;JupyterHub z revProxy (nginx) dla obsługi TLS i ograniczenia zapotrzebowania na publiczne IP/porty.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Instalacja JupyterHub za revProxy obsługującym cały ruch www na porcie 443 organicza zapotrzebowanie na IP.&lt;/p&gt;
&lt;p&gt;Jeżeli JupyterHub pracuje na adresie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
http://X.X.X.X:8000/jupyterhub
&lt;/pre&gt;
&lt;p&gt;to przed sekcją server należy umieścić:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
&lt;/pre&gt;
&lt;p&gt;a odpowiedniej dla domeny publicznej sekcji server:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
location /jupyterhub/ {

            proxy_pass http://jupyter.domena ;

            proxy_redirect   off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # websocket headers
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            }
&lt;/pre&gt;
&lt;p&gt;przy upstream:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
upstream jupyter.domena {
server X.X.X.X:8000;
}
&lt;/pre&gt;
&lt;p&gt;Możliwa jest komunikacja https (SSL/TLS) z nginx za którym przez http (bez SSL/TLS) stoi serwer JupyterHub.
Pomimo że łącząc się bezpośrednio z &lt;a class="reference external" href="http://X.X.X.X:8000/jupyterhub"&gt;http://X.X.X.X:8000/jupyterhub&lt;/a&gt; pojawia się alert o nie zabezpieczonym połączeniu to przy połączeniach przez revProxy z TLS alert się nie pokazuje.&lt;/p&gt;
</content><category term="tools"/><category term="sysadmin"/><category term="jupyterhub"/><category term="nginx"/></entry><entry><title>[53] PowerDNS: administracja</title><link href="https://notatnik.akademicki.eu/powerdns-adm.html" rel="alternate"/><published>2020-03-11T20:50:00+01:00</published><updated>2020-03-11T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2020-03-11:/powerdns-adm.html</id><summary type="html">&lt;p class="first last"&gt;Przydatne praktyki z PowerDNS&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="pobranie-strefy"&gt;
&lt;h2&gt;Pobranie strefy&lt;/h2&gt;
&lt;p&gt;Czasami mechanizm notify nie zadziała i &lt;em&gt;slave&lt;/em&gt; nie chce pobrać danych strefy z &lt;em&gt;master&lt;/em&gt;.
Można to wymusić poprzez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pdns_control retrieve nazwa.domeny
&lt;/pre&gt;
&lt;p&gt;Pobrany wtedy zostanie plik strefy niezależnie od SOA.&lt;/p&gt;
&lt;p&gt;Jeśli odpowiedź nadal nie jest poprawna, pomimo pobrania wszystkich rekordów strefy to należy zrestartować &lt;em&gt;pdns-recursor&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;
</content><category term="tools"/><category term="sysadmin"/><category term="powerdns"/></entry><entry><title>[52] UEFI dualboot: MS Windows + Linux</title><link href="https://notatnik.akademicki.eu/uefi-dualboot.html" rel="alternate"/><published>2019-09-16T07:50:00+02:00</published><updated>2019-09-16T07:50:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2019-09-16:/uefi-dualboot.html</id><summary type="html">&lt;p class="first last"&gt;Najprostszym sposobem na UEFI zarówno pod instalację wielosystemową jak linuxową jest &lt;em&gt;systemd-boot&lt;/em&gt; domyślnie dostępny po instalcji ArchLinux.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;Systemd-boot&lt;/em&gt; jest instalowany na ArchLinux domyślnie.
Komendą dla zarządzania (w tym instalacji) jest bootctl&lt;/p&gt;
&lt;p&gt;Instalacja na partycji UEFI:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
bootctl --path=esp install
&lt;/pre&gt;
&lt;p&gt;Ręczny update:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
bootctl update
&lt;/pre&gt;
&lt;p&gt;Po instalacji w przypadku Windowsa pozycja uruchomieniowa jest tworzona przy każdym uruchomieniu.
Dla pozostałych pozycji należy wprowadzić odpowiednie wpisy w katalogu &lt;em&gt;loader&lt;/em&gt;.
Aby zaznaczyć opcję domyślną należy wcisnąć klawisz &amp;quot;d&amp;quot; na liście.&lt;/p&gt;
&lt;p&gt;Aby zarządzać kolejnością uruchamiania bootmanagerów (windows, linux) można zainstalować &lt;em&gt;efibootmgr&lt;/em&gt; i dzięki komendzie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
efibootmgr -o 1,2,3,...
&lt;/pre&gt;
&lt;p&gt;sterować w jakim porządku będą uruchamiane.
W ten sposób wybierając jako pierwszy bootmanager windowsowy inne nie pojawią się wogóle bez ich wyboru poprzez BIOS komputera.&lt;/p&gt;
</content><category term="tools"/><category term="sysadmin"/></entry><entry><title>[51] Odświeżenie wyglądu strony</title><link href="https://notatnik.akademicki.eu/website-style-refresh.html" rel="alternate"/><published>2019-03-11T07:50:00+01:00</published><updated>2019-03-11T07:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2019-03-11:/website-style-refresh.html</id><summary type="html">&lt;p class="first last"&gt;Odświeżenie strony i aktualizacja arkuszy stylów, które teraz poprawnie renderują się na ekranach o małej przekątnej i dużej rozdzielczości.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Po dłuższej przerwie postanowiłem powrócić do zamieszczania krótkich notek na tej stronie.
Z tego powodu napisałem własny szablon stylów, głównie w oparciu o &lt;em&gt;bootstrap&lt;/em&gt;, który teraz poprawnie powinien działać na różnych urządzeniach mobilnych, które mają mały ekran i dużą rozdzielczość.&lt;/p&gt;
&lt;p&gt;Nowy wygląd powinien być bardziej czytelny i praktyczny dla czytelników.&lt;/p&gt;
</content><category term="general"/><category term="webadmin"/></entry><entry><title>[50] Dydaktyka: tworzenie prezentacji wykładowych i materiałów dla studentów</title><link href="https://notatnik.akademicki.eu/academic-tools-for-students.html" rel="alternate"/><published>2018-05-18T21:50:00+02:00</published><updated>2018-05-18T21:50:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2018-05-18:/academic-tools-for-students.html</id><summary type="html">&lt;p class="first last"&gt;Opis narzędzi napisanych do generowania prezentacji wykładowych oraz elektronicznych skryptów na podstawie &lt;em&gt;modułów wiedzy&lt;/em&gt; .&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Prowadzenie zajęć dydaktycznych związane jest z czterema zasadniczymi problemami:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;tworzeniu odrębnych prezentacji i materiałów dydaktycznych udostępnianych studentom (elektronicznych skryptów),&lt;/li&gt;
&lt;li&gt;zapewnieniu aktualności materiału oraz wprowadzania poprawek, gdy treść jest współdzielona pomiędzy różnymi wykładami,&lt;/li&gt;
&lt;li&gt;zarządzaniu i utrzymaniem dużej ilości treści zajęć,&lt;/li&gt;
&lt;li&gt;udostępnieniu studentom materiałów w wygodnym formacie, który m.in. będzie podatny na przeglądanie na małym ekranie telefonów.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Problemy te stały się powodem powstania autorskiego systemu wspomagania zajęć z programami do generowania prezentacji i elektronicznych skryptów.&lt;/p&gt;
&lt;p&gt;System opiera się na modułach z których budowane są prezentacje i materiały udostępniane studentom oraz zgromadzonych w katalogach tematycznych.
Pozwala na wielokrotne wykorzystanie raz opracowanej treści pomiędzy zajęciami, które współdzielą zakres tematyczny.
Oddziela treść od warstwy prezentacji ułatwiając aktualizaję i zmiany w szacie graficznej.
Pozwala na wyszukiwanie pełnotekstowe treści i wygodną nawigację.&lt;/p&gt;
&lt;p&gt;Opis systemu (bez dodatkowych komentarzy) jest dostępny &lt;a class="reference external" href="http://cdn.netlib.eu/materialy/dydaktyka20180518/"&gt;online.&lt;/a&gt;&lt;/p&gt;
</content><category term="academic"/><category term="admin"/><category term="tools"/><category term="students"/></entry><entry><title>[49] Zarządzanie kontenerami w dockerze na pojedynczym VPS-ie</title><link href="https://notatnik.akademicki.eu/manage-docker-containers-on-single-vps.html" rel="alternate"/><published>2017-06-05T23:50:00+02:00</published><updated>2017-06-05T23:50:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-06-05:/manage-docker-containers-on-single-vps.html</id><summary type="html">&lt;p class="first last"&gt;Wprowadzenie do portainer.io&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Do zarządzanie pojedynczą instancją VPS dobrze nadaje się portainer.io.&lt;/p&gt;
&lt;p&gt;Instalacja jako kontener:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker run -d -p 9000:9000 --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /opt/portainer:/data portainer/portainer
&lt;/pre&gt;
&lt;p&gt;Możliwa jest też instalacja bez kontenera:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ cd /opt
$ wget https://github.com/portainer/portainer/releases/download/1.15.5/portainer-1.15.5-linux-amd64.tar.gz
$ tar xvpfz portainer-1.15.5-linux-amd64.tar.gz
$ ./portainer -p :8080
&lt;/pre&gt;
&lt;p&gt;lub po zmianie katalogu z danymi:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ ./portainer -d /opt/portainer-data
&lt;/pre&gt;
&lt;p&gt;Do uruchamiania można użyć sypervisord.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="docker"/></entry><entry><title>[48] Przydatne komendy w dockerze</title><link href="https://notatnik.akademicki.eu/docker-main-commands.html" rel="alternate"/><published>2017-05-02T23:50:00+02:00</published><updated>2017-05-02T23:50:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-05-02:/docker-main-commands.html</id><summary type="html">&lt;p class="first last"&gt;Przydatne komendy w dockerze: usuwanie konteneróœ i obrazów.&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="zatrzymanie-wszystkich-kontenerow"&gt;
&lt;h2&gt;Zatrzymanie wszystkich kontenerów&lt;/h2&gt;
&lt;p&gt;komenda:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker stop $(docker ps -a -q)
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="usuwanie-wszystkich-kontenerow"&gt;
&lt;h2&gt;Usuwanie wszystkich kontenerów&lt;/h2&gt;
&lt;p&gt;komenda:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker rm $(docker ps -a -q)
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="usuwanie-wszystkich-obrazow"&gt;
&lt;h2&gt;Usuwanie wszystkich obrazów&lt;/h2&gt;
&lt;p&gt;komenda:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker rmi $(docker images -q)
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="tools"/><category term="admin"/><category term="docker"/></entry><entry><title>[47] OpenVPN - certyfikaty (client)</title><link href="https://notatnik.akademicki.eu/openvpn-client-certificates-easy_rsa2.html" rel="alternate"/><published>2017-04-02T23:50:00+02:00</published><updated>2017-04-02T23:50:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-04-02:/openvpn-client-certificates-easy_rsa2.html</id><summary type="html">&lt;p class="first last"&gt;Generowanie CA i certyfikatów dla OpenVPN /easy_rsa2 - należy zmienić default_md w starszych konfiguracjach.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Sposób już nieaktualny - odnosi się do easy_rsa w wersji 2.X.&lt;/p&gt;
&lt;p&gt;Starsze instalacje OpenVPN wymagają zmiany wartości:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
default_md      = sha256
&lt;/pre&gt;
&lt;p&gt;i inaczej nie jest możliwe wykorzystanie aktualnej wersji clienta/serwera.&lt;/p&gt;
&lt;p&gt;Reszta jest standardowa.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;zainicjowanie konfiguracji:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cd bin
. ./vars
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;generowanie certyfikatu klienta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./build-key client1
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;gdzie client1 to nazwa pełna domenowa klienta np. dla tetsudai.vpn.example.com:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./build-key tetsudai.vpn.example.com
&lt;/pre&gt;
&lt;p&gt;Gotowe certyfikaty należy skopiować na host klienta i zaktualizować ścieżki do plików certyfikatów w konfiguracji.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="openvpn"/></entry><entry><title>[46] OpenVPN - certyfikaty (serwer)</title><link href="https://notatnik.akademicki.eu/openvpn-server-certificates.html" rel="alternate"/><published>2017-03-22T20:50:00+01:00</published><updated>2017-03-22T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-03-22:/openvpn-server-certificates.html</id><summary type="html">&lt;p class="first last"&gt;Generowanie CA i certyfikatów serwera dla OpenVPN - należy zmienić default_md w starszych konfiguracjach.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Starsze instalacje OpenVPN wymagają zmiany wartości na:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
default_md      = sha256
&lt;/pre&gt;
&lt;p&gt;i inaczej nie jest możliwe wykorzystanie aktualnej wersji clienta/serwera.&lt;/p&gt;
&lt;p&gt;Reszta jest standardowa.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;zainicjowanie konfiguracji:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cd bin
. ./vars
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;wyczyszczenie wcześniejszych certyfikatów:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./clean-all
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;generowanie centrum autoryzacji:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./build-ca
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;gdzie trzeba podać parametry w dialogu odpowiadając na pytania.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;generowanie certyfikatu serwera:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./build-key-server server
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;gdzie “server” to pełna nazwa domenowa serwera, a zmienne (przykład dla serwera kaminari.example.com):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Country Name (2 letter code) [PL]:
State or Province Name (full name) [dolnoslaskie]:
Locality Name (eg, city) [Wrocław]:
Organization Name (eg, company) [example.com]:
Organizational Unit Name (eg, section) [KAMINARI]:
Common Name (eg, your name or your server's hostname) [kaminari.example.com]:
Name [USER NAME]:
Email Address [MAILADDRESS]:
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;generowanie pliku DH (Diffie Hellman):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
./build-dh
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;generowanie klucza TLS:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
openvpn --genkey --secret ta.key
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Skopiuj gotowe dane serwera i klucz TLS do podręcznego archiwum (przykład dla serwera kaminari.example.com):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cp keys/kaminari.*   ../data/server/
cp keys/dh4096.pem   ../data/server/
mv ta.key            ../data/tls/
cp keys/ca.crt       ../data/ca/
&lt;/pre&gt;
</content><category term="tools"/><category term="admin"/><category term="openvpn"/></entry><entry><title>[45] Proxmox - źródło entropii w VM</title><link href="https://notatnik.akademicki.eu/proxmox-guest-entropy-source.html" rel="alternate"/><published>2017-02-22T20:50:00+01:00</published><updated>2017-02-22T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-02-22:/proxmox-guest-entropy-source.html</id><summary type="html">&lt;p class="first last"&gt;Aplikacje wykorzystujące sprzętowe źródła entropii są w przypadku VPS (KVM, Proxmox) skazane na bardzo niski ich poziom. Można temu zaradzić instalując &lt;em&gt;haveged&lt;/em&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;W przypadku VPSów instalowanych na Proxmox (KVM) należy zainstalować pakiet &lt;em&gt;haveged&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;W innym przypadku poziom źródła entropii jest na tyle niski, że spowoduje problemy w działaniu programów.&lt;/p&gt;
&lt;p&gt;Można to sprawdzić:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cat /proc/sys/kernel/random/entropy_avail
30
&lt;/pre&gt;
&lt;p&gt;A po zinstalowaniu &lt;em&gt;haveged&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cat /proc/sys/kernel/random/entropy_avail
2421
&lt;/pre&gt;
&lt;p&gt;Jest to bardzo istotny wynik w przypadku aplikacji korzystających z kryptografii itp. które wykorzystują sprzętowe źródło entropii.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="server"/><category term="proxmox"/><category term="virtualization"/></entry><entry><title>[44] Konfiguracja współdzielenia zasobów pomiędzy serwerami nextCloud</title><link href="https://notatnik.akademicki.eu/nextcloud-federation-shares.html" rel="alternate"/><published>2017-02-19T20:50:00+01:00</published><updated>2017-02-19T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-02-19:/nextcloud-federation-shares.html</id><summary type="html">&lt;p class="first last"&gt;Nextcloud umożliwia współdzielenie zasobów pomiędzy serwerami przez mechanizm &lt;em&gt;federation shares&lt;/em&gt;. Gdy jeden z serwerów korzysta z certyfikatu, który nie jest publiczny to należy go osobno zaimportować.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Mechanizm &lt;em&gt;federation shares&lt;/em&gt; umożliwia współdzielenie zasobów pomiędzy serwerami &lt;em&gt;nextCloud&lt;/em&gt;.
W przypadku serwerów, które nie posiadają publicznych, zaufanych certyfikatów pomimo zaimportowania takiego certyfikatu na poziomie serwera pojawią się problemy podczas współdzielenia plików.&lt;/p&gt;
&lt;p&gt;Należy osobno zaimportować każdy taki certyfikat do &lt;em&gt;nextCloud&lt;/em&gt; za pomocą poleceń administracyjnych.
Dla serwerów korzystających z &lt;em&gt;cacert.org&lt;/em&gt; będzie to:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
sudo -u wwwuser php occ security:certificates:import /path/to/certificate/root.pem
&lt;/pre&gt;
&lt;p&gt;gdzie &lt;em&gt;wwwuser&lt;/em&gt; jest użytkownikiem z którego prawami uruchamiany jest &lt;em&gt;nextCloud&lt;/em&gt;, a root.pem jest certyfikatem pobranym ze strony &lt;em&gt;cacert.org&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sprawdzenie zainstalowanych certyfikatów i ich ważności następuje przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
sudo -u wwwuser php occ security:certificates
&lt;/pre&gt;
&lt;p&gt;gdzie &lt;em&gt;wwwuser&lt;/em&gt; jest użytkownikiem z którego prawami uruchamiany jest &lt;em&gt;nextCloud&lt;/em&gt;.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="server"/><category term="nextcloud"/></entry><entry><title>[43] PHPMyAdmin (apache) za revProxy (nginx)</title><link href="https://notatnik.akademicki.eu/phpmyadmin-behind-nginx.html" rel="alternate"/><published>2017-02-12T20:50:00+01:00</published><updated>2017-02-12T20:50:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-02-12:/phpmyadmin-behind-nginx.html</id><summary type="html">&lt;p class="first last"&gt;PhpMyAdmin wymaga zmiany konfiguracji jeśli działa za revProxy w postaci np. nginx-a.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Jeśli phpmyadmin znajduje się za revProxy w postaci np. nginx-a, który pośredniczy w ruchu i szyfruje komunikacje po SSL/TLS, to przy logowaniu następuje niekończące się połączanie z serwerem.&lt;/p&gt;
&lt;p&gt;Pomaga odświeżenie strony Ctrl+R jednak nie jest to zachowanie poprawne.&lt;/p&gt;
&lt;p&gt;Aby przywrócic poprawne działanie należy do pliku &lt;em&gt;config.inc.php&lt;/em&gt; dodać:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$cfg['PmaAbsoluteUri'] = 'https://adres.domenowy.serwera/';
$cfg['ForceSSL'] = true;
&lt;/pre&gt;
&lt;p&gt;Po korekcie konfiguracji problem łączenia już nie występuje.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="server"/><category term="revproxy"/><category term="nginx"/><category term="mysql"/></entry><entry><title>[42] Composer - wprowadzenie</title><link href="https://notatnik.akademicki.eu/composer-intro.html" rel="alternate"/><published>2017-01-28T22:00:00+01:00</published><updated>2017-01-28T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-01-28:/composer-intro.html</id><summary type="html">&lt;p class="first last"&gt;Composer jest narzędziem do zarządzania zależnościami bibliotek PHP indywidualnie dla każdego z projektów.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Composer jest używany do zarządzania zależnościami bibliotek dla aplikacji napisanych w PHP.
Działa na poziomie pojedynczych projektów zapewniając dostęp do wskazanych bibliotek.&lt;/p&gt;
&lt;p&gt;Instalacja następuje przez gotowy skrypt:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
&lt;/pre&gt;
&lt;p&gt;który udostępnia narzędzie globalnie dla wszystkich użytkowników w systemie.&lt;/p&gt;
&lt;p&gt;Sprawdzić wersje można przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
composer --version
&lt;/pre&gt;
&lt;p&gt;Jeśli projekt zawiera plik json z definicjami zależności, to instalacja potrzebnych bibliotek następuje przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
composer update --no-dev
&lt;/pre&gt;
</content><category term="tools"/><category term="admin-tool"/><category term="PHP"/></entry><entry><title>[41] Podstawowe operacje na obrazach kontenerów (Docker/DockerHub)</title><link href="https://notatnik.akademicki.eu/docker-image-intro.html" rel="alternate"/><published>2017-01-05T22:00:00+01:00</published><updated>2017-01-05T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2017-01-05:/docker-image-intro.html</id><summary type="html">&lt;p class="first last"&gt;Podstawy tworzenia i wykorzystania obrazów na DockerHub i lokalnie do uruchomienia aplikacji.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Po napisaniu pliku Dockerfile (wcześniejszy post) podstawowe operacje na kontenerach to:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;zalogowanie na zdalnej maszynie (docker-machine)&lt;/li&gt;
&lt;li&gt;utworzenie obrazu&lt;/li&gt;
&lt;li&gt;otagowanie obrazu&lt;/li&gt;
&lt;li&gt;umieszczenie obrazu w zdalnym repozytorium DockerHub&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obrazy można też tworzyć lokalnie bez &lt;em&gt;docker-machine&lt;/em&gt; i wtedy tworzone są na maszynie na której jesteśmy bezpośrednio zalogowani.
Nie jest też konieczne korzystanie z &lt;em&gt;dockerhub&lt;/em&gt; i można przechowywać obrazy lokalnie na maszynie na której są uruchamiane lub umieszczać w prywatnym repozytorium. Dla publicznie dostępnych obrazów &lt;em&gt;dockerhub&lt;/em&gt; jest jednak rozwiązaniem najbardziej wygodnym.&lt;/p&gt;
&lt;div class="section" id="zalogowanie-na-zdalnej-maszynie-docker-machine"&gt;
&lt;h2&gt;Zalogowanie na zdalnej maszynie (docker-machine)&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Docker-machine&lt;/em&gt; umożliwia wykonywanie na zdalnym hoście obrazów &lt;em&gt;dockera&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Podstawowa instrukcja to:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
eval $(docker-machine env nazwa_hosta)
&lt;/pre&gt;
&lt;p&gt;Nazwę dostępnych hostów można otrzymać przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker-machine ls
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="tworzenie-kontenera"&gt;
&lt;h2&gt;Tworzenie kontenera&lt;/h2&gt;
&lt;p&gt;Komenda tworząca obraz:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker build -t &amp;quot;KONTO_NA_DOCKERHUB/NAZWA_OBRAZU:TAG_PODSTAWOWY&amp;quot; LOKALIZACJA_DOCKERFILE
&lt;/pre&gt;
&lt;p&gt;czyli dla przykładu:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker build -t &amp;quot;piotrczaja/pyramid:1.7.3-R6&amp;quot; .
&lt;/pre&gt;
&lt;p&gt;tworzy obraz &lt;em&gt;pyramid&lt;/em&gt; docelowo umieszczany na dockerhub na koncie &lt;em&gt;piotrczaja&lt;/em&gt; i otagowany jako wersja &lt;em&gt;1.7.3-R6&lt;/em&gt;.
Zgodnie z przyjętą konwencją &lt;em&gt;1.7.3&lt;/em&gt; to wersja pakietu &lt;em&gt;pyramid&lt;/em&gt; a &lt;em&gt;R6&lt;/em&gt; to numer wydania tego obrazu.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="otagowanie-kontenera"&gt;
&lt;h2&gt;Otagowanie kontenera&lt;/h2&gt;
&lt;p&gt;Pierwotne tagi obrazu najczęściej odnoszą się do wersji. Istnieje też tag specjalny: &lt;em&gt;latest&lt;/em&gt;, który umożliwia brak podania tagu przy pobieraniu. Docker nie pobiera automatycznie najnowszej wersji, lecz tag ten trzeba utworzyć i aktualizować ręcznie by wskazywał na najnowszą wersję obrazu.&lt;/p&gt;
&lt;p&gt;Tworzenie taga:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker tag ID_OBRAZU KONTO_NA_DOCKERHUB/NAZWA_OBRAZU:TAG
&lt;/pre&gt;
&lt;p&gt;Argument &lt;em&gt;-t&lt;/em&gt; polecenia &lt;em&gt;build&lt;/em&gt; pozwala na jednoczesne oznaczenie wieloma tagami jednego obrazu ale jest to w praktyce rzadko stosowane bo dodatkowe tagi dodaje się dopiero po sprawdzeniu obrazu.&lt;/p&gt;
&lt;p&gt;Dla &lt;em&gt;latest&lt;/em&gt; było by:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker tag ID_OBRAZU piotrczaja/pyramid:latest
&lt;/pre&gt;
&lt;p&gt;W ten sposób wiele tagów wskazuje na jeden obraz i aby go usunąć trzeba dodać opcję &lt;em&gt;--force&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="umieszczenie-obrazu-na-dockerhub"&gt;
&lt;h2&gt;Umieszczenie obrazu na DockerHub&lt;/h2&gt;
&lt;p&gt;Logowanie na dockerhub następuje przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker login
&lt;/pre&gt;
&lt;p&gt;bez podania dodatkowych argumentów.&lt;/p&gt;
&lt;p&gt;Aktualizację wszystkich wersji danego obrazu umieszczonych lokalnie na dockerhub wykonać można przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker push KONTO_NA_DOCKERHUB/NAZWA_OBRAZU
&lt;/pre&gt;
&lt;p&gt;czyli dla podanego przykładu:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker push piotrczaja/pyramid
&lt;/pre&gt;
&lt;p&gt;Wyśle to wszystkie lokalne obrazy &lt;em&gt;pyramid&lt;/em&gt; na dockerhub. Dodanie tagów spowoduje, że wysłany zostanie tylko wybrany obraz, np.:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker push piotrczaja/pyramid:latest
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="tools"/><category term="admin-tool"/><category term="linux"/><category term="docker"/></entry><entry><title>[40] Przenoszenie listy zainstalowanych pakietów .deb pomiędzy komputerami</title><link href="https://notatnik.akademicki.eu/copy-debian-installation.html" rel="alternate"/><published>2016-12-12T22:00:00+01:00</published><updated>2016-12-12T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-12-12:/copy-debian-installation.html</id><summary type="html">&lt;p class="first last"&gt;DSELECT pozwala na skopiowanie listy pakietów Debiana na jednym hoście i ich instalację na innym.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Operacja wymaga zainstalowania pakietu &lt;em&gt;dselect&lt;/em&gt; który nie jest częścią standardowej instalacji.&lt;/p&gt;
&lt;p&gt;Po zainstalowaniu należy odświeżyć jego bazę pakietów:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dselect update
&lt;/pre&gt;
&lt;p&gt;Od tego czasu można przenosić listy zainstalowanych pakietów.&lt;/p&gt;
&lt;p&gt;Na źródłowym komputerze:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dpkg --get-selections &amp;gt; lista_pakietow.txt
&lt;/pre&gt;
&lt;p&gt;Na docelowym komputerze:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dselect update
dpkg --set-selections &amp;lt; lista_pakietow.txt
&lt;/pre&gt;
&lt;p&gt;Od tego czasu po uruchomieniu np. &lt;em&gt;aptitude&lt;/em&gt; lista pakietów do instalacji zostanie powiększona o te które były na komputerze źródłowym a nie ma ich na komputerze docelowym.&lt;/p&gt;
</content><category term="tools"/><category term="admin-tool"/></entry><entry><title>[39] InLine 8x SATA (HBA)</title><link href="https://notatnik.akademicki.eu/inline-hba-8x.html" rel="alternate"/><published>2016-12-01T22:00:00+01:00</published><updated>2016-12-01T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-12-01:/inline-hba-8x.html</id><summary type="html">&lt;p class="first last"&gt;HBA pozwalające podłączyć aż 8 dysków SATA III, lecz ze względu na wydajność najlepiej jeśli nie korzysta się z więcej niż jednego jednocześnie.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;InLine (76617G) jest urządzeniem hba dającym możliwość podłączenia 8 dysków SATA III.&lt;/p&gt;
&lt;p&gt;HBA pracuje z wykorzystaniem PCI-E 2.0 x1 przez co nie daje dużej wydajności, lecz w przypadku gdy podłączone są pojedyncze dyski z których nie korzysta się jednocześnie spełnia swoje zadanie.&lt;/p&gt;
&lt;p&gt;Z uwagi na wydajność raczej nie nadaje się z założenia na nowoczesne systemy plików typu ZFS czy BTRFS założone na wielu dyskach.&lt;/p&gt;
&lt;p&gt;Urządzenie w trybie AHCI nie wymaga instalacji żadnych sterowników (sprawdzone na linux 4.4+)&lt;/p&gt;
</content><category term="tools"/><category term="admin-tool"/></entry><entry><title>[38] HighPoint Rocket640L</title><link href="https://notatnik.akademicki.eu/rocket640l.html" rel="alternate"/><published>2016-11-28T22:00:00+01:00</published><updated>2016-11-28T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-11-28:/rocket640l.html</id><summary type="html">&lt;p class="first last"&gt;HighPoint Rocket640L jest tanim rozwiązaniem zwiększającym o 4 sztuki ilość podłączanych dysków SATA III.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;HighPoint Rocket640L pracuje jako urządzenie nie wymagające sterowników w trybie AHCI (sprawdzone na linux 4.4+).&lt;/p&gt;
&lt;p&gt;Pozwala na podłączenie 4 dysków SATA III.&lt;/p&gt;
&lt;p&gt;Nie posiada funkcjonalności RAID będąc zwykłym HBA. Dzięki temu nie trzeba wymieniać firmware by się tej funkcjonalności pozbyć.&lt;/p&gt;
&lt;p&gt;Potencjalnie nadaje się więc na ZFS czy BTRFS dając bezpośredni dostęp do dysków bez używania trybu JBOD w RAID, który nie zawsze spełni swoje zadanie.&lt;/p&gt;
&lt;p&gt;Pracuje na PCI-E 2.0 x4 co sprawia, że wydajność jest zadowalająca dla większości zastosowań.&lt;/p&gt;
</content><category term="tools"/><category term="admin-tool"/></entry><entry><title>[37] Modernizacja stacji roboczej</title><link href="https://notatnik.akademicki.eu/home-workstation-2016-update1.html" rel="alternate"/><published>2016-11-22T22:00:00+01:00</published><updated>2016-11-22T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-11-22:/home-workstation-2016-update1.html</id><summary type="html">&lt;p class="first last"&gt;Domowa stacja robocza została przeniesiona do nowej obudowy Thermaltake Core X9 zapewniającej lepsze chłodzenie oraz bardziej cichą pracę.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Stacja robocza doczekała sie modernizacji&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;img alt="Stacja robocza (obudowa Thermaltake Core X9)" src="https://notatnik.akademicki.eu/images/0037_thermaltake2016.png" /&gt;
&lt;p class="caption"&gt;Stacja robocza (obudowa Thermaltake Core X9)&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nowa obudowa to Thermaltake Core X9.
Zapewnia dobre chłodzenie powietrzem przy akceptowalnym hałasie.
Całość jest mało szczelna aktustycznie więc wymaga to cichych wentylatorów.
Chłodzenie zapewniają wentylatory:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;1 x 200 mm doprowadzające powietrze do środka od przodu&lt;/li&gt;
&lt;li&gt;2 x 120 mm doprowadzające powietrze z prawej strony obudowy do dolnej jej części (w okolice dysków)&lt;/li&gt;
&lt;li&gt;1 x 140 mm sterowany bezpośrednio przez płytę główną i odprowadzający ciepło z okolic procesora w tył&lt;/li&gt;
&lt;li&gt;1 x 120 mm odprowadzające powietrze z dolnej części (pod płytą główną, głównie chłodzi dyski)&lt;/li&gt;
&lt;li&gt;8 x 120 mm odprowadzające powietrze do góry przez pokrywę obudowy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obudowa wykonana jest ze stali i sama waży około 17 kg.&lt;/p&gt;
</content><category term="tools"/><category term="workstation"/><category term="infrastructure"/><category term="hardware"/></entry><entry><title>[36] PgAdmin4: instalacja (wheels)</title><link href="https://notatnik.akademicki.eu/pgadmin4-wheels-install.html" rel="alternate"/><published>2016-10-02T16:00:00+02:00</published><updated>2016-10-02T16:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-10-02:/pgadmin4-wheels-install.html</id><summary type="html">&lt;p class="first last"&gt;PgAdmin4 jest aplikacją wykonaną we Flask-u i w przeciwieństwie do PgAdmin3 może być instalowana na zdalnym serwerze lub na lokalnym desktop-ie. Wersja 1.0 nie zawiera repozytoriów DEB i trzeba to oprogramowanie instalować ręcznie.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Pakiet należy pobrać z postgresql.org (np. dla wersji 1.0):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
wget https://ftp.postgresql.org/pub/pgadmin3/pgadmin4/v1.0/pip/pgadmin4-1.0-py2-none-any.whl
&lt;/pre&gt;
&lt;p&gt;i zainstalować w virtualenv za pomocą &lt;em&gt;pip&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pip install pgadmin4-1.0-py2-none-any.whl
&lt;/pre&gt;
&lt;p&gt;Aby aplikacja była świadoma uruchamiania w tym środowisku należy na początku pgAdmin4.wsgi dodać:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
activate_this = '/path/to/virtualenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
&lt;/pre&gt;
&lt;p&gt;Aplikacja w obecnie dostępnych pakietach wheels działa jako Python 2.7 i w najprostszym przypadku instalacji wykorzystuje apache2.
Z poziomu &lt;em&gt;apache&lt;/em&gt; uruchamiana jest przez mod_wsgi.
Aby &lt;em&gt;apache&lt;/em&gt; mógł uruchamiać program należy do konfiguracji dodać:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
WSGIDaemonProcess pgadmin processes=1 threads=25
WSGIScriptAlias / /path/to/virtualenv/.../pgAdmin4.wsgi

&amp;lt;Directory /path/to/virtualenv/.../site-packages/pgadmin4&amp;gt;
    WSGIProcessGroup pgadmin
    WSGIApplicationGroup %{GLOBAL}
    Require all granted
&amp;lt;/Directory&amp;gt;
&amp;lt;Directory /path/to/userdir/.pgadmin/&amp;gt;
    AllowOverride All
    Require all granted
&amp;lt;/Directory&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Po zainstalowaniu aplikacji należy zrobić linka symbolicznego z &lt;em&gt;/var/www/.pgadmin/&lt;/em&gt; do &lt;em&gt;$HOME/.pgadmin&lt;/em&gt;.
Załatwi to różnice ścieżek podczas uruchamiania przez &lt;em&gt;apache2&lt;/em&gt; i &lt;em&gt;USER&lt;/em&gt; oraz zabezpieczy dane przed przypadkowym usunięciem.&lt;/p&gt;
&lt;p&gt;Aby zainicjować bazę danych i móc wprowadzić login i hasło administratora należy wykonać:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
python setup.py install
&lt;/pre&gt;
&lt;p&gt;Należy również zmienić uprawnienia do katalogu &lt;em&gt;.pgadmin&lt;/em&gt; zawierającego dane aplikacji.&lt;/p&gt;
&lt;p&gt;Po skopiowaniu:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cp config.py config_local.py
&lt;/pre&gt;
&lt;p&gt;należy uzupełnić podstawową konfigurację zgodnie z instrukcjami na stronie postgresql.org i w samym pliku.&lt;/p&gt;
&lt;p&gt;Po tych czynnościach można zalogować się na stronie www i dokończyć konfigurację połączeń z serwerami postgresql itd.&lt;/p&gt;
</content><category term="tools"/><category term="postgresql"/><category term="admin-tool"/><category term="software"/><category term="admin"/></entry><entry><title>[35] IPython: podstawowa konfiguracja w kontenerze (docker)</title><link href="https://notatnik.akademicki.eu/ipython-docker-container-intro.html" rel="alternate"/><published>2016-09-05T21:00:00+02:00</published><updated>2016-09-16T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-09-05:/ipython-docker-container-intro.html</id><summary type="html">&lt;p class="first last"&gt;Dostępne oficjalne obrazy dla docker/jupyter są bardzo dobre ale zbyt uniwersalne i nie zawsze odpowiadają lokalnym potrzebom. Na ich oraz innych podstawie powstał obraz &lt;em&gt;piotrczaja/jupyter-ipython&lt;/em&gt; , który m.in. korzysta z komunikacji z PostgreSQL (repozytorium: postgresql.org) oraz innych mniej popularnych narzędzi, rozszerzeń i bibliotek. Obraz ogranicza również ilość instalowanych domyślnie bibliotek pythona.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Kontener budowany jest na oficjalnych oraz prywatnych obrazach w łańcuchu:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
debian [dockerhub] -&amp;gt; python:slim [dockerhub] -&amp;gt;
-&amp;gt; piotrczaja/jupyter-ipython-sqlalchemy:X.X.X-X.X.X-X.X.X-RX [dockerhub] -&amp;gt;
-&amp;gt; kontener skonfigurowany [obraz tworzony lokalnie]
&lt;/pre&gt;
&lt;p&gt;Debian wykorzystywany jest, pomimo dużego rozmiaru podstawowego obrazu, ze względu na łatwą rozbudowę oraz aktualność pakietów (m.in. repozytorium postgresql.org).
&lt;em&gt;Python:slim&lt;/em&gt; jest najnowszą, dostępną przy budowie obrazu, minimalistyczną instalacją Pythona w gałęzi 3.
Obraz &lt;em&gt;piotrczaja/jupyter-ipython-sqlalchemy&lt;/em&gt; otagowany jest wykorzystaną wersją &lt;em&gt;jupyter&lt;/em&gt;, &lt;em&gt;ipython&lt;/em&gt; i &lt;em&gt;sqlalchemy&lt;/em&gt; oraz kolejnym numerem &lt;em&gt;wydania&lt;/em&gt; i nie uwzględnia opisu &lt;em&gt;latest&lt;/em&gt;, więc wymaga podania pełnego taga przy pobieraniu.
Wraz z obrazem &lt;em&gt;piotrczaja/jupyter-ipython-sqlalchemy&lt;/em&gt; instalowane są pakiety: psycopg2, sqlalchemy, simplejson, jupyter [ipython] wraz z zależnościami.&lt;/p&gt;
&lt;p&gt;Obraz budowany lokalnie tworzony jest w oparciu o plik Dockerfile:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# Docker custom ipython image

FROM    piotrczaja/jupyter-ipython-sqlalchemy:X.X.X-X.X.X-X.X.X-RX

MAINTAINER Piotr Czaja &amp;lt;czaja_piotr&amp;#64;o2.pl&amp;gt;
ENV     HOME                /home/ipython
ENV     EXECDR              $HOME/bin
ENV     SERVDR              /srv
ENV     CONFDR              $SERVDR/confs
ENV     DATADR              $SERVDR/files
ENV     BOOKDR              $SERVDR/books
ENV     USRLOC              /usr/local
ENV     ETCDIR              $USRLOC/etc/jupyter
ENV     SHARED              $USRLOC/share/jupyter
ENV     ROOTDR              /root
ENV     DEBIAN_FRONTEND     noninteractive

USER    root

ENV TZ=Europe/Warsaw
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &amp;amp;&amp;amp; echo $TZ &amp;gt; /etc/timezone


COPY    ./bin/                  $EXECDR
COPY    ./config/               $CONFDR
COPY    ./data/                 $DATADR
COPY    ./notebooks/            $BOOKDR

RUN    pip install --no-cache-dir -r $CONFDR/python_requirements.txt

RUN chmod +x $EXECDR/start-notebook.sh  &amp;amp;&amp;amp; \
    chown -R ipython:ipython $HOME      &amp;amp;&amp;amp; \
    chown -R ipython:ipython $ETCDIR    &amp;amp;&amp;amp; \
    chown -R ipython:ipython $SHARED    &amp;amp;&amp;amp; \
    chown -R ipython:ipython $EXECDR    &amp;amp;&amp;amp; \
    chown -R ipython:ipython $CONFDR    &amp;amp;&amp;amp; \
    chown -R ipython:ipython $DATADR    &amp;amp;&amp;amp; \
    chown -R ipython:ipython $BOOKDR

EXPOSE 8080

USER    ipython
WORKDIR $BOOKDR
&lt;/pre&gt;
&lt;p&gt;Użytkownik przeznaczony do uruchamiania ipython-notebook to: &lt;em&gt;ipython&lt;/em&gt;. Posiada on wszelkie konieczne uprawnienia.&lt;/p&gt;
&lt;p&gt;Konfiguracja kopiowana jest z lokalnego katalogu &lt;em&gt;config&lt;/em&gt; do katalogu kontenera: &lt;em&gt;/srv/confs/&lt;/em&gt;.
Dane wykorzystywane do obliczeń kopiowane są z lokalnego katalogu &lt;em&gt;data&lt;/em&gt; do katalogu kontenera: &lt;em&gt;/srv/files/&lt;/em&gt;.
IPython notebooks uruchamiane w kontenerze kopiowane są z lokalnego katalogu &lt;em&gt;notebooks&lt;/em&gt; do katalogu kontenera &lt;em&gt;/srv/books/&lt;/em&gt;.
Skrypty uruchomieniowe aplikacji powinny znajdować się w lokalnym katalogu &lt;em&gt;bin&lt;/em&gt; i są kopiowane do katalogu kontenera &lt;em&gt;/home/ipython/bin/&lt;/em&gt;.
Strefa czasowa ustawiona jest na Europe/Warsaw.&lt;/p&gt;
&lt;p&gt;Plik &lt;em&gt;database_creds.json&lt;/em&gt; znajdujący się w katalogu lokalnym &lt;em&gt;config&lt;/em&gt; zawiera dane potrzebne do połączenia z bazą danych postgresql:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
{
    &amp;quot;user_name&amp;quot;: &amp;quot;Użytkownik bazy danych&amp;quot;,
    &amp;quot;password&amp;quot;: &amp;quot;Hasło użytkownika bazy danych&amp;quot;,
    &amp;quot;host_name&amp;quot;: &amp;quot;nazwa lub IP hosta bazy danych&amp;quot;,
    &amp;quot;port_number&amp;quot;: &amp;quot;Port na którym nasłuhuje postresql&amp;quot;,
    &amp;quot;db_name&amp;quot;: &amp;quot;Nazwa bazy danych&amp;quot;
}
&lt;/pre&gt;
&lt;p&gt;Szablon pliku &lt;em&gt;database_creds.json&lt;/em&gt; to &lt;em&gt;database_creds.templ&lt;/em&gt;.
Repozytorium git-a powinno zawierać wpis &amp;quot;database_creds.json&amp;quot; w pliku &amp;quot;.gitignore&amp;quot;.&lt;/p&gt;
&lt;p&gt;Plik &lt;em&gt;docker-compose.yml&lt;/em&gt; powienien zawierać przynajmniej:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
version: '2.0'

services:

    ipython:
        build:
            context: .
            dockerfile: ./Dockerfile
        container_name: ipython-ct
        ports:
            - 8001:8080
        command: bash -c &amp;quot;/home/ipython/bin/start-notebook.sh&amp;quot;

volumes: {}

networks: {}
&lt;/pre&gt;
&lt;p&gt;Plik &lt;em&gt;config/python_requirements.txt&lt;/em&gt; zawiera wszystkie dodatkowe pakiety pythona.
Dla powyższego przykładu należy w nim umieścić conajmniej:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
ipython-sql
&lt;/pre&gt;
&lt;p&gt;Jupyter w kontenerze uruchamiany jest skryptem &lt;em&gt;bin/start-notebook.sh&lt;/em&gt;, który w minimalistycznej postaci może przybrać postać:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
#!/bin/bash

mkdir /home/ipython/.jupyter
mv /srv/confs/jupyter_notebook_config.py /home/ipython/.jupyter/jupyter_notebook_config.py
jupyter notebook
&lt;/pre&gt;
&lt;p&gt;Plik konfiguracyjny &lt;em&gt;jupyter_notebook_config.py&lt;/em&gt; umożliwia elastyczną konfigurację.
Plik konfiguracyjny mozna wygenerować za pomocą polecenia:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
jupyter notebook --generate-config
&lt;/pre&gt;
&lt;p&gt;Każdy &lt;em&gt;IPython-notebook&lt;/em&gt; rozpoczyna się standardową treścią:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
import psycopg2
import sqlalchemy
import simplejson
%load_ext sql

%config SqlMagic.displaylimit = 5
&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Psycopg2&lt;/em&gt; jest koniecznym składnikiem do połączenia z bazą danych PostgreSQL.
&lt;em&gt;SqlAlchemy&lt;/em&gt; jest standardowym pakietem ORM w języku Python.
&lt;em&gt;SimpleJson&lt;/em&gt; pozwala m.in. na odczytanie danych połączenia i konfiguracji.
Kolejne linie służą do obsługi pakietu &lt;em&gt;iPython-SQL&lt;/em&gt; który pozwala na wykonywanie bezpośrednich zapytań do bazy danych.
Pakiet &lt;em&gt;iPythonSQL&lt;/em&gt; udostępnia polecenia:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
%sql
%%sql
&lt;/pre&gt;
&lt;p&gt;w notatniku.
Obecnie przy uruchomieniu rozszerzenia pakiet powoduje wypisanie wielu ostrzeżeń (brak aktualizacji do najnowszej wersji ipythona) ale działa normalnie.&lt;/p&gt;
&lt;p&gt;Dla połączenia z bazą danych należy odczytać dane logowania z pliku &lt;em&gt;json&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
with open(&amp;quot;/srv/confs/database_creds.json&amp;quot;) as db_con_file:
    creds = simplejson.loads(db_con_file.read())
&lt;/pre&gt;
&lt;p&gt;Teraz można połączyć się już z bazą danych, więc potrzebne są parametry połączenia:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
connect_to_db = 'postgresql+psycopg2://' + \
                creds['user_name'] + ':' + creds['password'] + '&amp;#64;' + \
                creds['host_name'] + ':' + creds['port_number'] + '/' + \
                creds['db_name']
&lt;/pre&gt;
&lt;p&gt;Zmienna connect_to_db może zostać wykorzystana albo bezpośrednio do połączenia przez ipython-sql:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
%sql $connect_to_db
&lt;/pre&gt;
&lt;p&gt;albo do utworzenia sesji sqlalchemy.&lt;/p&gt;
&lt;p&gt;Dla sprawdzenia połączenia można wypisać zawartość dowolnej tabeli bazy danych z serwera postgresql:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
%%sql

select * from &amp;lt;tabela&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Jeśli tabela zostanie wyświetlona w kolejnej komórce to mamy poprawnie skonfigurowana instalację &lt;em&gt;IPython&lt;/em&gt; z dostępem do bazy danych PostgreSQL.&lt;/p&gt;
</content><category term="tools"/><category term="docker"/><category term="python"/><category term="postgresql"/><category term="linux"/></entry><entry><title>[34] Docker: instalacja (generic driver)</title><link href="https://notatnik.akademicki.eu/docker-machine-generic-driver.html" rel="alternate"/><published>2016-08-27T22:00:00+02:00</published><updated>2016-08-27T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-08-27:/docker-machine-generic-driver.html</id><summary type="html">&lt;p class="first last"&gt;Docker-machine jest narzędziem dostępu do kontenerów na zdalnym hoście. Oprócz sterowników umożliwiających kontrolę nad środowiskiem dockera u dużych dostawców usług chmurowych istnieje też sterownik umożliwiający kontrolę każdego VPSa.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Podstawowym warunkiem jest nadanie poprzez &lt;em&gt;sudo&lt;/em&gt; wysokich uprawnień użytkownikowi, który zarządzać będzie kontenerami:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# visudo
%sudo   ALL=(ALL) NOPASSWD:ALL
&lt;/pre&gt;
&lt;p&gt;Może być to też dowolna inna grupa której użytkownik ten jest członkiem lub bezpośrednio użytkownik.&lt;/p&gt;
&lt;p&gt;Komunikacja z VPSem musi być po kluczu ssh bez hasła dla ww. użytkownika.
Należy zatem dodać odpowiedni wpis w .ssh/authorized_keys na zdalnym VPSie.&lt;/p&gt;
&lt;p&gt;Dla komunikacji z VPSem należy też odblokować port 2376 na firewallu:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# PORT: 2376 (DOCKER-MACHINE)
$IPTABLES -A INPUT -p tcp --dport 2376 -j ACCEPT
&lt;/pre&gt;
&lt;p&gt;Pobierz i zainstaluj pakiet &lt;em&gt;docker-engine&lt;/em&gt; z &lt;em&gt;https://apt.dockerproject.org/repo&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Następnie trzeba skonfigurować docker-machine z odpowiednim sterownikiem:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ docker-machine create --driver generic \
 --generic-ip-address my.host.com \
 --generic-ssh-user sudo-user \
   my.host.com
&lt;/pre&gt;
&lt;p&gt;Jeśli używasz VPN o adresie w prywatnych zakresach 172.X.X.X to most tworzony przez docker może pokryć się z używanymi już sieciami co doprowadzi do problemów w komunikacji.
Nie używaj /etc/default/docker z docker-engine bo jest on ignorowany.&lt;/p&gt;
&lt;p&gt;Zamiast tego dodaj odpowiedni wpis &lt;em&gt;&amp;quot;--bip=172.X.X.X/16&amp;quot;&lt;/em&gt; do /etc/systemd/system/docker.service, np.:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 \
          -H unix:///var/run/docker.sock \
          --storage-driver aufs \
          --tlsverify \
          --tlscacert /etc/docker/ca.pem \
          --tlscert /etc/docker/server.pem \
          --tlskey /etc/docker/server-key.pem \
          --label provider=generic \
          --bip=172.20.0.1/16
&lt;/pre&gt;
&lt;p&gt;Sprawdź dostępność zdalnego hosta z docker:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker-machine ls
&lt;/pre&gt;
</content><category term="tools"/><category term="docker"/><category term="linux"/><category term="admin-tool"/></entry><entry><title>[33] Tablet: Wacom Bamboo (Arch Linux)</title><link href="https://notatnik.akademicki.eu/wacom-bamboo-tablet.html" rel="alternate"/><published>2016-08-23T22:00:00+02:00</published><updated>2016-08-23T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-08-23:/wacom-bamboo-tablet.html</id><summary type="html">&lt;p class="first last"&gt;Tablet Wacom Bamboo nie posiada tak rozbudowanych dedykowanych narzędzi pod linuksem jak na innych systemach operacyjnych jednak jego podstawowa funkjonalność jest łatwa do uzyskania.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Instalacja podstawowej funkcjonalności wymaga pakietu &lt;em&gt;xf86-input-wacom&lt;/em&gt;.
Po jego zainstalowaniu tablet jest gotowy do pracy.&lt;/p&gt;
&lt;p&gt;Domyślnie obsługuje wszystkie monitory i jeśli jest ich kilka to rozdzielczość pracy staje się mizerna.
Łatwo jednak przełączyć tablet na poszczególne monitory nawet bez instalowania dodatkowych narzędzi GUI.&lt;/p&gt;
&lt;p&gt;Najpierw sprawdź dostępne monitory i ich parametry:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
xrandr
&lt;/pre&gt;
&lt;p&gt;Ponieważ mam dwa monitory 24&amp;quot; stojące obok siebie to prawy ma położenie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
1920x1200+1920+0
&lt;/pre&gt;
&lt;p&gt;a lewy:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
1920x1200+0+0
&lt;/pre&gt;
&lt;p&gt;Można monitory określać też poprzez ich ID ale u mnie na Arch-u to nie działa.&lt;/p&gt;
&lt;p&gt;Teraz należy zidentyfikować IDs tabletu:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
xsetwacom --list devices
&lt;/pre&gt;
&lt;p&gt;co u mnie dało wynik:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Wacom Bamboo 16FG 6x8 Pen stylus    id: 8   type: STYLUS
Wacom Bamboo 16FG 6x8 Finger touch  id: 9   type: TOUCH
Wacom Bamboo 16FG 6x8 Pad pad       id: 10  type: PAD
Wacom Bamboo 16FG 6x8 Pen eraser    id: 14  type: ERASER
&lt;/pre&gt;
&lt;p&gt;Aby tablet ustawić do pracy na prawym monitorze należy wydać polecenie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
xsetwacom --set 8 MapToOutput &amp;quot;1920x1200+1920+0&amp;quot;
&lt;/pre&gt;
&lt;p&gt;zaś przełączenie go na lewy monitor:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
xsetwacom --set 8 MapToOutput &amp;quot;1920x1200+0+0&amp;quot;
&lt;/pre&gt;
&lt;p&gt;Po ustawieniu właściwych parametrów proporcje ruchu są już intuicyjne [brak skalowania obszaru roboczego tabletu na obraz dwóch połączonych monitorów] a rozdzielczość pracy zadowalająca.&lt;/p&gt;
</content><category term="tools"/><category term="admin-tools"/><category term="X11"/><category term="photo"/></entry><entry><title>[32] HighPoint RocketRaid 620 (sterowniki)</title><link href="https://notatnik.akademicki.eu/rocket-raid-620-driver.html" rel="alternate"/><published>2016-07-19T22:00:00+02:00</published><updated>2016-07-19T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-07-19:/rocket-raid-620-driver.html</id><summary type="html">&lt;p class="first last"&gt;Aktualizacja/instalacja modułów jądra dla HighPoint RocketRaid 620 jest uciążliwa w najnowszych jego wersjach. Przepis jak skompilować i uruchomić kartę RocketRaid 620 pod Proxmox (debian ze zmodyfikowanym jądrem 4.4.X).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Proxmox posługuje się zmodyfikowanym jądrem pomimo tego, że dystrybucja jest oparta na debianie. Postępowanie zbliźone jest zatem do tego jakie występuje na debianie/ubuntu.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;Zainstaluj pliki nagłówkowe jądra (linux headers).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Pobierz źródła do kompilacji sterownika:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
git clone https://github.com/clockfort/rr62x
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Skompiluj sterownik:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cd rr62x-linux-src-v1.xx/product/rr62x/linux/
make

Kompilacja zakończy się przerwaniem z komunikatem:
MODPOST 1 modules
WARNING: could not find .../.build/.him_magni.o.cmd for ...
...
make[1]: Leaving directory ...
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Przygotuj plik konfiguracyjnyc dkms.conf w /usr/src/rr62x-2.X:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
MAKE=&amp;quot;make -C product/rr62x/linux/ KERNELDIR=/lib/modules/${kernelver}/build&amp;quot;
CLEAN=&amp;quot;make -C product/rr62x/linux/ clean&amp;quot;
BUILT_MODULE_NAME=rr62x
DEST_MODULE_LOCATION=/kernel/drivers/scsi/
BUILT_MODULE_LOCATION=product/rr62x/linux/
PACKAGE_NAME=rr62x
PACKAGE_VERSION=1.2
AUTOINSTALL=yes
REMAKE_INITRD=yes
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;gdzie X to koleja liczba po aktualizacji.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;Skopiu sterownik i zainstaluj:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cd ../../..
cp -R . /usr/src/rr62x-2.X
dkms add -m rr62x -v 2.X
dkms build -m rr62x -v 2.X
dkms install -m rr62x -v 2.X
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;gdzie X to koleja liczba po aktualizacji.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Zrestartuj hosta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Po instalacji modułu nie mogłem go załadować jednak restart komputera spowodował dostępność karty.&lt;/p&gt;
</content><category term="tools"/><category term="admin-tool"/></entry><entry><title>[31] Ejabberd: instalacja na debianie (jessie)</title><link href="https://notatnik.akademicki.eu/ejabberd-install-intro.html" rel="alternate"/><published>2016-06-18T23:00:00+02:00</published><updated>2016-06-18T23:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-06-18:/ejabberd-install-intro.html</id><summary type="html">&lt;p class="first last"&gt;Instalacja serwera XMPP na debianie jest prosta, ale skrypty startowe nie do końca działają poprawnie i mogą stwarzać kłopoty. Wniosek: instalacja z pakietów ale konfiguracja wyłącznie ręczna.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Pakiety &lt;em&gt;debiana&lt;/em&gt; w repozytorium &lt;em&gt;backports&lt;/em&gt; są dla &lt;em&gt;jessie&lt;/em&gt; aktualne.&lt;/p&gt;
&lt;p&gt;Po zainstalowaniu ejabberd 16.X na debianie (jessie) skrypty instalacyjne nie tworzą poprawnie konta administracyjnego. Zamiast:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dpkg-reconfigure ejabberd
&lt;/pre&gt;
&lt;p&gt;należy ręcznie dodać reguły acl do pliku konfiguracyjnego, dające dostęp wybranego użytkownika do konfiguracji hosta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
admin:
     user:
            - &amp;quot;myuser&amp;quot;: &amp;quot;jabber.example.com&amp;quot;
&lt;/pre&gt;
&lt;p&gt;oraz wydać polecenie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
ejabberdctl register myuser jabber.example.com mypassword
&lt;/pre&gt;
&lt;p&gt;Dalsza konfiguracja następuje już normalnie.&lt;/p&gt;
&lt;p&gt;Certyfikaty SSL/TLS instaluje się w jednym pliku. Należy zatem do jednego pliku skopiować najpierw klucz prywatny serwera a potem certyfikaty serwera.
Można to zrobić nawet przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cat plik_klucza &amp;gt; plik_dla_ejabberd.pem
cat plik_certyfikatu_serwera &amp;gt;&amp;gt; plik_dla_ejabberd.pem
&lt;/pre&gt;
</content><category term="tools"/><category term="software"/><category term="admin"/><category term="jabber"/></entry><entry><title>[30] Kopia zapasowa konfiguracji VyOs</title><link href="https://notatnik.akademicki.eu/save-vyos-configuration.html" rel="alternate"/><published>2016-05-10T23:00:00+02:00</published><updated>2016-05-10T23:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-05-10:/save-vyos-configuration.html</id><summary type="html">&lt;p class="first last"&gt;Dystrybucje wyspecjalizowane takie jak &lt;em&gt;VyOs&lt;/em&gt; nie poddają się łatwo standardowym procedurom tworzenia kopii zapasowych. &lt;em&gt;Vyos&lt;/em&gt; posiada do tego celu wygodne polecenie &lt;em&gt;save&lt;/em&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;VyOs&lt;/em&gt; to bardzo dobre rozwiązanie na router (i tylko router).
Mankamentem jest jednak to, że z powodu zaawansowanego sposobu aktualizacji i braku typowych dla uniwersalnych dystrybucji linuksowych narzędzi, trudniej jest tworzyć kopie zapasowe.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;VyOs&lt;/em&gt; to jednak kompletne rozwiązanie, więc posiadamy do tego celu polecenie &lt;em&gt;save&lt;/em&gt;, które wywołujemy w trybie konfiguracyjnym (komenda: &lt;em&gt;config&lt;/em&gt; ):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
save scp://&amp;lt;user&amp;gt;:&amp;lt;passwd&amp;gt;&amp;#64;&amp;lt;host&amp;gt;/&amp;lt;file&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Czasami chcemy zachować konfigurację na samym routerze. Wtedy wystarczy wykonać:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
save &amp;lt;file&amp;gt;
&lt;/pre&gt;
</content><category term="tools"/><category term="router"/><category term="backup"/></entry><entry><title>[29] GitLab: pierwszy update</title><link href="https://notatnik.akademicki.eu/gitlab-first-update.html" rel="alternate"/><published>2016-04-23T23:00:00+02:00</published><updated>2016-09-05T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-04-23:/gitlab-first-update.html</id><summary type="html">&lt;p class="first last"&gt;&lt;em&gt;GitLab&lt;/em&gt; to ogromna ilość oprogramowania do utrzymania. Kiedy cokolwiek jest innego niż w pakiecie gitlab-ce to zaczynają się problemy (niezgodność wersji postgresql)&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Podczas zwykłej, mniej istotnej aktualizacji skrypty nie mogły przeprowadzić migracji z powodu tego, że baza danych jest na osobnym serwerze i jest ona w innej wersji niż standardowa w paczce debianowej (9.5.2 - 9.5.3).&lt;/p&gt;
&lt;p&gt;Po odmowie działania przez skrypty aktualizacyjne wykonałem:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
touch /etc/gitlab/skip-auto-migrations
&lt;/pre&gt;
&lt;p&gt;i to pozwoliło zaktualizować pakiet debianowy do końca.&lt;/p&gt;
&lt;p&gt;Następnie:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gitlab-ctl reconfigure
&lt;/pre&gt;
&lt;p&gt;przeprowadziło migracje bazy danych itp. (przynajmniej tak twierdzi dokumentacja na stronie projektu).&lt;/p&gt;
&lt;p&gt;Standardowo do aktualizacji służy:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gitlab-ctl upgrade
&lt;/pre&gt;
&lt;p&gt;ale nie dawał sobie rady z kopią zapasową bazy danych.&lt;/p&gt;
&lt;p&gt;Na koniec można przyrwócić domyślne działanie aktualizacji na przyszłość:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
rm /etc/gitlab/skip-auto-migrations
&lt;/pre&gt;
&lt;p&gt;Restart całego gitlaba wykonuje się przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gitlab-ctl restart
&lt;/pre&gt;
&lt;p&gt;Do wszystkiego trzeba użyć &lt;em&gt;sudo&lt;/em&gt; lub wykonywać polecenia jako &lt;em&gt;root&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Standardowa ręczna procedura aktualizacji powinna wyglądać ponoć tak:&lt;/p&gt;
&lt;p&gt;Najpierw trzeba zatrzymać aplikacje:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
gitlab-rake gitlab:backup:create
&lt;/pre&gt;
&lt;p&gt;Jeśli chcemy wykluczyć tworzenie kopii bazy danych:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gitlab-rake gitlab:backup:create SKIP=db
&lt;/pre&gt;
&lt;p&gt;Potem zainstalować pakiet:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pkg -i gitlab_x.x.x-omnibus.xxx.deb
&lt;/pre&gt;
&lt;p&gt;Potem dokonać migracji:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gitlab-ctl reconfigure
gitlab-ctl restart
&lt;/pre&gt;
&lt;p&gt;Czyli zmieściłem się prawie w standardowej procedurze.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AKTUALIZACJA:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dla zewnętrznej bazy danych (postgresql na dedykowanym serwerze) należy wykonać:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
ln -s /usr/bin/pg_dump /usr/bin/psql /opt/gitlab/bin/
&lt;/pre&gt;
&lt;p&gt;by gitlab korzystał z dostępnej w systemie wersji pd_dump, zgodnej z wersją serwera, zamiast dostarczonej razem z gitlab-.&lt;/p&gt;
</content><category term="tools"/><category term="gitlab"/><category term="software"/></entry><entry><title>[28] LinuxMint - dystrybucja w sam raz dla laptopa</title><link href="https://notatnik.akademicki.eu/mint-laptop-distro.html" rel="alternate"/><published>2016-03-28T23:00:00+02:00</published><updated>2016-03-28T23:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-03-28:/mint-laptop-distro.html</id><summary type="html">&lt;p class="first last"&gt;LinuxMint w zastosowaniu mobilnym na laptopie jest ciekawą propozycją będącą kompromisem pomiędzy elastycznością konfiguracji, stabilnością działania i aktualnością oprogramowania.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;LinuxMint jest mniej elastyczny od Archa w konfiguracji.
Daleko mu do stabilności Debiana.
Nie pozwala precyzyjnie kontrolować dostępnych zasobów sprzętowych z powodu wielu pakietów instalowanych przez nadmiarowe zależności i dlatego obciążenie komputera jest większe niż jest to konieczne.&lt;/p&gt;
&lt;p&gt;Jednak na laptopie ma tą przewagę, że jest od razu po instalacji gotowy do użycia, jest relatywnie stabilny i przystosowany do zastosowań na urządzeniach mobilnych.
W przeciwieństwie do instalacji typu Desktop nie trzeba tu najnowszych wydań oprogramowania czy też nieograniczonej konfiguracji.
Laptopy jako zamknięte rozwiązanie o małych relatywnie możliwościach modyfikacji i tak nie sprzyjają indywidualnym konfiguracjom.
Zarządzanie siecią działa poprawnie, przeglądarka i klient poczty są aktualne, konsola do pracy na zdalnym serwerze działa stabilnie, oprogramowanie biurowe nie jest bardzo stare.
Instalacja jest prosta, szybka i zapewnia szyfrowanie zasobów.
Prawdopodobieństwo zmiany dystrybucji na inną jest relatywnie wysokie lecz czas poświęcony na instalację i konfigurację nie jest długi więc można je zaakceptować.
Zatem spełnia większość wymagań stawianych mobilnemu komputerowi.&lt;/p&gt;
&lt;p&gt;W przypadku instalacji typu Desktop dystrybucja typu rolling release nie stanowi problemu.
Problemy wynikające z aktualizacji gdy nie ma czasu na naprawę, można tam rozwiązać sięgając po &amp;quot;awaryjny dysk&amp;quot; z obrazem systemu gotowym do pracy.
Na laptopie z dala od domu nie jest to już możliwe.
Modyfikacje debiana/ubuntu nie słyną ze stabilności - jednak na laptopie zachowują się w sposób bardziej kontrolowany niż rolling release.&lt;/p&gt;
&lt;p&gt;W przypadku laptopa i tak najczęściej pracuje się zdalnie na serwerze, a za pomocą oprogramowania lokalnego głównie konsumuje się treści.&lt;/p&gt;
&lt;p&gt;Z tych powodów na laptopie zagościł Linux Mint jednak na komputerze stacjonarnym i hoście wirtualnym ze środowiskiem edytorskim i programistycznym Arch pozostaje niezagrożony.&lt;/p&gt;
</content><category term="tools"/><category term="software"/><category term="admin"/><category term="linux"/></entry><entry><title>[27] Modernizacja domowego serwera</title><link href="https://notatnik.akademicki.eu/home-server-upgrade-2016-1.html" rel="alternate"/><published>2016-02-26T22:00:00+01:00</published><updated>2016-02-26T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-02-26:/home-server-upgrade-2016-1.html</id><summary type="html">&lt;p class="first last"&gt;Domowy serwer został przeniesiony do nowej obudowy LianLi PC-D8000 zapewniającej lepsze chłodzenie oraz bardziej cichą pracę.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Domowy serwer doczekał się aktualizacji.
Hałas który generował stał się na tyle dokuczliwy, że zmiany musiały nastąpić szybko.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;img alt="Serwer (obudowa LianLi PC-D8000)" src="https://notatnik.akademicki.eu/images/0027_server.png" /&gt;
&lt;p class="caption"&gt;Serwer (obudowa LianLi PC-D8000&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nowa obudowa to LianLi PC-D8000.
Zapewnia dobre chłodzenie powietrzem przy akceptowalnym hałasie.
Wygłuszenie przez dodatkowe maty pozwoliło obniżyć szum pracy oraz obniżyć wysokość generowanego dźwięku przez co hałas stał się mniej dokuczliwy.
Chłodzenie zapewniają wentylatory:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;6 x 120 mm doprowadzające powietrze do środka i bezpośrednio chłodzące dyski&lt;/li&gt;
&lt;li&gt;1 x 120 mm sterowany bezpośrednio przez płytę główną i odprowadzający ciepło z przegrody płyty głównej w tył&lt;/li&gt;
&lt;li&gt;2 x 120 mm odprowadzające powietrze z przegrody płyty głównej w górę&lt;/li&gt;
&lt;li&gt;3 x 140 mm odprowadzające powietrze do tyłu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obudowa jest lekka dzięki wykonaniu w całości z aluminium.&lt;/p&gt;
</content><category term="tools"/><category term="server"/><category term="infrastructure"/><category term="hardware"/></entry><entry><title>[26] Arch - uniwersalna dystrybucja desktopowa</title><link href="https://notatnik.akademicki.eu/arch-universal-distro.html" rel="alternate"/><published>2016-01-10T23:00:00+01:00</published><updated>2016-01-10T23:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2016-01-10:/arch-universal-distro.html</id><summary type="html">&lt;p class="first last"&gt;ArchLinux wielokrotnie powracał w różnych zastosowaniach - teraz ma szanse stać się domyślną dystrybucją desktopową.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Z ArchLinux korzystałem wielokrotnie - pierwszy raz dla instalacji aplikacji python-owych, gdy w Debianie nie było porozumienia co do sposobu zaimplementowania Python3.
Wygodniej było zainstalować Arch-a niż kompilować samemu interpreter i nie było przy tym zbędnych zależności oprogramowania.
Potem okazało się, że jest lepszym środowiskiem do pisania aplikacji w Python3 bo np. integracja w Vim-ie nie wymaga własnej kompilacji programu.&lt;/p&gt;
&lt;p&gt;Dawniej do instalacji na desktopie trudno się było jednak przekonać (w testowym okresie próbnym, po krótkim czasie, aktualizacja spowodowała utratę środowiska graficznego [sterowniki + konfiguracja Xów] - co okazało się dosyć karkołomne w naprawie).&lt;/p&gt;
&lt;p&gt;Przy niedostatkach OpenSUSE (liczba pakietów, zaawansowana konfiguracja niestandardowa) oraz po rozczarowaniu UbuntuStudio (i wielu innych podobnych, które nawet nie doczekały się instalacji) przyszedł czas na powrót Arch-a.&lt;/p&gt;
&lt;p&gt;Środowisko graficzne Cinnamon - nie jest co prawda specyficzne dla Arch-a - ale w minimalistycznej konfiguracji sprawdza się bardzo dobrze.&lt;/p&gt;
&lt;p&gt;Pomimo repozytoriów AUR, w których są często pakiety raczej podstawowe i mankamentu ich niestandardowej instalacji, Arch stał się w pełni konkurencyjną alternatywą dla najbardziej dojrzałych i znanych dystrybucji.&lt;/p&gt;
&lt;p&gt;Kwestią przyzwyczajenia i dyscypliny jest natomiast model rolling release.
Podstawowe oprogramowanie jest spakietowane w oficjalnych repozytoriach (np. sterowniki NVIDIA) co ułatwia użytkowanie.&lt;/p&gt;
</content><category term="tools"/><category term="software"/><category term="admin"/><category term="linux"/></entry><entry><title>[25] UbuntuStudio - dystrybucja dla zastosowań multimedialnych</title><link href="https://notatnik.akademicki.eu/ubuntustudio-multimedia-distro.html" rel="alternate"/><published>2015-12-10T23:00:00+01:00</published><updated>2015-12-10T23:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-12-10:/ubuntustudio-multimedia-distro.html</id><summary type="html">&lt;p class="first last"&gt;Zalety: skonfigurowane doślnie, aktualne jądro w wersji RT, ..... i nic więcej.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Po instalacji optymizm z poprawienie działającego linuxa w wersji RT szybko znika.
Reszta dystrybucji jest zaczęta ale nie skończona.
Jeśli nie ma precyzyjnie określonego adresata (co by tłumaczyło częściowo surowe wykończenie dystrybucji) to już lepiej samemu przeprowadzić konfigurację wybierając inną dystrybucję.&lt;/p&gt;
&lt;p&gt;Stabilność średnia, ale to może wynikać ze sposobu działania jądra RT skonfrontowanego z brakiem cierpliwości i problemami sprzętowymi.&lt;/p&gt;
&lt;p&gt;Pojawiająca się informacja o tym, że zainstalowane podczas instalacji systemu oprogramowanie jest już za stare, nie najlepiej świadczy o dopracowaniu (wygaszacz ekranu).&lt;/p&gt;
&lt;p&gt;Domyślne środowisko graficzne (XFCE/GTK3/Gnome) typowe i podstawowe - bez modyfikacji.&lt;/p&gt;
&lt;p&gt;W końcu okazuje się, że nie ma istotnych powodów by pozostać przy wyborze tej dystrybucji.&lt;/p&gt;
</content><category term="tools"/><category term="software"/><category term="admin"/><category term="linux"/></entry><entry><title>[24] OpenSUSE dystrybucja biurowa</title><link href="https://notatnik.akademicki.eu/opensuse-office-distro.html" rel="alternate"/><published>2015-11-12T23:00:00+01:00</published><updated>2015-11-12T23:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-11-12:/opensuse-office-distro.html</id><summary type="html">&lt;p class="first last"&gt;OpenSUSE jest dobrym rozwiązaniem dla instalacji biurowej. W zastosowaniach multimedialnych sprawuje się dostatecznie. Gdy wymagany jest mało popularny pakiet - trudno z nim żyć.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Gdy jest potrzebna instalacja biurowa (LibreOffice, GIMP, Firefox, +...) OpenSUSE jest bardzo dobrym rozwiązaniem.
Jest wygodny - wszystko można wyklikać.&lt;/p&gt;
&lt;p&gt;Gdy potrzebne jest jądro w wersji RT (czasu rzeczywistego) oraz nietypowe oprogramowanie dla zastosowań biurowych rozpoczynają się problemy.
Yast jest tak samo błogosławieństwem jak i przekleństwem.
Przy tym zmiany konfiguracyjne, typowe wyłącznie dla tej dystrybucji, są bardzo głębokie (dorównują nawet debianowemu EXIMowi itp.).&lt;/p&gt;
&lt;p&gt;Tak czy inaczej jest to najlepsza mi znana dystrybucja dla pracy pod KDE, które w przeciwieństwie do Kubuntu i podobnych zachowuje się tu stabilnie.
Wersja KDE nie zawsze jest najnowsza lecz można powiedzieć, że jest aktualna.&lt;/p&gt;
</content><category term="tools"/><category term="software"/><category term="admin"/><category term="linux"/></entry><entry><title>[23] EIZO ColorEdge CX 241</title><link href="https://notatnik.akademicki.eu/eizo-cx241.html" rel="alternate"/><published>2015-10-11T22:00:00+02:00</published><updated>2015-10-11T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-10-11:/eizo-cx241.html</id><summary type="html">&lt;p class="first last"&gt;Monitor EIZO ColorEdge CX 241 nie posiada wersji oprogramowania do kalibracji dla linuksa. Bez kalibracji zachowuje się przyzwoicie i posiada pamięć ustawień dzięki czemu można go skalibrować z innego systemu operacyjnego.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;EIZO ColorEdge CX 241 dobrze sprawdza się przy długiej pracy z komputerem nie tylko przy obrabianiu zdjęć.
Czerń jest czarna a kąty widzenia są bardzo duże bez zniekształcenia kolorów.&lt;/p&gt;
&lt;p&gt;Przy ustawieniach fabrycznych z opcją automatycznego sterowania jasnością obraz jest jasny.
W pracy w ciemnym pomieszczeniu za jasny.
Przy włączonym intensywnym oświetleniu lub dużym oknie zachowuje się bardzo dobrze.&lt;/p&gt;
&lt;p&gt;Brak oprogramowania do kalibracji pod linuksa (oprogramowanie klienckie wersji sieciowej można pominąć) nie przeszkadza w codziennej pracy.
Pamięć ustawień powoduje, że można go skalibrować z innego systemu operacyjnego (Mac, Windows).&lt;/p&gt;
&lt;p&gt;Dla zachowania odpowiedniej palety barw potrzebny jest DisplayPort.
Przy dwóch lub trzech monitorach potrzebna jest wydajna karta graficzna (3x Display Port) i nie ma co liczyć na jej pasywne chłodzenie.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="photo"/></entry><entry><title>[22] Instalacja APC Smart-UPS 1500</title><link href="https://notatnik.akademicki.eu/ups-apcupsd-intro.html" rel="alternate"/><published>2015-09-03T00:00:00+02:00</published><updated>2015-09-03T00:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-09-03:/ups-apcupsd-intro.html</id><summary type="html">&lt;p class="first last"&gt;Apcupsd okazał się najlepszym i wystarczającym wyborem dla zarządzania urządzeniami firmy APC. Oprogramowanie jest dostęne w większości dystrybucji linuksa. Jest stabilne i aktualizowane.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Pakiet &lt;em&gt;apcupsd&lt;/em&gt; jest wystarczającym rozwiązaniem dla zarządzania UPSem.
Jest dostępny na wiele platform.&lt;/p&gt;
&lt;p&gt;Działa stabilnie pod OpenSUSE, Arch, Debian, Proxmox, UbuntuStudio (jądro w wersji RT).
Banalna instalacja wymaga niewielkiej konfiguracji: UPSNAME, UPSCABLE, UPSTYPE, DEVICE:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
UPSNAME xxxxxxxx
UPSCABLE usb
UPSTYPE usb
DEVICE /dev/usb/hid/hiddev[0-15]
&lt;/pre&gt;
&lt;p&gt;W przypadku serwera najprościej sterować UPSem z gospodarza podłączonego przez USB.
Gospodarz udziela informacje o stanie zasilania wszystkim hostom wirtualnym.
W konfiguracji hosty wirtualne mają wpisane różne wartości czasu pracy na akumulatorze by ustalić właściwą sekwencję wyłączania w przypadku braku zasilania.&lt;/p&gt;
&lt;p&gt;Bardziej eleganckim rozwiązaniem byłby VPS zarządzający UPSem lecz w domowej instalacji jest to zbyteczna strata zasobów.&lt;/p&gt;
</content><category term="tools"/><category term="linux"/><category term="admin"/></entry><entry><title>[21] Docker - rozpoczęcie migracji</title><link href="https://notatnik.akademicki.eu/migration-to-docker.html" rel="alternate"/><published>2015-08-01T22:00:00+02:00</published><updated>2015-08-01T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-08-01:/migration-to-docker.html</id><summary type="html">&lt;p class="first last"&gt;Rozpoczęcie powolnej migracji projektów deweloperskich na architekturę opartą na mikro serwisach.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Konteneryzacja i mikro serwisy stanowią najbliższą przyszłość aplikacji.
Rozpoczynam migrację projektu &lt;em&gt;Storch&lt;/em&gt; na Docker-a, który jest obecnie najbardziej dojrzałą implementacją dla konteneryzacji.
Dla tego projektu przewidziane jest zapakowanie go w całości w jeden kontener.
Kolejne projekty powinny być już rozbite na mikro serwisy.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="hosting"/><category term="virtualization"/></entry><entry><title>[20] Migracja na PROXMOX</title><link href="https://notatnik.akademicki.eu/libvirt-to-proxmox-migration.html" rel="alternate"/><published>2015-07-10T22:30:00+02:00</published><updated>2015-07-10T22:30:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-07-10:/libvirt-to-proxmox-migration.html</id><summary type="html">&lt;p class="first last"&gt;Domowy serwer został zmigrowany z libvirt na Proxmox.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Migracja z libvirt na Proxmox spowodowała dużo lepsze zarządzanie siecią przez OpenvSwitch.
W libvirt po każdej aktualizacji trzeba było sprawdzać stan switchy i je odbudować w razie konieczności.
Proxmox bez problemu radzi sobie z OpenvSwitch.
Dodatkowo zapewnia wygodną obsługę przez interface WWW.&lt;/p&gt;
&lt;p&gt;Wygodne zarządzanie wirtualnymi hostami nie wymaga instalacji klienta.
Instalacja jest banalna lecz jakiekolwiek modyfikacje domyślnych wartości są karkołomne.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="hosting"/><category term="virtualization"/></entry><entry><title>[19] HighPoint RocketRaid 620</title><link href="https://notatnik.akademicki.eu/rocket-raid-620.html" rel="alternate"/><published>2015-06-04T22:00:00+02:00</published><updated>2015-06-04T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-06-04:/rocket-raid-620.html</id><summary type="html">&lt;p class="first last"&gt;HighPoint Rocket Raid 620 - kontroler RAID (2 porty SATA) - ubogie wsparcie dla linuksa.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Kontroler HighPoint RocketRaid 620 obsługuje poprawnie jeden dysk i osiągane przy tym transfery są przyzwoite.
Problemem jest długotrwałe wsparcie dla jądra linuksa przez samego producenta.
Sterowniki na stronie producenta są nieaktualne, sprzed kilku lat.
Aktualizacja sterowników oferowana przez użytkowników jest dostępna na &lt;em&gt;github&lt;/em&gt;.
Ostatnia wersja na &lt;em&gt;github&lt;/em&gt;: &lt;strong&gt;clockfort/rr62x&lt;/strong&gt;&lt;/p&gt;
</content><category term="tools"/><category term="admin-tool"/></entry><entry><title>[18] Zmiana atrybutów instancji klasy przed zapisem w sqlalchemy</title><link href="https://notatnik.akademicki.eu/sqlalchemy-setattr-note.html" rel="alternate"/><published>2015-05-12T22:00:00+02:00</published><updated>2015-05-12T22:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-05-12:/sqlalchemy-setattr-note.html</id><summary type="html">&lt;p class="first last"&gt;Setattr pozwala na modyfikowanie atrybutów instancji klasy, tak by sqlalchemy mogło zapisać finalną wersję nawet jeśli nie była ona wcześniej wprowadzona do bazy danych..&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Jeśli jest zdefiniowany model &lt;em&gt;pyramid&lt;/em&gt; z mapowniaem do bazy danych dla klasy w sqlalchemy to instancje tworzy się przez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
zmiennaA = NazwaKlasy(zmienna1=wartość, zmienna2=wartość)
&lt;/pre&gt;
&lt;p&gt;potem zapisać ją można w sesji:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
DBSession.add(zmiennaA)
DBSession.commit()
&lt;/pre&gt;
&lt;p&gt;co wprowadza ją trwale do bazy danych.&lt;/p&gt;
&lt;p&gt;Czasami jednak nie można zainicjować &lt;em&gt;zmiennejA&lt;/em&gt; ze wszystkimi wartościami atrybutów lub trzeba je utworzyć dynamicznie.
Wtedy można zainicjować instancję:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
zmiennaA = NazwaKlasy()
&lt;/pre&gt;
&lt;p&gt;i dalej zmienić jej artrybuty.&lt;/p&gt;
&lt;p&gt;Problem w tym że sqlalchemy zignoruje te modyfikacje i zapisze do bazy danych pusty rekord, beż żadnej wartości (poza domyślnymi).&lt;/p&gt;
&lt;p&gt;Można jednak wykorzystać &lt;em&gt;setattr()&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
setattr(zmiennaA, zmienna1, wartość)
&lt;/pre&gt;
&lt;p&gt;i wtedy wartości zmienionych atrybutów będą zapisane do bazy danych.&lt;/p&gt;
</content><category term="programming"/><category term="sqlalchemy"/><category term="pyramid"/></entry><entry><title>[17] Plagiat - wprowadzenie</title><link href="https://notatnik.akademicki.eu/plagiarism-intro.html" rel="alternate"/><published>2015-04-20T21:00:00+02:00</published><updated>2015-04-20T21:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-04-20:/plagiarism-intro.html</id><summary type="html">&lt;p class="first last"&gt;Prawo autorskie stało się nośnym hasłem nie tylko w środowisku artystów ale, z powodu technicznej łatwości powielania treści, również w środowisku akademickim. Pisząc referat, artykuł lub pracę dyplomową często autorzy zapominają o tym, że spoczywa na nich obowiązek oznaczenia treści, które zapożyczyli od innych.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Użycie obcych prac w publikacjach, stanowi nieodzowną część niemal każdej publikacji naukowej. Często jest to wręcz dobrze postrzegane i świadczy w pewnym stopniu o znajomości danej dziedziny. Taka powszechność stosowania powołań na obce publikacje może jednak prowadzić do nadużyć względem autorów. Koniecznym staje się więc zachowanie należytej troski w oznaczeniu własności intelektualnej oraz dorobku naukowego innych.&lt;/p&gt;
&lt;p&gt;Panuje powszechne przyzwolenie na wykorzystanie publikacji naukowych za powołaniem się na źródła lecz nie jest to regułą i należy dokładnie zaznajomić się z zasadami na jakich udostępniany jest materiał źródłowy. W Polsce kwestie własności i praw do utworu reguluje Ustawa o prawie autorskim i prawach pokrewnych z dnia 4 lutego 1994 r. (uwaga: wprowadzono już wiele zmian do ustawy od czasu jej wydania) - zainteresowanych odsyłam do treści ustawy.&lt;/p&gt;
&lt;p&gt;Narastająca liczba środków przekazu, postęp technologiczny oraz powszechny dostęp do utworów doprowadził do znacznych różnic w licencjach na podstawie jakich następuje rozpowszechnianie tych dóbr intelektualnych. Oprócz sytuacji, gdzie autor zastrzega sobie wszelkie prawa do utworu spotkać można licencje, w których autor zbywa się części swoich praw, zezwalając na rozpowszechnianie, modyfikację lub nawet użycie komercyjne utworów udostępnianych bezpłatnie.&lt;/p&gt;
&lt;p&gt;Do podstawowych licencji, gdzie następuje sprecyzowanie sposobu rozpowszechniania utworu na takich zasadach należą m.in. GPL (wraz z jej odmianami) oraz Creative Commons (wraz z różnymi jej wariantami). Liczba stosowanych licencji jest duża a wraz z upływem czasu powstają nowe ich rodzaje i odmiany.&lt;/p&gt;
&lt;p&gt;W tym artykule nie będziemy jednak poruszać kwestii różnych licencji na korzystanie z utworu lecz założymy, iż tak jak w większości przypadków następuje zasada, którą w uproszczeniu można by sformułować: za powołaniem się na autora oraz publikację źródłową.&lt;/p&gt;
&lt;div class="section" id="co-oznaczac"&gt;
&lt;h2&gt;Co oznaczać?&lt;/h2&gt;
&lt;p&gt;Kiedy już wiemy jak oznaczyć źródło pierwotne dla publikacji, pozostaje jeszcze główne pytanie: kiedy je oznaczyć?&lt;/p&gt;
&lt;p&gt;Niejednokrotnie jest sprawą trudną poza oczywistym przypadkiem cytowania dosłownego wytyczyć granicę pomiędzy przypadkiem, gdy tekst stanowi indywidualny wkład autora a przypadkiem, gdy tekst wynika w sposób bezpośredni lub pośredni z innego dzieła.&lt;/p&gt;
&lt;p&gt;Aby omówienie miało charakter jak najbardziej zupełny zacznijmy od cytowania dosłownego. W tym przypadku nie ma żadnych problemów z decyzją, gdyż powołanie dosłowne stanowi wierne odzwierciedlenie oryginału i zawsze musi być oznaczone w cudzysłowach z odwołaniem do źródła. Pewną trudność mogą sprawiać przypadki w których napotykamy błędy logiczne lub językowe. Jeśli więc decydujemy się na dosłowne przytoczenie, to pod żadnym pozorem nie można poprawiać tych tekstów, gdyż przestaną być wierne oryginałowi. Pozornie nie wydaje się to być istotne w przypadku niewielkich korekt, lecz problem pojawi się wtedy gdy inny autor zaufa naszej dokładności i skorzysta z takiego cytowania podając odwołanie nie do naszej publikacji a do rzeczywistego źródła tekstu.&lt;/p&gt;
&lt;p&gt;Cóż więc można zrobić? Jedną z możliwości jest wykorzystanie przypisu dolnego na komentarz lub poprawną treść. W przypadku krótkich dopowiedzeń oraz wtrąceń dopuszcza się stosowanie zapisu typu [przyp. tłumacza], lecz są to przypadki dość sporadyczne. Sytuacja stosowania takiego zapisu występuje najczęściej, gdy uzupełniamy treści tak, aby zachowały sens tekstu oryginalnego po wyjęciu z niego ograniczonego wielkością cytowanego fragmentu, lub w przypadku wspomnianych już tłumaczeń, gdy następuje potrzeba dopowiedzenia treści, którą trudno wprost przetłumaczyć.&lt;/p&gt;
&lt;p&gt;Zestawienia statystyczne, liczby, wskaźniki i mierniki będące częścią publikacji lecz nie będące jej wynikiem stanowią drugą grupę. Choć jako ciągi znaków stanowią bardzo niewielką część tekstu to jest to jednak fragment bardzo istotny. Błędem byłoby umieszczać wielkości wyrażone w liczbach w cudzysłowach lecz zawsze w takim przypadku należy zaznaczyć jawnie w tekście źródło ich pochodzenia lub zastosować ten sam sposób oznaczeń co w przytoczeniach.&lt;/p&gt;
&lt;p&gt;Działanie takie nie tylko chroni prawa autorów opracowań źródłowych lecz również działa na korzyść samego tekstu, gdyż pozwala na ominięcie dowodów i argumentacji stosownych do tego typu danych i pozwolą powołać się na same ich wyniki użyte w kontekście publikacji.&lt;/p&gt;
&lt;p&gt;W przypadku tekstów nam znanych często wydaje nam się, iż znamy je na pamięć. Stosujemy jednak w tych fragmentach środki wyrazu odzwierciedlające naszą osobowość, które nie są zgodne z ich pierwowzorem w oryginalnym źródle. W takim przypadku, a także w razie niedostępności oryginalnego źródła, gdy jednak pamiętamy jego fragmenty, musimy postąpić inaczej niż w cytowaniu dosłownym.&lt;/p&gt;
&lt;p&gt;W literaturze spotkać można, i wydaje się to być środek najodpowiedniejszy, użycie formy pochyłej pisma. Wyraźnie nie jest ono cytowaniem dosłownym lecz wystarczająco wyróżnia się z tekstu. Nie powinno stanowić też błędu skomentowanie formy oraz pochodzenia tekstu w przypisie dolnym stosownie do indywidualnego przypadku.&lt;/p&gt;
&lt;p&gt;Kolejną grupę stanowią typologie i klasyfikacje, które bardzo często pojawiają się w publikacjach naukowych. Do grupy tej można zaliczyć również wyszczególnienia czynników lub argumentów oraz rankingi będące wynikiem zastosowania oryginalnego kryterium oceny. W takich przypadkach należy postępować jak z przytoczeniami. Cechą nową w zapisie tego rodzaju informacji jest to, iż przeważnie stanowią one listy pozycji. Ta forma jednak nie zmienia sposobu postępowania z nimi.&lt;/p&gt;
&lt;p&gt;W przypadku list oznaczenie wskazujące na źródło tekstu pojawić może się w dwóch miejscach: na końcu wyliczenia lub przed dwukropkiem go poprzedzającym. Obydwie formy są poprawne, przy czym łatwiejszą i bardziej jednoznaczną w odczycie wydaje się być forma z oznaczeniem przed dwukropkiem poprzedzającym wyliczenie.&lt;/p&gt;
&lt;p&gt;Gdy pozycje listy pochodzą z różnych źródeł to można podejść do tego w dwójnasób. Pierwszym sposobem jest oznaczenie każdej pozycji z osobna. Drugi występuje wtedy gdy samo zestawienie jest twórczym i nieoczywistym wkładem autora. Wtedy listę można oznaczyć komentarzem ,,na podstawie''.&lt;/p&gt;
&lt;p&gt;Bardzo wiele informacji ukazuje się jednak w postaci innej niż tradycyjnie rozumiany dokument. Należy tu zaliczyć rozmowy telefoniczne, rozmowy przy okazji spotkania, audycje radiowe, programy telewizyjne itp. To, że nie istnieje tradycyjnie rozumiany dokument dla tych informacji nie oznacza, iż nie są one chronione oraz, że można sobie je przywłaszczyć. Informacje o takim pochodzeniu podlegają takim samym zasadom powoływania jak w przypadku bardziej tradycyjnych źródeł.&lt;/p&gt;
&lt;p&gt;Jeśli jest to audycja radiowa lub program telewizyjny to należy zaznaczyć, o ile można go zidentyfikować autora wypowiedzi, nazwę audycji lub programu, datę oraz godzinę nadania, nazwę stacji radiowej lub telewizyjnej.&lt;/p&gt;
&lt;p&gt;Jeśli źródłem informacji jest rozmowa ustna to podać należy: autora wypowiedzi, czas kiedy rozmowa miała miejsce oraz jej formę (np. rozmowa telefoniczna). Dodatkowo należy uzyskać zgodę od autora wypowiedzi na jej wykorzystanie w publikacji. Informacji o wyrażeniu zgody nie trzeba podawać, gdyż jest ona oczywista w przypadku publikacji tak oznaczonej informacji.&lt;/p&gt;
&lt;p&gt;Można przyjąć za zasadę, iż w przypadku ilustracji i tabel zawsze należy oznaczać ich źródło lub pochodzenie informacji na podstawie których powstały. Wyjątek stanowi sytuacja, gdy autor jest pełnym właścicielem praw oraz autorem takiego elementu pracy. Tabele lub ilustracje nie opatrzone opisem, co do źródła, uznaje się za będące własnością intelektualną autora publikacji.&lt;/p&gt;
&lt;p&gt;Wracając do początkowego wątku tego rozdziału należy wspomnieć, iż nie ma formalnych zasad dla podjęcia decyzji przy jakim stopniu przetworzenia tekstu czy wypowiedzi źródłowej stają się one wytworem autora. To zawsze jest kwestią skomplikowaną i wymaga indywidualnego podejścia. Niemniej jednak zawsze w takich przypadkach należy oznaczyć pochodzenie samej informacji źródłowej w oparciu o którą powstał dany fragment utworu.&lt;/p&gt;
&lt;p&gt;Ostatnią kwestią bardzo często pojawiającą się w publikacjach jest cytowanie cytatów zamieszczonych w publikacjach źródłowych. Ogólna zasada jest taka, że należy powoływać się na źródło pierwotne, zatem właściwe wydaje się być powołanie na pozycję, która jest opisana w naszym źródle. Należało by więc odszukać i zweryfikować treść oryginalną. Co jednak zrobić, gdy jest ona nam niedostępna?&lt;/p&gt;
&lt;p&gt;Zasadą naczelną jest ta, że autor publikacji ostatecznej ponosi odpowiedzialność za cały tekst łącznie z informacjami na które się powołał. Trzeba mieć pewność co do zgodności cytowania, na które się powołujemy, z oryginałem. Dodatkowo sama interpretacja tego fragmentu musi odpowiadać temu jaki jest jego sens w źródle pierwotnym.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="plagiat"&gt;
&lt;h2&gt;Plagiat&lt;/h2&gt;
&lt;p&gt;Celem wszystkich zabiegów związanych zarówno ze stroną edytorską jak i decyzją o zasadności oznaczenia źródła pierwotnego dla publikacji, jest uniknięcie oskarżenia o przywłaszczenie sobie obcej własności intelektualnej. Nabiera to obecnie szczególnego znaczenia, gdyż w wyniku powszechnej dostępności do różnych źródeł informacji nasila się ta forma kradzieży wraz z najprymitywniejszą jej formą nazywaną terminem plagiat.&lt;/p&gt;
&lt;p&gt;Na podstawie kilkuletnich obserwacji mogę stwierdzić, iż po pierwsze, zwłaszcza w pierwszych pracach mających znamiona publikacji naukowej studenci wykazują nieprzygotowanie do tego typu publikacji, co wyraża się najczęściej całkowitą nieznajomością zasad posługiwania się informacjami i publikacjami obcymi w referatach. Po drugie panuje wysoki poziom tolerancji dla plagiatu.&lt;/p&gt;
&lt;p&gt;Czym jest więc plagiat? Słownik języka polskiego PWN pod redakcją prof. Mieczysława Szymczaka definiuje plagiat jako: ,,przywłaszczenie cudzego utworu lub pomysłu twórczego, wydanie cudzego utworu pod własnym nazwiskiem, także: dosłowne zapożyczenie z cudzych dzieł podane jako oryginalne i własne''.&lt;/p&gt;
&lt;p&gt;Kolejne pytanie, będące konsekwencją wywodu jest następujące:
&lt;em&gt;Czy jest poprawną praca złożona w całości lub w przeważającej jej części z poprawnie oznaczonych co do pochodzenia innych publikacji w postaci cytowań dosłownych?&lt;/em&gt;
Na pierwszy rzut oka wydawało by się, iż nie ma w tym nic złego. Zastanówmy się jednak nad stroną prawną oraz metodyczną tego pytania.&lt;/p&gt;
&lt;p&gt;Po pierwsze, zgodnie z Ustawą o prawie autorskim oraz prawach pokrewnych z dnia 4 lutego 1994 r. można korzystać z fragmentów publikacji pod warunkiem prawidłowego oznaczenia ich źródła pochodzenia.&lt;/p&gt;
&lt;p&gt;Po drugie zastanowić się należy, czy wkład pracy autora przy takim złożeniu innych publikacji jest wystarczający, by stać się odrębnym utworem intelektualnym do którego prawa przysługują autorowi. W tym przypadku proporcja wkładu własnej pracy do prac zapożyczonych skłania do stwierdzenia nadużycia cytowania obcych publikacji.&lt;/p&gt;
&lt;p&gt;Zatem biorąc pod uwagę obydwa rozpatrywane kryteria taka praca jest niepoprawna oraz w pewnym sensie stanowi plagiat. W każdej publikacji dostrzegalna powinna być samodzielność autora w opracowaniu tematu.&lt;/p&gt;
&lt;p&gt;Jeśli już wyjaśniona została kwestia naruszenia praw innych autorów to zastanowić się należy jak interpretować zapożyczenia z własnych prac autora. Na pierwszy rzut oka wydawało by się, iż z racji tego, że jest on ich autorem może z nimi robić co chce. Nikt bowiem nie może wpływać na to co robimy ze swoją własnością. To, czy zniszczymy własny długopis zależy w końcu tylko od nas i nikt nie ma prawa się nam wtrącać. Otóż w przypadku publikacji sprawa nie jest tak prosta i oczywista. Zależy to od indywidualnego przypadku. Do autora należą wprawdzie wszystkie prawa autorskie lecz nie te, których się zrzekł. Samo pozbycie się części praw następuje w przypadku publikacji na rzecz wydawnictwa. To w jakim to następuje wymiarze oraz czego dokładnie dotyczy jest już sprawa indywidualną. Jednak autor jest zobowiązany do dotrzymania wszystkich warunków na jakich została opublikowana jego praca.&lt;/p&gt;
&lt;p&gt;Jako ciekawostkę można przytoczyć, iż na mocy zmian w prawie autorskim uczelnie wyższe nabywają pewne prawa do prac dyplomowych z prawem pierwszeństwa publikacji w okresie 6 pierwszych miesięcy - zainteresowanych szczegółami odsyłam do odpowiednich zapisów prawnych.&lt;/p&gt;
&lt;p&gt;Inna już kwestią jest odbiór w środowisku naukowym tych samych prac publikowanych w różnych wydawnictwach. Otóż nawet, gdy jest to poprawne pod względem prawnym, zachowując prawa autorskie i pokrewne wszystkich zainteresowanych stron, taka praca nic nowego nie wnosi do danej dziedziny nauki. I znowu mamy do czynienia z pewnym wyjątkiem w przypadku prac popularyzatorskich, gdy jest poprawnym powtarzanie publikacji w ogólnym zarysie lecz nie powinien być to ponowny przedruk pracy pierwotnej.&lt;/p&gt;
&lt;p&gt;Naczelną zasadą jest jednak to, że do prac własnych odwołujemy się w taki sam sposób jakby to były prace innych autorów.&lt;/p&gt;
&lt;p&gt;Jak można łatwo zauważyć z powyższego tekstu, nie da się określić zasad oceny stopnia poprawności pod względem należytego zachowania praw autorskich i pokrewnych w postaci prostego algorytmu, i wymagana jest samodzielność autora pod tym względem.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="podsumowanie"&gt;
&lt;h2&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Jako uwagę końcową można przytoczyć fakt dostrzeżenia problemu plagiatu wśród studentów i środowiska naukowego, co wyraża się m.in. uchwałą nr 113 Konferencji Rektorów Uniwersytetów Polskich z dnia 24 maja 2003 w sprawie plagiatów prac naukowych oraz sprzedaży prac dyplomowych. W dokumencie tym czytamy:&lt;/p&gt;
&lt;p&gt;,,- w przypadku popełnienia plagiatu przez pracownika uczelni powinny być niezwłocznie podjęte kroki prowadzące do zwolnienia go z pracy w uczelni, a o fakcie dowiedzionego plagiatu powinni być poinformowani rektorzy wszystkich uczelni wyższych w Polsce&lt;/p&gt;
&lt;p&gt;- jeśli plagiat stanowił podstawę uzyskania stopnia bądź tytułu licencjata, magistra, doktora, doktora habilitowanego lub profesora, powinny zostać niezwłocznie wszczęte procedury prowadzące do odebrania autorowi plagiatu nieuczciwie uzyskanego tytułu lub stopnia''.&lt;/p&gt;
&lt;/div&gt;
</content><category term="academic"/><category term="writing-guide"/><category term="journal"/><category term="students"/></entry><entry><title>[16] Cytowania</title><link href="https://notatnik.akademicki.eu/citations-intro.html" rel="alternate"/><published>2015-03-05T19:00:00+01:00</published><updated>2015-03-05T19:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-03-05:/citations-intro.html</id><summary type="html">&lt;p class="first last"&gt;Wiele problemów sprawić może poprawne oznaczenie pochodzenia źródła dla danego fragmentu tekstu. Istnieje wiele konwencji zapisu. Same źródło może być cytowane dosłownie lub przytoczone w sposób mniej ścisły, co powinno być również odzwierciedlone w sposobie jego oznaczenia.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Dzieła starożytnych filozofów utrzymane są często w formie dialogu mistrza z uczniem. Można rozróżnić poszczególne osoby wyrażające zapytania, osądy, rady oraz określić ich odrębny punkt widzenia. Podobnie jest w publikacjach powołujących się na inne dzieła. Stanowią one fragmenty myśli adaptowane zgodnie z intencją autora, który ich używa.&lt;/p&gt;
&lt;div class="section" id="cytowania-w-tekscie"&gt;
&lt;h2&gt;Cytowania w tekście&lt;/h2&gt;
&lt;p&gt;Dla oznaczenia tych fragmentów, oddzielenia ich od oryginalnego oraz twórczego wkładu autora opracowano wiele konwencji. Niektóre z nich zostaną przedstawione w dalszej części artykułu. W tekstach technicznych najczęściej spotykanym sposobem powołania się na pierwotne źródło jest podanie w nawiasie kwadratowym numeru pozycji w bibliografii załącznikowej do której się odwołujemy:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;,,Zdanie cytowane w publikacji pochodzące z dzieła Kowalskiego.'' [1]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Równie poprawną formą jest oznaczenie poprzez parę autor-rok, co czasami nazywane jest systemem harwardzkim:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;,,Zdanie cytowane w publikacji pochodzące z dzieła Kowalskiego.'' [Kowalski 1900]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;co może być oznaczone również w nieco inny sposób:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;,,Zdanie cytowane w publikacji pochodzące z dzieła Kowalskiego (1900).''&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;- używając w tekście nazwiska autora.&lt;/p&gt;
&lt;p&gt;Jeżeli cytuje się wiele dzieł jednego autora pochodzących z tego samego roku, w konwencji autor-rok (system harwardzki), po dacie dodać należy kolejne litery alfabetu. Dzięki temu możemy jednoznacznie rozróżnić wszystkie pozycje.&lt;/p&gt;
&lt;p&gt;Najrzadziej spotykaną konwencją oznaczeń są przypisy bibliograficzne:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;,,Zdanie cytowane w publikacji pochodzące z dzieła Kowalskiego.*''&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;które spotkać można głównie w krótkich utworach w których występuje nieduża liczba powołań. Równie popularną formą tego oznaczenia jest zastosowanie liczby użytej w indeksie górnym.&lt;/p&gt;
&lt;p&gt;Sposób z użyciem przypisów bibliograficznych, często spotykany w pracach z drugiej połowy XX wieku, obecnie zanika i nie jest powszechnie stosowany. Stosując przypisy bibliograficzne należy wiedzieć, że jeżeli przypis bibliograficzny dotyczy tego samego dzieła, co przypis bezpośrednio go poprzedzający i znajdujący się na tej samej stronie to zamiast pełnego opisu można zastosować oznaczenie: Tamże, Ibid lub Op. cit. z podaniem odpowiedniej strony źródła.&lt;/p&gt;
&lt;p&gt;Wybrana konwencja notacji podyktowana jest często względami praktycznymi. Pierwsza (numer pozycji w nawiasie) najmniej zakłóca tekst prowadzonego wywodu. Druga (autor-rok) nadaje się doskonale do oznaczenia dzieł w tekstach w których bardzo istotna jest chronologia publikacji. Częściej spotyka się ją w publikacjach o charakterze humanistycznym.&lt;/p&gt;
&lt;p&gt;* (Opis pozycji na którą się powołano w stopce strony.)&lt;/p&gt;
&lt;div class="section" id="przyklad"&gt;
&lt;h3&gt;Przykład&lt;/h3&gt;
&lt;p&gt;Postulowana w pracy dalsza deregulacja rynku transportowego doprowadzić może do podobnego zjawiska jakie miało miejsce w końcu lat siedemdziesiątych czyli zwiększenia konkurencyjności otoczenia przedsiębiorstw transportowych oraz obniżenia stawek przewozowych. [1, str. 55]&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="cytowania-doslowne"&gt;
&lt;h2&gt;Cytowania dosłowne&lt;/h2&gt;
&lt;p&gt;Przytoczone przykłady stanowią cytowania dosłowne. Cytowanie takie zaznacza się zwyczajowo poprzez umieszczenie tekstu w cudzysłowach. Samo oznaczenie źródła występuje na ogół na końcu cytowanego tekstu.&lt;/p&gt;
&lt;p&gt;Wielu typografów krytycznie odnosi się do stosowania cudzysłowów. Nieuniknione w przypadku pisma odręcznego, w przypadku korzystania z wysokiej jakości składu komputerowego stają się zbędne i można je zastąpić inną formą wyróżnienia tekstu. Z uwagi na to, że cytowania dosłowne spotyka się raczej rzadko, można nadal stosować tę formę, co jednocześnie akcentuje dosłowność cytowania.&lt;/p&gt;
&lt;p&gt;O wiele częściej napotkać można na przytoczenia wyników badań, danych, stwierdzeń oraz innych fragmentów obcych dzieł, które zaadoptowane na potrzeby danego tematu stanowią część tekstu, nie będąc wierną kopią oryginału. W takim przypadku, ponieważ nie stanowią wkładu autora danego dzieła, należy je również oznaczyć (sposoby oznaczeń opisane są w dalszej części tekstu).&lt;/p&gt;
&lt;p&gt;Przed przytoczeniem cudzych lub własnych słów można stawiać dwukropek.&lt;/p&gt;
&lt;div class="section" id="przyklad-1"&gt;
&lt;h3&gt;Przykład&lt;/h3&gt;
&lt;p&gt;,,Deregulacja transportu przeprowadzona w latach 1977 - 1980, bez wątpienia przyczyniła się do stworzenia znaczenie bardziej konkurencyjnego otoczenia, co spowodowało obniżenie stawek przewozowych i poprawę obsługi. Lepsza obsługa transportowa oraz bardziej zaawansowane metody zarządzania zapasami spowodowały obniżkę kosztów zapasów''. [1, str. 55]&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="wzory-matematyczne"&gt;
&lt;h2&gt;Wzory matematyczne&lt;/h2&gt;
&lt;p&gt;Szczególnym przypadkiem cytowania dosłownego są wzory matematyczne.&lt;/p&gt;
&lt;p&gt;Można do nich stosować zarówno oznaczenia tak jak przy innych cytowaniach jak i zaznaczenie ich pochodzenia jawnie w tekście lub treści opisu. Należy pamiętać o tym, iż wzory matematyczne podlegają tym samym prawom autorskim co inne teksty pisane i należy je zawsze oznaczać. Wyjątkiem są jednak wzory powszechnie znane, których pochodzenie trudno jest ustalić, utrwalone w tradycji danej dziedziny. Nie będzie w takim razie poprawną próba oznaczenia pochodzenia wzoru na pole koła.&lt;/p&gt;
&lt;p&gt;Wzorów matematycznych nie otacza się cudzysłowami.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="przytoczenia-pozorne"&gt;
&lt;h2&gt;Przytoczenia pozorne&lt;/h2&gt;
&lt;p&gt;Najbardziej zbliżone do opisywanego wcześniej przytoczenia dokładnego (np. dosłowne powtórzenie wypowiedzi) są przytoczenia pozorne (cytaty przywołane z pamięci, niedokładne przytoczenia, hipotetyczne cytaty, odwołania do swoich myśli, itp.).&lt;/p&gt;
&lt;p&gt;Te fragmenty tekstu, dla zaznaczenia ich specyficznego charakteru oraz niepewnej wierności względem oryginału, by odróżnić je od cytowania dosłownego, oznaczyć można formą pochyłą. Podobnie formą pochyłą zaznaczyć można teksty w formie wywiadu.&lt;/p&gt;
&lt;p&gt;Pamiętać jednak należy o podaniu pozycji pochodzenia źródła takiego fragmentu zgodnie z przyjętą konwencją oznaczeń.&lt;/p&gt;
&lt;p&gt;Stosuje się tylko jeden rodzaj wyróżniania takich przytoczeń: albo objęcie cudzysłowami apostrofowymi, albo zastosowanie formy pochyłej.&lt;/p&gt;
&lt;div class="section" id="przyklad-2"&gt;
&lt;h3&gt;Przykład&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Deregulacja transportu jaka nastąpiła w końcu lat siedemdziesiątych, bez wątpienia przyczyniła się do zwiększenia konkurencyjności otoczenia firm transportowych, co spowodowało obniżenie stawek przewozowych i poprawę obsługi. Wyższa jakość obsługi oraz bardziej zaawansowane metody zarządzania zapasami spowodowały zaś obniżkę kosztów zapasów. [1]&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="odwolanie-do-wynikow-badan-i-danych"&gt;
&lt;h2&gt;Odwołanie do wyników badań i danych&lt;/h2&gt;
&lt;p&gt;Najbardziej odległym rodzajowo przytoczeniem względem jego dosłownej odmiany jest odwołanie się do danych, wyników badań lub przeformułowanych tez i stwierdzeń, które stanowią adaptację obcych publikacji. W takim wypadku na końcu danego bloku tekstu zamieścić należy odwołanie do pozycji pierwowzoru z zachowaniem przyjętej konwencji oznaczeń.&lt;/p&gt;
&lt;div class="section" id="przyklad-3"&gt;
&lt;h3&gt;Przykład&lt;/h3&gt;
&lt;p&gt;8,5 procentowy spadek długości eksploatowanych linii kolejowych w latach 1990 - 1995, z 26228 km do 23986 km [5, str. 388] można potraktować jako zapowiedź spadku znaczenia tej gałęzi transportu w latach następnych.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="komentarze-i-wtracenia-w-cytowaniach"&gt;
&lt;h2&gt;Komentarze i wtrącenia w cytowaniach&lt;/h2&gt;
&lt;p&gt;Gdy przytoczenie stanowi znaczny blok tekstu, a sama treść uzależniona jest od szerszego kontekstu zamieszcza się komentarze lub wtrącenia.&lt;/p&gt;
&lt;p&gt;Wewnątrz cudzysłowów wtrącenia można wyodrębnić pauzami. Dopuszczalną formą jest oddzielenie ich przecinkami lecz w tym przypadku należy obie części przytoczenia lub cytatu ująć w samodzielne cudzysłowy.&lt;/p&gt;
&lt;p&gt;Do oznaczenia wyjaśnień (objaśnień) [najczęściej są to komentarze tłumacza] w przytoczeniach stosuje się również nawiasy kwadratowe.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="skracanie-cytowan"&gt;
&lt;h2&gt;Skracanie cytowań&lt;/h2&gt;
&lt;p&gt;Gdy oznaczyć chcemy pominięcie fragmentu w przytaczanym lub cytowanym tekście stosuje się wielokropek w nawiasie kwadratowym lub rzadziej okrągłym. I tak jeśli opuszczony jest koniec zdania to po wielokropku w nawiasach stawia się kropkę. Gdy wielokropek w nawiasie stawiany jest po kropce, sugeruje to, iż opuszczono fragment tekstu lecz samo zdanie jest niezmienione.&lt;/p&gt;
&lt;p&gt;Gdy następuje w zdaniu urwanie przytoczenia objętego cudzysłowami to można je oznaczyć wielokropkiem w nawiasie stawianym po cudzysłowie zamykającym lub przed nim.&lt;/p&gt;
&lt;p&gt;Gdy urwanie zdania następuje na jego początku, to w uzasadnionych przypadkach również można oznaczyć je wielokropkiem w nawiasach.&lt;/p&gt;
&lt;p&gt;Oznaczenia w postaci wielokropka w nawiasie spotykane są jednak rzadko w publikacjach. Nie należy nadużywać tego oznaczenia, gdy nie zachodzi obawa, iż zdanie może być potraktowane jako wyjęte z kontekstu. Tak samo niepoprawnym jest wstawianie każdego cytowanego zdania pomiędzy dwa oznaczenia wielokropków w nawiasach, jeśli nie ma to innego uzasadnienia.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="tabele-rysunki"&gt;
&lt;h2&gt;Tabele, rysunki&lt;/h2&gt;
&lt;p&gt;Elementy poza tekstem głównym, czyli tabele i rysunki, podlegają takim samym rygorom w oznaczeniu źródła ich pochodzenia co reszta pracy. Zachodzą tu jednak istotne różnice.&lt;/p&gt;
&lt;p&gt;Każdy rysunek lub tabela muszą być oznaczone co do źródła pochodzenia. Dopuszcza się brak takiego oznaczenia tylko w przypadku , gdy element ten jest własnością autora tekstu. Element taki oznaczać należy zgodnie z przyjętą konwencją w tekście głównym.&lt;/p&gt;
&lt;p&gt;W przypadku, gdy decydujemy się na pełne oznaczenie źródła nie stosuje się skrótów lecz za każdym razem podaje się pełen opis pochodzenia tego elementu. Gdy element taki powstał w oparciu o źródła obce lecz sama jego forma jest twórczym wkładem autora, wtedy dodać należy adnotację informującą o tym fakcie, czyli najczęściej sformułowanie ,,opracowano na podstawie ...''.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="precyzja-oznaczen"&gt;
&lt;h2&gt;Precyzja oznaczeń&lt;/h2&gt;
&lt;p&gt;Wszystkie oznaczenia materiałów źródłowych zawarte w tekście oprócz wymienionych tu zasad, spełniać muszą jeszcze jedno, najważniejsze kryterium - muszą być jednoznaczne oraz precyzyjne. Znaczy to, iż autor powinien tak je oznaczyć aby nie ulegało wątpliwości, którego fragmentu tekstu dotyczą, oraz do której publikacji pierwotnej się odnoszą.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;img alt="Przykład oznaczenia tabeli" src="https://notatnik.akademicki.eu/images/0016_table-example-1.png" /&gt;
&lt;p class="caption"&gt;Przykład 1 - tabela&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure align-center"&gt;
&lt;img alt="Przykład oznaczenia tabeli" src="https://notatnik.akademicki.eu/images/0016_table-example-2.png" /&gt;
&lt;p class="caption"&gt;Przykład 2 - tabela&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure align-center"&gt;
&lt;img alt="Przykład oznaczenia tabeli" src="https://notatnik.akademicki.eu/images/0016_figure-example-1.png" /&gt;
&lt;p class="caption"&gt;Przykład 3 - rysunek&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="wiecej-przykladow"&gt;
&lt;h2&gt;Więcej przykładów&lt;/h2&gt;
&lt;p&gt;Więcej przykładów znaleźć można w publikacjach uznanych i cenionych wydawnictw jak np. PWE, PWN itd&lt;/p&gt;
&lt;/div&gt;
</content><category term="academic"/><category term="writing-guide"/><category term="journal"/><category term="students"/></entry><entry><title>[15] Bibliografia załącznikowa - wprowadzenie</title><link href="https://notatnik.akademicki.eu/bibliography-intro.html" rel="alternate"/><published>2015-02-07T22:00:00+01:00</published><updated>2015-02-07T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-02-07:/bibliography-intro.html</id><summary type="html">&lt;p class="first last"&gt;Podstawowe informacje dotyczące list pozycji źródeł pierwotnych dla tekstu obejmują sortowanie i formatowanie oraz konwencje zapisu bibliografii załącznikowej&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="bibliografia-zalacznikowa"&gt;
&lt;h2&gt;Bibliografia załącznikowa&lt;/h2&gt;
&lt;p&gt;Listy pozycji źródeł dla danego tekstu stanowią zazwyczaj odrębną część publikacji przyjmując postać bibliografii załącznikowej. W tradycji polskiej ten rozdział pracy zwykło się nazywać ,,literatura'' bądź ,,bibliografia''.&lt;/p&gt;
&lt;p&gt;O ile oznaczenia w tekście oprócz tego, iż muszą być jednoznaczne oraz niesprzeczne z omówionymi zasadami, pozwalają na pewną elastyczność w ich implementacji o tyle w przypadku list zawierających opis pochodzenia źródeł dowolność ta występuje tylko w granicach braku powszechnie obowiązującego i respektowanego standardu zapisu. Oznacza to, iż choć nie istnieje jeden powszechnie uznany sposób zapisu to należy ściśle stosować jeden z jego wariantów. Podejście takie można uznać za zrozumiałe, gdy uwzględni się cel stosowania spisów pozycji źródłowych, zgodnie z którym powinny one umożliwić jak najłatwiejsze zidentyfikowanie danej pozycji w celu dotarcia do niej.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="rodzaje-bibliografii-zalacznikowe"&gt;
&lt;h2&gt;Rodzaje bibliografii załącznikowe&lt;/h2&gt;
&lt;p&gt;Skoro bibliografia załącznikowa jest listą to musi istnieć kryterium względem którego następuje jej uszeregowanie. Z tego względu występują następujące układy spisu literatury (Typologia oraz opis opracowane na podstawie pozycji Robert Chwałowski, Typografia typowej książki, Wydawnictwo HELION, Gliwice 2002 oraz praktyki stosowanej na Politechnice Wrocławskiej):&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;alfabetyczny,&lt;/li&gt;
&lt;li&gt;chronologiczny,&lt;/li&gt;
&lt;li&gt;&lt;dl class="first docutils"&gt;
&lt;dt&gt;rozumowany (logiczny), wynikający z podziału przyjętego w treści:&lt;/dt&gt;
&lt;dd&gt;&lt;ul class="first last"&gt;
&lt;li&gt;do rozdziałów,&lt;/li&gt;
&lt;li&gt;do dzieł,&lt;/li&gt;
&lt;li&gt;według zagadnień,&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;w kolejności cytowania.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Układ alfabetyczny&lt;/em&gt; spotyka się najczęściej. Stosuje się go w sytuacji gdy nie ma specjalnego uzasadnienia dla stosowania innego typu układu. Listę sortuje się rozpoczynając od nazwisk autorów. W przypadku dzieł zbiorowych lub anonimowych dopuszczalne jest ich włączenie do układu alfabetycznego. Wtedy szereguje się je według tytułów lub zebrać je można na końcu wykazu bibliograficznego. Pierwszy sposób preferowany jest na ogół przy małej liczbie dzieł zbiorowych czy też anonimowych, drugi wówczas gdy wykaz zawiera znaczną ich ilość. Odmianą układu alfabetycznego jest układ nazwisko--data (tzw. system harwardzki), gdzie pierwszym kryterium jest nazwa autora, zaś drugim czas wydania (w kolejności od najstarszych do najmłodszych). Stosuje się go wtedy gdy data opublikowania cytowanych danych lub twierdzeń ma duże znaczenie informacyjne. W systemie tym nie numeruje się się poszczególnych pozycji.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Układ chronologiczny&lt;/em&gt; stosowany jest na ogół w bibliografii prac jednego autora. Poszczególne pozycje można zbierać w grupy podając w nagłówku rok ich wydania.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Układ rozumowany&lt;/em&gt; [do rozdziału]/[do dzieł] polega na grupowaniu pozycji bibliografii osobno dla poszczególnych rozdziałów/dzieł. W obrębie jednej grupy zachowuje się układ alfabetyczny.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Układ logiczny&lt;/em&gt; według zagadnienia dzieli pozycje bibliografii na grupy tematyczne. Umieszcza się go po każdym z rozdziałów którego dotyczy lub na końcu wydawnictwa. W obrębie poszczególnych grup zachowuje się układ alfabetyczny.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Układ w kolejności cytowania&lt;/em&gt; stosowany jest często w czasopismach, w wydawnictwach ciągłych zbiorowych oraz w broszurach. W układzie tym pozycje numeruje się według kolejności powoływania się na nie w tekście pracy.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="sortowanie-i-formatowanie-list"&gt;
&lt;h2&gt;Sortowanie i formatowanie list&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Przedrostki przy nazwiskach jak np. MacCallah czy O'Connor stanowią ich istotną część, powinny więc być uwzględnione przy szeregowaniu pozycji.&lt;/li&gt;
&lt;li&gt;Przyimki występujące przy nazwiskach (jak: von, van, de) nie stanowią istotnej części nazwiska. Szeregowanie dla tych pozycji następuje wg. kolejnych liter właściwego nazwiska. Przyimek ten, jako że powinien być jednak podany, oznaczamy jako &amp;quot;v.&amp;quot; na początku pozycji lub w pełnej jego formie po imieniu. Zasada ta nie obowiązuje względem nazwisk angielskich obcego pochodzenia gdzie przed nazwiskiem występuje przyimek (przykład: De Foe).&lt;/li&gt;
&lt;li&gt;Jeżeli nazwisko występuje w opisie kilku następujących po sobie pozycji, powtarza się je za każdym razem. Nie można opuszczać powtarzających się nazwisk lub stosować skrótów.&lt;/li&gt;
&lt;li&gt;Pozycje bibliograficzne numeruje się jedynie wtedy, gdy autor powołuje się na ich numery w tekście. Pozycje te numeruje się liczbami arabskimi w nawiasie kwadratowym.&lt;/li&gt;
&lt;li&gt;Nazwisko i imię autora można składać kapitalikami. Tytuł wyróżnia się przez zastosowanie pisma pochyłego bez ujmowania go w cudzysłowia, zaś pozostałą część opisu składa się czcionką prostą.&lt;/li&gt;
&lt;li&gt;W przypadku dokumentów napisanych wspólnie przez wielu autorów, wymienia się wszystkich autorów (niezależnie od ich liczby), z zachowaniem kolejności, w jakiej występują w opisywanym dokumencie, lub tylko pierwszego z nich dodając skrót ,, i in.'' lub ,,et al''.&lt;/li&gt;
&lt;li&gt;Zdarza się, szczególnie w pracach przeglądowych, bardziej obszernych, że spotykamy grupowanie zgodne z formą wydania. Będą to więc najczęściej takie grupy jak: książki, czasopisma, strony internetowe, normy itd.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="konwencja-zapisu"&gt;
&lt;h2&gt;Konwencja zapisu&lt;/h2&gt;
&lt;p&gt;Zaproponujmy teraz pewną konwencję tworzenia bibliografii załącznikowej dla:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;pozycji książkowych&lt;/li&gt;
&lt;li&gt;artykułów z czasopism,&lt;/li&gt;
&lt;li&gt;artykułów z książek,&lt;/li&gt;
&lt;li&gt;materiałów pochodzących z Internetu.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Przedstawiona lista pozycji nie jest oczywiście zupełna. Nie można też w tak ograniczonej objętości tekstu przedstawić wszystkich wariantów w ramach wymienionych pozycji. Nie jest to również głównym celem artykułu więc zostanie świadomie pominięte.&lt;/p&gt;
&lt;p&gt;Każda pozycja listy zaczyna się tak samo, albo poprzez podanie w nawiasie kwadratowym numeru albo poprzez podanie innego oznaczenia tej pozycji zgodnie z przyjętą konwencją oznaczeń. Dopuszcza się również pominięcie tego oznaczenia jeśli w tekście nie występuje odniesienie do niego a sama forma przytoczeń pozwala na jednoznaczną identyfikację pozycji w spisie.&lt;/p&gt;
&lt;p&gt;Jedną z pozostałych możliwości oznaczenia danej pozycji listy jest podanie na jej początku nazwiska i roku umieszczonych w nawiasie.&lt;/p&gt;
&lt;p&gt;Proponowana forma bibliografii jest ogólnie przyjęta i popularna w użyciu na Politechnice Wrocławskiej. Uwaga ta jest uzasadniona bowiem to co spotyka się w praktyce nieznacznie odbiega od stosownych zaleceń formalnych dla bibliografii załącznikowej.&lt;/p&gt;
&lt;p&gt;W artykule, ze względu na ilość różnych wariantów, pominięta została kwestia dokładnej redakcji każdej pozycji, a ograniczono się do określenia rodzaju informacji które powinna zawierać.&lt;/p&gt;
&lt;p&gt;Poszczególne informacje zawarte w każdej pozycji literatury oddzielamy przecinkiem zaś na końcu każdej z pozycji listy stawiamy kropkę.&lt;/p&gt;
&lt;div class="section" id="pozycje-ksiazkowe"&gt;
&lt;h3&gt;Pozycje książkowe&lt;/h3&gt;
&lt;p&gt;Pozycja książkowa może być z racji jej różnorodności oznaczana w różny sposób.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Zawsze rozpoczyna ją nazwisko a następnie imię lub pierwsza litera imienia zakończona kropką.&lt;/li&gt;
&lt;li&gt;Po wypisaniu autora lub autorów oddzielonych przecinkami następuje tytuł książki.&lt;/li&gt;
&lt;li&gt;Po tytule podaje się (o ile istnieje) serię wydawniczą a następnie nazwę wydawnictwa.&lt;/li&gt;
&lt;li&gt;Opis pozycji kończy nazwa miejsca wydania oraz rok.&lt;/li&gt;
&lt;li&gt;Czasami w książkach, w których każdy z rozdziałów posiada odrębnych autorów, zachodzi potrzeba dalszego sprecyzowania opisu. W takim przypadku należy podać jeszcze tytuł rozdziału, nazwisko autora, jego imię lub pierwszą literę zakończoną kropką.&lt;/li&gt;
&lt;li&gt;Informacje te dodatkowo można uzupełnić podając redaktora książki.&lt;/li&gt;
&lt;li&gt;W przypadku wydawnictw wielotomowych opisowi może podlegać numer tomu a w przypadku wielokrotnych (różniących się) wydań danego tytułu również numer wydania.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="artykuly-z-czasopism"&gt;
&lt;h3&gt;Artykuły z czasopism&lt;/h3&gt;
&lt;p&gt;Artykuły z czasopisma oznacza się rozpoczynając od wymienienia autorów tak jak ma to miejsce w przypadku pozycji książkowej. Po wymienieniu autorów następuje tytuł artykułu, po którym oznacza się nazwę czasopisma oraz jego numer wydania.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="artykuly-z-ksiazek"&gt;
&lt;h3&gt;Artykuły z książek&lt;/h3&gt;
&lt;p&gt;Artykuł z książki rozpoczyna oznaczenie autora tak jak to miało miejsce w przypadku artykułu z czasopisma lub pozycji książkowej. Następnie umieszcza się tytuł artykułu, adnotację ,,[w]'', tytuł książki z której pochodzi artykuł, wydawnictwo, miejsce wydania oraz rok.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="internet"&gt;
&lt;h3&gt;Internet&lt;/h3&gt;
&lt;p&gt;Nowym i jeszcze nie do końca jednoznacznym w opisie elementem bibliografii załącznikowej jest opis źródła internetowego. Sytuacja może się uprościć jeśli Internet użyty jest tylko jako nośnik danych a źródło stanowi kopię publikacji w formie papierowej udostępniany przez wydawcę. W takim przypadku daną pozycję oznacza się tak jak jej formę ,,papierową''.&lt;/p&gt;
&lt;p&gt;Inaczej jest gdy dany tekst występuje tylko w postaci elektronicznej w Internecie jako np. część dokumentu HTML. W takim przypadku należy podać:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;autora lub autorów (gdy są znani),&lt;/li&gt;
&lt;li&gt;tytuł materiału na który się powołujemy (jeśli istnieje),&lt;/li&gt;
&lt;li&gt;dokładny adres internetowy (pomijając jednak fragment łącza do fragmentu strony, np. dla adresu w przeglądarce www.ciekawa.strona.pl#fragment będzie to wpis www.ciekawa.strona.pl),&lt;/li&gt;
&lt;li&gt;datę pobrania z Internetu lub innej sieci.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Szczególne znaczenie w przypadku źródeł pochodzących z internetu ma data pobrania. Jest to wynikiem częstych zmian zawartości stron WWW oraz w wielu przypadkach ich dynamicznych modyfikacji.&lt;/p&gt;
&lt;p&gt;Ponadto, gdy strona internetowa nie zawiera tytułu dla cytowanego fragmentu można w przypadku większych serwisów internetowych podać dział w jakim informacje te są dostępne, aby uprościć ich odnalezienie.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="przyklad"&gt;
&lt;h2&gt;Przykład&lt;/h2&gt;
&lt;p&gt;Poniżej zamieszczono kilka przykładów zapisu:&lt;/p&gt;
&lt;p&gt;[1] Coyle J. (i inni), Zarządzanie logistyczne, PWE, Warszawa 2002.&lt;/p&gt;
&lt;p&gt;[2] Korzeń Z., Logistyczne systemy transportu bliskiego i magazynowania, tom 1, ILiM, Poznań 1998.&lt;/p&gt;
&lt;p&gt;[3] (praca zbiorowa), Kody kreskowe. Rodzaje. Standardy, Sprzęt. Zastosowania, ILiM, Poznań 2000.&lt;/p&gt;
&lt;p&gt;[4] Kwaśniowski S. (red.), Zając P. (red.), Automatyczna identyfikacja w systemach logistycznych, seria NAVIGATOR, Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław 2004.&lt;/p&gt;
&lt;p&gt;[5] Rocznik Statystyczny Rzeczypospolitej Polskiej 1998, Zakład Wydawnictw Statystycznych, Warszawa 1998.&lt;/p&gt;
&lt;p&gt;[6] Marszałek L, Edytorstwo publikacji naukowych, Państwowe Wydawnictwo Naukowe, Warszawa 1986.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="rozmowa-wywiad"&gt;
&lt;h2&gt;Rozmowa, wywiad&lt;/h2&gt;
&lt;p&gt;Kontynuując omawianie środków przekazu innych niż druk należy wspomnieć o dość nietypowym przypadku pozyskania informacji jakim jest rozmowa. Może to być rozmowa telefoniczna lub podczas spotkania. W takim przypadku należy podać autora wypowiedzi czy myśli wykorzystywanej w publikacji, uzupełniając datą oraz opisem okoliczności (np. rozmowa telefoniczna).&lt;/p&gt;
&lt;/div&gt;
</content><category term="academic"/><category term="writing-guide"/><category term="journal"/><category term="students"/></entry><entry><title>[14] Kopia zapasowa hostów KVM (lvm)</title><link href="https://notatnik.akademicki.eu/kvm-backup-intro.html" rel="alternate"/><published>2015-01-04T19:00:00+01:00</published><updated>2015-01-04T19:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2015-01-04:/kvm-backup-intro.html</id><summary type="html">&lt;p class="first last"&gt;Kopię zapasową serwera wirtualnego opartego o KVM na woluminie LVM najlepiej robić w czterech krokach. Pierwszy to wyłączenie hosta wirtualnego. Drugi to skopiowanie konfiguracji serwera oraz utworzenie snapshotu zawartości woluminu lvm zawierającego dane hosta wirtualnego. Trzeci to zrzut zawartości snapshotu lvm do formatu RAW. Czwarty to kompresja pliku w formacie RAW zawierającego dane hosta wirtualnego i konwersja do formatu QCOW2.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Tworzenie kopii zapasowej hosta wirtualnego opartego o LVM i KVM można podzielić na cztery etapy:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;wyłączenie hosta wirtualnego,&lt;/li&gt;
&lt;li&gt;utworzenie kopii konfiguracji i snapshotu woluminu zawierającego dane hosta,&lt;/li&gt;
&lt;li&gt;zrzucenie zawartości snapshotu z danymi hosta wirtualnego do pliku w formacie RAW,&lt;/li&gt;
&lt;li&gt;skompresowanie zawartości pliku danych hosta i konwersja z formatu RAW do QCOW2.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pliki podstawowe konfiguracji serwera do skopiowania to:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
/etc/libvirt/qemu/networks/*
/etc/libvirt/storage/*
&lt;/pre&gt;
&lt;p&gt;Kopię konfiguracji hosta wirtualnego można otrzymać za pomocą polecenia:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
virsh dumpxml nazwa-hosta &amp;gt; nazwa-pliku-konfiguracji.xml
&lt;/pre&gt;
&lt;p&gt;Snapshot woluminu lvm tworzy się za pomocą:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
lvcreate -L4G -s -n nazwa-snapshotu nazwa-woluminu
&lt;/pre&gt;
&lt;p&gt;Zrzucenie zawartości snapshotu do pliku realizuje się poprzez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
qemu-img convert -p -f raw nazwa-snapshotu -O raw nazwa-pliku.raw
&lt;/pre&gt;
&lt;p&gt;Teraz trzeba usunąć już niepotrzebny snapshot:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
lvremove nazwa-snapshotu
&lt;/pre&gt;
&lt;p&gt;Ostatnim krokiem jest kompresja pliku w formacie raw i konwersja do qcow2:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
qemu-img convert -c -p -f raw nazwa-pliku.raw -O qcow2 nazwa-pliku.qcow2
&lt;/pre&gt;
&lt;p&gt;Utrzymywanie hostów wirtualnych na woluminach lvm pozwala na uzyskanie maksymalnej szybkości dla operacji I/O.
Trzymanie ich kopii w formacie qcow2 pozwala na zaoszczędzenie miejsca oraz szybkie uruchomienie ich na innej maszynie (wystarczy zmienić wpisy dla HDD w konfiguracji hosta wirtualnego z lvm/raw na plik qcow2).&lt;/p&gt;
</content><category term="tools"/><category term="admin-tool"/><category term="hardware"/><category term="linux"/><category term="virtualization"/></entry><entry><title>[13] Pandoc: RST &gt;&gt; (X)HTML</title><link href="https://notatnik.akademicki.eu/pandoc-intro.html" rel="alternate"/><published>2014-12-20T22:00:00+01:00</published><updated>2014-12-20T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-12-20:/pandoc-intro.html</id><summary type="html">&lt;p class="first last"&gt;&lt;em&gt;Pandoc&lt;/em&gt; to wygodne narzędzie do konwertowania plików w formacie &lt;em&gt;RST&lt;/em&gt; do &lt;em&gt;(X)HTML&lt;/em&gt; (lub innych). W pakietach debiana i ubuntu jest mała niedogodność instalacji: np. dla &lt;em&gt;slidy2&lt;/em&gt; należy skopiować odpowiedni plik szablonu do katalogu domowego użytkownika.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Od ponad dwóch lat wszystkie moje prezentacje i materiały wykładowe piszę w formacie &lt;em&gt;RST&lt;/em&gt; (ReStructuredText).
Pliki te w łatwy sposób konwertuje się do innych formatów - ja najczęściej wybieram (X)HTML a w szczególności promowane przez &lt;em&gt;W3C&lt;/em&gt; &lt;strong&gt;Slidy2&lt;/strong&gt;.
Po dodaniu skryptów napisanych w Python-ie otrzymałem automat, który z zadeklarowanych modułów (plików RST) tworzy prezentacje/materiały dla całej serii wykładów i inne dokumenty o hierarchicznej strukturze.&lt;/p&gt;
&lt;p&gt;Małą niedogodnością jest fakt, że w przypadku pakietów debiana/ubuntu &lt;em&gt;pandoc&lt;/em&gt; nie potrafił znaleźć odpowiedniego szablonu dla slidy2.
Najprostszym rozwiązaniem jest jego skopiowanie do katalogu domowego użytkownika.&lt;/p&gt;
&lt;p&gt;Plik szablonu HOME/.pandoc/templates/default.slidy:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;
 &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;$if(lang)$ lang=&amp;quot;$lang$&amp;quot; xml:lang=&amp;quot;$lang$&amp;quot;$endif$&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;
  &amp;lt;meta http-equiv=&amp;quot;Content-Style-Type&amp;quot; content=&amp;quot;text/css&amp;quot; /&amp;gt;
  &amp;lt;meta name=&amp;quot;generator&amp;quot; content=&amp;quot;pandoc&amp;quot; /&amp;gt;
$for(author-meta)$
  &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;$author-meta$&amp;quot; /&amp;gt;
$endfor$
$if(date-meta)$
  &amp;lt;meta name=&amp;quot;date&amp;quot; content=&amp;quot;$date-meta$&amp;quot; /&amp;gt;
$endif$
  &amp;lt;title&amp;gt;$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$&amp;lt;/title&amp;gt;
  &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;code{white-space: pre;}&amp;lt;/style&amp;gt;
$if(highlighting-css)$
  &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
$highlighting-css$
  &amp;lt;/style&amp;gt;
$endif$
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection, print&amp;quot;
    href=&amp;quot;$slidy-url$/styles/slidy.css&amp;quot; /&amp;gt;
$for(css)$
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection, print&amp;quot;
   href=&amp;quot;$css$&amp;quot; /&amp;gt;
$endfor$
$if(math)$
  $math$
$endif$
$for(header-includes)$
  $header-includes$
$endfor$
  &amp;lt;script src=&amp;quot;$slidy-url$/scripts/slidy.js&amp;quot;
    charset=&amp;quot;utf-8&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
$if(duration)$
  &amp;lt;meta name=&amp;quot;duration&amp;quot; content=&amp;quot;$duration$&amp;quot; /&amp;gt;
$endif$
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
$for(include-before)$
$include-before$
$endfor$
$if(title)$
&amp;lt;div class=&amp;quot;slide titlepage&amp;quot;&amp;gt;
  &amp;lt;h1 class=&amp;quot;title&amp;quot;&amp;gt;$title$&amp;lt;/h1&amp;gt;
  &amp;lt;p class=&amp;quot;author&amp;quot;&amp;gt;
$for(author)$$author$$sep$&amp;lt;br/&amp;gt;$endfor$
  &amp;lt;/p&amp;gt;
$if(date)$
  &amp;lt;p class=&amp;quot;date&amp;quot;&amp;gt;$date$&amp;lt;/p&amp;gt;
$endif$
&amp;lt;/div&amp;gt;
$endif$
$body$
$for(include-after)$
$include-after$
$endfor$
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Następny krok to poprawienie/zmiana szablonów CSS, które w oryginalnej formie nie wyglądają moim zdaniem zbyt dobrze.
Szczególnie dotyczy to umieszczanych ilustracji na stronie.
I tu wygodny jest fakt, że po przekierowaniu do jednego adresu na serwerze wszystkich odwołań do CSS wystarczy zmienić jeden plik szablonu, by wszystkie prezentacje zyskały świeży wygląd - nawet te stare, dawno napisane.&lt;/p&gt;
</content><category term="programming"/><category term="software"/><category term="doc-utils"/><category term="web-tool"/></entry><entry><title>[12] Open Virtual Switch - wprowadzenie</title><link href="https://notatnik.akademicki.eu/openvswitch-intro.html" rel="alternate"/><published>2014-11-14T22:00:00+01:00</published><updated>2015-08-14T21:10:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-11-14:/openvswitch-intro.html</id><summary type="html">&lt;p class="first last"&gt;Wirtualizacja komputerów wymaga rozwiązania kwestii połączeń sieciowych. Historycznie najpierw budowane były mosty o funkcjonalności hub-a dzięki pakietowi bridge-utils. Później hosty wirtualne łączono z zachowaniem funkcjonalności switcha dzięki VDE2 (Virtual Distributed Ethernet). Obecnie preferowane jest rozwiązanie openvswitch, które funkcjonalnością dorównuje bardzo zaawansowanym zarządzalnym switch-om.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Zapewnienie łączności dla hostów wirtualnych wymaga ich połączenia między sobą, jak i udostępnienia ich usług poza maszynę gospodarza.
Osobiście preferuję izolację tych dwóch sieci.
Aby otrzymać taką funkcjonalność należy (po zainstalowaniu i uruchomieniu openvswitch, który jest dość skomplikowanym i wieloelementowym tworem) utworzyć dwa switch-e wirtualne:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
ovs-vsctl add-br vbr0
ovs-vsctl add-br vbr1
&lt;/pre&gt;
&lt;p&gt;Switch vbr0 obsługuje sieć zewnętrzną zaś vbr1 sieć wewnętrzną w ramach jednej maszyny fizycznej.&lt;/p&gt;
&lt;p&gt;Aby udostępnić switch vbr0 hostom wirtualnym, z zapewnieniem komunikacji na zewnątrz maszyny fizycznej, należy go połączyć z kartą sieciową.
Ja używam do tego celu dedykowanej karty sieciowej, by nie zakłócać w żadnym razie komunikacji z gospodarzem (eth0 - host gospodarza, eth1 - maszyny wirtualne).
Zatem odpowiednie wpisy w /etc/network/interfaces wyglądają następująco:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# Network interface for VMs
auto eth1
allow-vbr0 eth1
iface eth1 inet manual
   ovs_bridge vbr0
   ovs_type OVSPort

# ovswitch: vbr0
auto vbr0
allow-ovs vbr0
iface vbr0 inet manual
   ovs_type OVSBridge
   ovs_ports eth1
   up ovs-vsctl add-port vbr0 eth1
&lt;/pre&gt;
&lt;p&gt;Gospodarz pracuje niezależnie na karcie eth0 dla której posiada odrębną konfigurację.&lt;/p&gt;
&lt;p&gt;Teraz pozostaje udostępnić wirtualne switche hostom wirtualnym.
Używając libvirt do zarządzania hostami wirtualnymi na bazie KVM najlepszym sposobem jest utworzenie sieci (w libvirt) podłączonych do wcześniej przygotowanych switch-y.&lt;/p&gt;
&lt;p&gt;Plik konfiguracyjny sieci wygląda tak (ovsnet.xml):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;lt;network&amp;gt;
  &amp;lt;name&amp;gt;xxxx&amp;lt;/name&amp;gt;
  &amp;lt;forward mode='bridge'/&amp;gt;
  &amp;lt;bridge name='yyy' /&amp;gt;
  &amp;lt;virtualport type='openvswitch'/&amp;gt;
&amp;lt;/network&amp;gt;
&lt;/pre&gt;
&lt;p&gt;gdzie xxxx to nazwa sieci a yyy to nazwa switch-a wcześniej utworzonego (vbr0, vbr1).&lt;/p&gt;
&lt;p&gt;Aktywacja sieci odbywa się poprzez:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
virsh net-define ovsnet.xml
virsh net-start xxxx
virsh net-autostart xxxx
&lt;/pre&gt;
&lt;p&gt;co tworzy sieć, uruchamia ją oraz zapisuje do uruchomienia po każdorazowym włączeniu komputera.&lt;/p&gt;
&lt;p&gt;Posiadając sieci zdefiniowane i uruchomione wystarczy je wskazać dla tworzonej nowej maszyny wirtualnej.
Zazwyczaj można wybrać tylko jedną sieć przy instalacji, zatem wybieramy sieć zewnętrzną (np. w virt-manager).
Sieć wraz z automatycznie tworzoną wirtualną kartą sieciową w VPS można zawsze dołożyć edytując plik konfiguracyjny hosta:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
virsh edit nazwa-vps
&lt;/pre&gt;
&lt;p&gt;Dodać należy wpis dla wybranej sieci::&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;lt;interface type='network'&amp;gt;
    &amp;lt;source network='xxxx'/&amp;gt;
    &amp;lt;model type='virtio'/&amp;gt;
&amp;lt;/interface&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Użycie &lt;em&gt;virsh edit&lt;/em&gt; gwarantuje automatyczne dodanie prawidłowego wpisu &lt;em&gt;mac address&lt;/em&gt; oraz &lt;em&gt;adress type&lt;/em&gt; dla danego interfejsu sieciowego.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ubuntu 15.04&lt;/em&gt; wymaga dodania skryptu &lt;em&gt;if-up&lt;/em&gt; uruchamiajacego switch: &lt;em&gt;ovs-vsctl add-br vbr0&lt;/em&gt; by zainicjować automatycznie interface switcha po uruchomieniu komputera.&lt;/p&gt;
</content><category term="tools"/><category term="admin-tool"/><category term="virtualization"/><category term="hardware"/><category term="hosting"/></entry><entry><title>[11] Phottix: 1 + 1 + 1 = 2</title><link href="https://notatnik.akademicki.eu/phottix-1-1-1.html" rel="alternate"/><published>2014-10-12T19:00:00+02:00</published><updated>2014-10-12T19:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-10-12:/phottix-1-1-1.html</id><summary type="html">&lt;p class="first last"&gt;Zastosowanie lampy reporterskiej do statywu oświetleniowego wymaga, w przypadku uchwytów Phottix, połączenia różnych modeli. Połączyć należy Phottix Varos II BG i Varos II XS a mocowanie lampy z Phottix Varos II GB przełożyć do Varos II.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Uchwyty do statywów oświetleniowych firmy Phottix cieszą się dużą popularnością i dobrą opinią.
Ironią jednak jest, że właśnie lampy Phottix Mitros trudno zamontować wzdłuż uchwytu parasola, choć wszystkie z wymienionych teoretycznie na to pozwalają.
W przypadku zastosowania każdego z tych uchwytów lampa opiera się o parasol i niebezpiecznie się odgina co nie służy jej dobrze.&lt;/p&gt;
&lt;p&gt;Aby temu zaradzić trzeba połączyć trzy uchwyty w dwa.
Phottix Varos II BG łączymy trzpieniem z Varos II XS.
Uwolnione z Varos II GB długie mocowanie lampy należy zamienić z tym (za krótkim) z Varos II.&lt;/p&gt;
&lt;p&gt;W ten sposób z trzech uchwytów otrzymujemy dwa - za to w pełni funkcjonalne.&lt;/p&gt;
</content><category term="tools"/><category term="photo"/><category term="lighting"/></entry><entry><title>[10] pyenv - zarządzanie wersjami i środowiskami wirtualnymi Pythona</title><link href="https://notatnik.akademicki.eu/pyenv-python-version-management.html" rel="alternate"/><published>2014-09-03T08:00:00+02:00</published><updated>2014-09-03T08:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-09-03:/pyenv-python-version-management.html</id><summary type="html">&lt;p class="first last"&gt;Dystrybucje linuksa dostarczają najczęściej dwie wersje Pythona: 2.x i 3.x. Jednak można zainstalować więcej wersji pod warunkiem, że rozwiąże się sprawę zarządzania nimi. &lt;em&gt;Pyenv&lt;/em&gt; jest jednym z takich narzędzi, które poprzez wtyczki pozwala również zarządzać wirtualnymi środowiskami typu &lt;em&gt;virtualenv&lt;/em&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;strong&gt;Pyenv&lt;/strong&gt; to proste narzędzie, które wydaje się dobrze współpracować z obecnymi wydaniami Pythona oraz poprawnie zarządzać w nich wirtualnymi środowiskami.
W większości nie zależy przy tym od samego pythona (nie dotyczy to wtyczek).
Prosta jest instalacja i konfiguracja.&lt;/p&gt;
&lt;p&gt;Adres pyenv (Simple Python version management):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
https://github.com/yyuu/pyenv
&lt;/pre&gt;
&lt;p&gt;Wtyczki:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;pyenv-virtualenv&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/yyuu/pyenv-virtualenv"&gt;https://github.com/yyuu/pyenv-virtualenv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;dodaje funkcjonalność &lt;em&gt;virtualenv&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;pyenv-virtualenvwrapper&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/yyuu/pyenv-virtualenvwrapper"&gt;https://github.com/yyuu/pyenv-virtualenvwrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;dodaje funkcjonalność &lt;em&gt;virtualenvwrapper&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;pyenv-pip-rehash&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/yyuu/pyenv-pip-rehash"&gt;https://github.com/yyuu/pyenv-pip-rehash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;automatyzuje polecenie &lt;em&gt;pyenv rehash&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rozwiązanie umożliwia instalację niemal dowolnej wersji Pythona 2.0 - 3.x a nawet dystrybucji typu &lt;em&gt;anaconda&lt;/em&gt;.
Nie zarządza przy tym pakietami pythona.&lt;/p&gt;
&lt;p&gt;Instalacja ręczna wybranej wersji Pythona wydaje się nadal mieć sens w przypadku serwera produkcyjnego lecz w środowisku deweloperskim jest raczej mało elastycznym rozwiązaniem.&lt;/p&gt;
</content><category term="tools"/><category term="python"/><category term="linux"/><category term="admin-tool"/></entry><entry><title>[9] Repozytoria dodatkowe dla debiana (wheezy)</title><link href="https://notatnik.akademicki.eu/debian-wheezy-repositories.html" rel="alternate"/><published>2014-08-09T11:00:00+02:00</published><updated>2014-08-09T11:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-08-09:/debian-wheezy-repositories.html</id><summary type="html">&lt;p class="first last"&gt;Debian wheezy na następcę jeszcze trochę poczeka. Z tego powodu coraz bardziej brakuje świeżych wersji oprogramowania. Wydłuża się zatem lista repozytoriów, które dodaje się do źródeł pakietów.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Na sewerze nikt nie szaleje z nieprzetestowanym gruntownie oprogramowaniem ale czasami nie ma wyjścia - szczególnie w trakcie tworzenia nowego oprogramowania i pracy analitycznej.&lt;/p&gt;
&lt;p&gt;Lista moich obowiązkowych repozytoriów dla debiana (wheezy) spoza oficjalnej dystrybucji, obecnie wygląda tak:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;postgresql i zależności:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;backporty m.in. dla uzyskania jądra linuksa na którym działa &lt;em&gt;Docker&lt;/em&gt; i inne nowoczesne narzędzia:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
deb http://http.debian.net/debian wheezy-backports main
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Po zainstalowaniu dodatkowych certyfikatów dla &lt;em&gt;apt&lt;/em&gt; obecnie wszystko działa bez problemów.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="linux"/></entry><entry><title>[8] Python 3.4 w debian wheezy</title><link href="https://notatnik.akademicki.eu/python34-and-pyvenv-on-wheezy.html" rel="alternate"/><published>2014-07-12T09:00:00+02:00</published><updated>2014-07-12T09:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-07-12:/python34-and-pyvenv-on-wheezy.html</id><summary type="html">&lt;p class="first last"&gt;Debian (wheezy) jest leciwym wydaniem tej dystrybucji. Jest więc wiele pakietów których brak w najnowszych wersjach - w tym Python 3.4.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Brak Pythona 3.4 w Debianie (wheezy) jest dokuczliwy, gdy rozpoczyna się duży projekt o zakładanym kilkuletnim cyklu życia.
Patrząc jednak bardziej elastycznie możemy uzyskać interpreter niezależny od pakietów systemowych i samej instalacji dystrybucji co może być całkiem wdzięczne w trakcie rozwoju oprogramowania.&lt;/p&gt;
&lt;p&gt;Instalacja Pythona 3.4 jest bardzo prosta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;instalacja pakietów wymaganych do kompilacji:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;build-essential&lt;/li&gt;
&lt;li&gt;libncurses5-dev libncursesw5-dev libreadline6-dev&lt;/li&gt;
&lt;li&gt;libdb5.1-dev libgdbm-dev libsqlite3-dev libssl-dev&lt;/li&gt;
&lt;li&gt;libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;pobranie źródeł z &lt;em&gt;python.org&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;instalacja:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
tar -zxf Python-3.4.2.tgz
cd Python-3.4.2
./configure --prefix=/usr/local/opt/python-3.4.2
make
make altinstall
sudo make install
cd ..
rm -rf Python-3.4.2
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Po zainstalowaniu Pythona trzeba jeszcze go udostępnić do użycia.
Skoro i tak większość aplikacji będzie korzystać z środowiska typu &lt;em&gt;virtualenv&lt;/em&gt; to użyć można to do udzielenia dostępu do interpretera w systemie.
Python 3.4 ma wbudowany pyvenv i pip zatem łatwo stworzyć nowe środowisko:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cd /katalog/srodowisk/wirtualnych/
/usr/local/opt/python-3.4.2/bin/pyvenv-3.4 srodowisko-testowe
&lt;/pre&gt;
&lt;p&gt;Uruchomienie środowisko łatwo wykonać przez alias:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
alias start_venv='source /katalog/srodowisk/wirtualnych/srodowisko-testowe/bin/activate'
&lt;/pre&gt;
&lt;p&gt;Wyłączenie środowiska następuje normalnie przez &lt;em&gt;deactivate&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Brak co prawda &lt;em&gt;virtualenvwrapper&lt;/em&gt; z jego praktycznością i wygodą ale na to trzeba będzie jeszcze poczekać.&lt;/p&gt;
&lt;p&gt;Dodatkową zaletą jest niezależność i pełna kontrola nad interpreterem jak w &lt;em&gt;conda&lt;/em&gt;.
Usunięcie interpretera i wszystkiego co z nim związane sprowadza się do usunięcia jego katalogu.&lt;/p&gt;
</content><category term="tools"/><category term="linux"/><category term="python"/><category term="admin-tool"/></entry><entry><title>[7] Redukcja rozmiaru pliku qcow2 przy konwersji z woluminu lvm</title><link href="https://notatnik.akademicki.eu/qcow2-image-size.html" rel="alternate"/><published>2014-06-14T12:00:00+02:00</published><updated>2014-06-14T12:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-06-14:/qcow2-image-size.html</id><summary type="html">&lt;p class="first last"&gt;Obrazy KVM w formacie qcow2 mogą mieć zmienny rozmiar jednak przy konwersji z woluminu lvm do qcow2 standardowo wielkość jest niemal równa maksymalnie deklarowanej.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Tworząc obraz KVM na woluminie LVM deklaruje się rozmiar zasobu.
Później podczas konwersji woluminu do pliku w formacie qcow2 nawet po ustawieniu kompresji rozmiar niewiele się zmniejsza.
Wynika to z postaci danych zapisanych na woluminie.
Wystarczy jednak utworzyć plik którego zawartość to same zera, który wypełni całą dostępną pojemność zasobu (i później go skasować).
Wtedy przy konwersji do pliku w formacie qcow2 nastąpi znaczna redukcja miejsca zajmowanego przez obraz.
Operację tą wystarczy zrobić jednorazowo.&lt;/p&gt;
&lt;p&gt;Cała operacja sprowadza się do dwóch kroków:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;dd if=/dev/zero of=/tmp/mytempfile.txt&lt;/li&gt;
&lt;li&gt;rm /tmp/mytempfile.txt&lt;/li&gt;
&lt;/ol&gt;
</content><category term="tools"/><category term="linux"/><category term="admin-tool"/><category term="virtualization"/></entry><entry><title>[6] Conda czy virtualenv z pip? (Python)</title><link href="https://notatnik.akademicki.eu/conda-vs-virtualenv.html" rel="alternate"/><published>2014-05-24T21:00:00+02:00</published><updated>2014-05-24T21:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-05-24:/conda-vs-virtualenv.html</id><summary type="html">&lt;p class="first last"&gt;Zarządzanie pakietami aplikacji i bibliotek napisanych w języku Python do tej pory nie doczekało się ostatecznego rozwiązania. Obecnie najbardziej popularne rozwiązania to &lt;em&gt;virtualenv&lt;/em&gt; wraz z &lt;em&gt;pip&lt;/em&gt; oraz &lt;em&gt;conda&lt;/em&gt; ( w tym &lt;em&gt;anaconda&lt;/em&gt; ).&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;Conda&lt;/em&gt; (Continuum) jako narzędzie do zarządzania pakietami oraz środowiskami uruchomieniowymi dla Pythona jest obecnie bardzo popularna wśród środowisk naukowych.
Zrozumiałe jest to w przypadku MS Windows który od zawsze był wyzwaniem dla programistów i administratorów wymagając dodatkowych rozwiązań umożliwiających pracę.
W ten kierunek dobrze wpisuje się conda.
Bez tego rozwiązania instalacja niektórych bibliotek na MS Windows jest dużym problemem.&lt;/p&gt;
&lt;p&gt;Jednak w przypadku dystrybucji linuksowych sytuacja jest inna.
Środowiska te doskonale nadają się do programowania, obliczeń i zastosowań serwerowych bez dodatkowych dedykowanych (i komercyjnych) narzędzi.
Zarządzanie pakietami jest możliwe m.in. dzięki &lt;em&gt;virtualenv&lt;/em&gt; oraz &lt;em&gt;pip&lt;/em&gt; a instalacja pakietów nie jest zazwyczaj problemem bo bez większego trudu można spełnić wszystkie wymagane zależności.&lt;/p&gt;
&lt;p&gt;Co daje zatem sama &lt;em&gt;conda&lt;/em&gt; ?
Jest to wygodne narzędzie jeśli ktoś korzysta zarówno z MS Windows jak i dystrybucji Linuksa zapewniając zunifikowane warunki uruchomieniowe pracy.
W przypadku Linuksa zalety bledną wobec wad tego rozwiązania: uzależnienie od kanałów z dodatkowymi pakietami, konieczność ich własnej budowy dla nowych wersji Pythona (np. w chwili obecnej nie ma nawet zbudowanego pakietu na binstar.org dla &lt;em&gt;psycopg2&lt;/em&gt; a sama baza pakietów (główny kanał) nie dostarcza nawet tak podstawowych binariów).
Po co dokładać dodatkową warstwę administracji i kombinować niepotrzebnie przy pakietach?
Być może w bardzo zróżnicowanych środowiskach przy zapewnieniu wieloletniego wsparcia rozwiązanie przedstawia wartość dodaną jednak są to przypadki dość rzadko spotykane.
&lt;em&gt;Anaconda&lt;/em&gt; daje zintegrowane środowisko analizy danych lecz co po tym jeśli brakuje pakietów często używanych.&lt;/p&gt;
&lt;p&gt;Tak więc jeśli ktoś nie korzysta z MS Windows to gra nie jest warta trudu.
&lt;em&gt;Virtualenv&lt;/em&gt; razem z &lt;em&gt;pip&lt;/em&gt; w zupełności spełnią wszystkie zadania i przy okazji pozwolą na bieżąco śledzić ewolucję oficjalnego wsparcia dla pakietów w języku Python.&lt;/p&gt;
</content><category term="tools"/><category term="python"/><category term="admin-tool"/></entry><entry><title>[5] Likwidacja domowego serwera publicznego - przeprowadzka na VPS</title><link href="https://notatnik.akademicki.eu/moving-to-vps.html" rel="alternate"/><published>2014-04-28T00:00:00+02:00</published><updated>2014-04-28T00:00:00+02:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-04-28:/moving-to-vps.html</id><summary type="html">&lt;p class="first last"&gt;Przeniesienie serwera do serwerowni zwiększyło znacząco niezawodność wszystkich usług oferowanych publicznie choć ograniczenia wirtualizacji spowodowały konieczność zmiany całej infrastruktury zbudowanej do tej pory.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Od teraz wszystkie usługi publiczne dostępne będę przez hosting zewnętrzny.
Serwer trzymany w domu choć ideologicznie poprawny i najbardziej elastyczny w zastosowaniu nie zdaje egzaminu na bardzo zawodnym łączu 60/6 Mb/s jakie posiadam.&lt;/p&gt;
&lt;p&gt;Serwer VPS jest ekonomicznie równorzędnym rozwiązaniem po uwzględnieniu energii, sprzętu i odpowiedniego łącza do Internetu.
Niezawodność samego serwera jest podobna lecz warunki sieciowe w serwerowni są dużo lepsze.&lt;/p&gt;
&lt;p&gt;Zatem przenoszę wszystkie usługi publiczne na VPS.
Wybrałem OpenVZ.
Dobrze to chodziło jakiś czas temu na domowym serwerze choć może obecnie nie jest szczytem innowacyjności.
Cena odpowiednia, limity przyzwoite - czas pokaże czy jest to dobra decyzja.&lt;/p&gt;
&lt;p&gt;Zmiana OpenVZ na KVM lub jakiekolwiek inne rozwiązanie nie powinna być już trudna - architektura pozostanie ta sama, zmienią się tylko narzędzia.&lt;/p&gt;
</content><category term="tools"/><category term="admin"/><category term="hosting"/><category term="virtualization"/></entry><entry><title>[3] Zarządzanie atrybutami obiektów przez właściwości</title><link href="https://notatnik.akademicki.eu/intro-to-python-properties.html" rel="alternate"/><published>2014-03-14T22:00:00+01:00</published><updated>2014-03-14T22:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-03-14:/intro-to-python-properties.html</id><summary type="html">&lt;p class="first last"&gt;Protokół &lt;em&gt;właściwości&lt;/em&gt; w języku Python jest bardzo wygodnym narzędziem do zarządzania atrybutami obiektów.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;W projekcie MAULWURF występuje wiele atrybutów obiektów, które przy wprowadzaniu powinny być sprawdzone co do poprawności lub ich wartość jest za każdym razem obliczana na podstawie innych, dostępnych informacji.&lt;/p&gt;
&lt;p&gt;Po dłuższym poszukiwaniu właściwej techniki wprowadzenia odpowiedniego zachowania się klas najlepszym rozwiązaniem okazał się protokół właściwości wbudowany w język Python.&lt;/p&gt;
&lt;p&gt;Implementacja właściwości następuje przez zdefiniowanie wybranych metod: get, set, del, doc oraz zadeklarowanie &lt;em&gt;właściwości&lt;/em&gt;.
Deklaracja właściwości to tylko jedna linia: NAZWA = property(getNAZWA, setNAZWA, delNAZWA, &amp;quot;DOKUMENTACJA/KOMENTARZ&amp;quot;).&lt;/p&gt;
&lt;p&gt;W przypadku dokumentacji w Sphinxie pamiętać należy o tym aby deklarować w &lt;em&gt;autoclass&lt;/em&gt; wszystkie pożądane elementy &lt;em&gt;members&lt;/em&gt;.
W innym przypadku, gdy dołączone są domyślnie wszystkie zmienne może się okazać, że występujące metody get, set, del, doc zmniejszają czytelność.
Dla poprawienia czytelności opisu, cały komentarz dokumentacji najlepiej dołączyć do deklaracji właściwości jako opisującej całe zachowanie atrybutu.&lt;/p&gt;
&lt;p&gt;Od tego czasu dostęp do atrybutu obiektu możliwy jest w wygodny sposób, taki sam jak do dowolnej zmiennej.&lt;/p&gt;
&lt;p&gt;Inne techniki, które służą do obsługi pożądanego zachowania obiektów (np. dekoratory, deskryptory itp.) nie prezentowały się dobrze w omawianym projekcie.
Główne wady tych alternatyw to albo odmienne od pożądanego w projekcie zachowanie albo mniejsza czytelność kodu.
Po relatywnie długim opisie każdego atrybutu w trakcie jego definiowania największą zaletą jest prosta i nie wymagająca długiego pisania ich obsługa w dalszym wykorzystaniu.&lt;/p&gt;
</content><category term="programming"/><category term="python"/><category term="project"/></entry><entry><title>[4] Prowadzenie czasopism naukowych</title><link href="https://notatnik.akademicki.eu/scientific-journal.html" rel="alternate"/><published>2014-02-24T18:00:00+01:00</published><updated>2014-02-24T18:00:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-02-24:/scientific-journal.html</id><summary type="html">&lt;p class="first last"&gt;Notatki z prezentacji o ministerialnych wymaganiach i ocenie czasopism naukowych.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Dziś miałem przyjemność przedstawić zagadnienia związane z prowadzeniem czasopism naukowych.
Prezentacja miała charakter bardzo podstawowy i miała pokazać subiektywną interpretację co do podstawowych wymagań stawianych czaspismom naukowym.
Całość (bez dodatkowych komentarzy) jest dostępna &lt;a class="reference external" href="http://cdn.netlib.eu/materialy/czasopismapunktowane20132014/"&gt;online.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Największe zainteresowanie jak zwykle wzbudziło zagadnienie punktacji 20+ czyli czaspism posiadających IF.&lt;/p&gt;
</content><category term="academic"/><category term="evaluation"/><category term="journal"/><category term="science"/></entry><entry><title>[2] Środowiska pracy: KVM, VirtualBox</title><link href="https://notatnik.akademicki.eu/virtual-workspaces.html" rel="alternate"/><published>2014-01-14T22:20:00+01:00</published><updated>2014-01-14T22:20:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-01-14:/virtual-workspaces.html</id><summary type="html">&lt;p class="first last"&gt;Wirtualizacja KVM i VirtualBox stanowić może podstawę dedykowanych obszarów roboczych&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Różne zadania wymagają różnych narzędzi.
Po kilku latach pozytywnych doświadczeń z wirtualizacją na serwerze, gdzie poszczególne hosty wirtualne wykonywały przydzielone im zadania przyszedł czas na stację roboczą.
Do tej pory na serwerze używałem po kolei: Xen, OpenVZ, KVM co było ciekawym doświadczeniem.
Obecnie nie używam już wirtualizacji na serwerze w zastosowaniach prywatnych - choć jestem ich zwolennikiem w środowiskach produkcyjnych o większych wymaganiach.
Ich utrzymanie nie było efektywne czasowo w moich warunkach i zamiast rozbudowy infrastruktury uprościłem i ograniczyłem wymagania oprogramowania.
Skąd się wziął zatem pomysł na wirtualizację na stacji roboczej?&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Aktualność: oprogramowanie stabilne jest najczęściej nieaktualne, bez najnowszych funkcji.&lt;/li&gt;
&lt;li&gt;Stabilność: nowe oprogramowanie jest często niestabilne.&lt;/li&gt;
&lt;li&gt;Elastyczność: w zależności od zadania potrzebne są różne zestawy narzędzi, które nie są potrzebne jednocześnie (a trudne w utrzymaniu).&lt;/li&gt;
&lt;li&gt;Skalowalność: jeśli na stacji roboczej jest zbyt mało zasobów do wykonania zadania to dobrze jest przenieść obliczenia na inną maszynę bez dodatkowej pracy.&lt;/li&gt;
&lt;li&gt;Bezpieczeństwo: próbując nowe rozwiązania nie priorytetyzuje się bezpieczeństwa, więc zanim zostaną sprawdzone warto je wyizolować.&lt;/li&gt;
&lt;li&gt;Zarządzalność: pracując równolegle nad różnymi zadaniami dobrze jest móc określić dostępne dla nich zasoby.&lt;/li&gt;
&lt;li&gt;Reprodukcja środowiska: złożone prace administratorskie są maksymalnie uproszczone (zmiana następuje tylko w wybranym komponencie a reszta jest przenoszona bez zmian)&lt;/li&gt;
&lt;li&gt;Kontrola: zainstalowane jest tylko to co jest konieczne (jak coś nie działa łatwiej to rozpoznać, ...) a przyznanie wysokich uprawnień użytkownikowi dotyczy tylko jednego hosta wirtualnego.&lt;/li&gt;
&lt;li&gt;Mobilność: jeśli jest taka potrzeba to można zabrać hosty wirtualne ze sobą i korzystać z nich w wielu miejscach.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Problemem w pracy zdalnej zawsze było środowisko graficzne ale i tak najczęściej wykorzystuję VIM pod konsolą.
W pracy nie potrzebuję zaawansowanego środowiska graficznego 3D.&lt;/p&gt;
&lt;p&gt;Implementacja:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;System główny: wybrałem KDE (Gnome stracił wizję stabilnego rozwoju a inne środowiska mają mniejszą funkcjonalność), po Debianie, OpenSUSE przyszedł czas na Kubuntu które w wydaniu LTS daje stabilność i prostotę obsługi urządzeń zewnętrznych w długim okresie czasu.&lt;/li&gt;
&lt;li&gt;Wirtualizacja: KVM (LXC nie pozwala na zastosowanie różnych kerneli) gdy nie potrzeba środowiska graficznego, VirtualBox gdy potrzebne jest podstawowe środowisko graficzne.&lt;/li&gt;
&lt;li&gt;Łączność: Openvswitch dla hostów wirtualnych dla których komunikacja routowana jest przez gospodarza.&lt;/li&gt;
&lt;li&gt;Hosty wirtualne: Arch, Ubuntu server, debian.&lt;/li&gt;
&lt;li&gt;Zaszyfrowany dysk z LVM przeznaczony wyłącznie dla hostów wirtualnych zwiększa prędkość działania i upraszcza administrację.&lt;/li&gt;
&lt;li&gt;Zdalny dostęp do systemów plików hostów wirtualnych następuje po sshfs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Na głównym systemie stacji roboczej pozostają:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;aplikacje graficzne intensywnie korzystające z CPU i GPU (blender, ...),&lt;/li&gt;
&lt;li&gt;aplikacje multimedialne (przeglądarka internetowa, gry, ...),&lt;/li&gt;
&lt;li&gt;aplikacje które używane są równolegle do różnych zadań realizowanych na hostach wirtualnych (LibreOffice, ...).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Choć wygląda to na skomplikowaną konfigurację okazuje się ona praktyczna.
Można więcej oprogramowania przenieść na hosty wirtualne jednak obecne rozwiązanie wydaję się być najbardziej wygodne.&lt;/p&gt;
&lt;p&gt;Nie w każdych warunkach podział: praca (hosty wirtualne) oraz grafika, rozrywka i multimedia (system główny gospodarza) się sprawdzi - u mnie działa dobrze.&lt;/p&gt;
</content><category term="tools"/><category term="linux"/><category term="virtualization"/></entry><entry><title>[1] Uruchomienie strony</title><link href="https://notatnik.akademicki.eu/init-post.html" rel="alternate"/><published>2014-01-06T10:20:00+01:00</published><updated>2014-01-06T10:20:00+01:00</updated><author><name>Piotr Czaja</name></author><id>tag:notatnik.akademicki.eu,2014-01-06:/init-post.html</id><summary type="html">&lt;p class="first last"&gt;Uruchomiemie strony z wiadomościami&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Po kilku latach przyszedl czas by uruchomić jedną z ostatnich oczekiwanych funkcjonalności.
Na stronie dostępne będą informacje publikowane w domenie &lt;em&gt;ovzo.net&lt;/em&gt; niezależnie od adresata i przeznaczenia.
Aby umożliwić odpowiednią nawigację wprowadzone zostały kategorie.&lt;/p&gt;
</content><category term="general"/><category term="admin"/><category term="web-tool"/></entry></feed>