User Tools

Site Tools


sk2:zajecia_zdalne

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sk2:zajecia_zdalne [2020/11/29 12:41] – [Oprogramowanie do zdalnych zajęć] jkonczaksk2:zajecia_zdalne [2021/12/18 12:38] (current) – [Oprogramowanie do zdalnych zajęć] jkonczak
Line 1: Line 1:
 ====== Oprogramowanie do zdalnych zajęć ====== ====== Oprogramowanie do zdalnych zajęć ======
  
-++++ Programowanie niekopoziomowe (zajęcia 1-6) |+++++ Programowanie niskopoziomowe |
  
 Do zajęć zdalnych koniecznie musicie mieć do dyspozycji: Do zajęć zdalnych koniecznie musicie mieć do dyspozycji:
   * system operacyjny GNU/Linux   * system operacyjny GNU/Linux
-  * dowolny współczesny kompilator C/C+''''+:+  * dowolny współczesny kompilator C/C+%%%%+:
     * polecane: [[https://gcc.gnu.org/|GCC]] w wersji ≥9 lub [[https://clang.llvm.org/|Clang]] w wersji ≥ 9     * polecane: [[https://gcc.gnu.org/|GCC]] w wersji ≥9 lub [[https://clang.llvm.org/|Clang]] w wersji ≥ 9
-    * uwaga: proszę sprawdzić działanie kompilatora na [[https://gitlab.cs.put.poznan.pl/jkonczak/sk2_examples/raw/master/l4/l4_z1_lambda.cpp|przykładowym pliku]] - plik powinien się kompilować komendą ''c+''''+ -pthread --std=c+''''+2a l4_z1_lambda.cpp''((jeśli kompilator narzeka na ''--std=c+''''+2a'', to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z ''--std=c+''''+1z'', to na potrzeby zajęć wystarczy))+    * uwaga: proszę sprawdzić działanie kompilatora na [[https://gitlab.cs.put.poznan.pl/jkonczak/sk2_examples/raw/master/l4/l4_z1_lambda.cpp|przykładowym pliku]] - plik powinien się kompilować komendą ''c+%%%%+ -pthread --std=c+%%%%+2a l4_z1_lambda.cpp''((jeśli kompilator narzeka na ''--std=c+%%%%+2a'', to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z ''--std=c+%%%%+1z'', to na potrzeby zajęć wystarczy))
   * IDE lub edytor tekstowy do pisania kodu:   * IDE lub edytor tekstowy do pisania kodu:
     * przykładowe IDE: [[https://www.kdevelop.org/|kdevelop]], [[https://www.qt.io/product/development-tools|QtCreator]], [[https://www.jetbrains.com/clion/|CLion]] (wersja dla edukacji jest bezpłatna)     * przykładowe IDE: [[https://www.kdevelop.org/|kdevelop]], [[https://www.qt.io/product/development-tools|QtCreator]], [[https://www.jetbrains.com/clion/|CLion]] (wersja dla edukacji jest bezpłatna)
Line 23: Line 23:
     * ''wireshark''     * ''wireshark''
   * wygodny emulator terminala   * wygodny emulator terminala
- 
 ++++ ++++
  
-++++ Qt – 10.11 i 17.11 (grupy wtorkowe) / 25.11 i 2.12 (grupy środowe) (zajęcia 6 i 7) | +**Qt**\\ 
-Proszę zainstalować program qtcreator oraz podstawowe biblioteki deweloperskie, dokumentację i narzędzia frameworku Qt (w wersji 5).  +Proszę zainstalować program qtcreator oraz podstawowe biblioteki deweloperskie, dokumentację i narzędzia frameworku Qt (w wersji 5.15.X lub 6.X). \\ 
-W zdecydowanej większości dystrybucji Linuksa pakiety są dostępne w domyślnych repozytoriach (np. dla Ubuntu: ''qtbase5-dev qt5-doc qtcreator libclang-common-8-dev''((Paczka ''libclang-common-8-dev'' jest wymagana w Ubuntu niezależnie od wersji clanga [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=952718|z niezrozumiałych przeze mnie powodów]]))). \\ +W zdecydowanej większości dystrybucji Linuksa pakiety są dostępne w domyślnych repozytoriach (np. dla Ubuntu: ''qtbase5-dev qt5-doc qtcreator''). \\ 
-Proszę przetestować czy środowisko działa poprawnie kompilując przykładowy kod: {{:sk2:l6_z2_template.tar.xz|}}. +Proszę przetestować czy środowisko działa poprawnie kompilując przykładowy kod: {{:sk2:l6_z2_template.tar.xz|}}. \\ 
-+++++<html><small></html>Uwaga: dla Qt6 trzeba w CMakeLists.txt zmienić wszystkie wystąpienia ''Qt5'' na ''Qt6''<html></small></html>
  
-++++ Java - 24.11 (grupy wtorkowe) / 9.11 (grupy środowe)  (zajęcia 8) |+**Java**\\
 Proszę zainstalować JDK i swoje ulubione IDE do Javy (np. IntelliJ / Eclipse / NetBeans).  Proszę zainstalować JDK i swoje ulubione IDE do Javy (np. IntelliJ / Eclipse / NetBeans). 
-++++ 
  
-++++ DNS - 1.12 (grupy wtorkowe) / 9.12 (grupy środowe) (zajęcia 9) |+++++ DNS |
 Proszę zainstalować programy ''dig'', ''host'' i ''bind''. \\ Proszę zainstalować programy ''dig'', ''host'' i ''bind''. \\
 W zależności od dystrybucji, programy mogą być w paczkach o nazwach: W zależności od dystrybucji, programy mogą być w paczkach o nazwach:
Line 75: Line 73:
  
 ++++ ++++
 +
 +++++ Kształtowanie ruchu |
 +Na zajęciach będziecie pracować na komputerach w laboratorium na Politechnice.
 +Przed zajęciami proszę:
 +  * zalogować się na ''polluks''a (tzn. sprawdzić, czy pamiętacie hasło)
 +  * zalogować się z polluksa na wybrany z komputerów laboratoryjnych (lab-net-[1-16] lub lab-sec-[1-16]):
 +    * swoim kontem ''inf…'', a jeśli się nie da, to
 +    * na konto ''root'' ze standardowym hasłem
 +  * jeśli zalogowaliście się swoim kontem do VLABa, proszę wybrać ''Start local Linux'' i zalogować się po ok. 2 minutach ponownie (na konto root) \\ __Uwaga:__ jeśli na komputerze jest uruchomiona jakaś maszyna wirtualna, może to oznaczać że ktoś pracuje (np. w ramach innych zdalnych zajęć) na tym komputerach, więc proszę wtedy nie wybierać lokalnego linuksa i spróbować później / na innej maszynie.
 +  * uruchomić ponownie (''reboot'') maszynę po sprawdzeniu że udało Wam się zalogować na konto roota.
 +Zachęcam do przypomnienia sobie jak korzysta się z SSH i narzędzi takich jak screen i tmux ([[https://github.com/zolrath/wemux|wemux]]), korzystając np. [[sk1:ssh_screen_tmux|z tych materiałów]] (materiały były przedstawione   [[https://emeeting.put.poznan.pl/playback/presentation/2.0/playback.html?meetingId=74d51a8d51ffe7dd7d66f8eaa6ffeffc725c5060-1585652713066|na początku jednych z zajęć  z SK1]]).\\
 +Na tych zajęciach będę sprawdzać stan Waszej pracy logując się na maszyny w laboratorium, więc nie musicie udostępniać mi ekranu. Zachęcam do używania screen/tmux żebym np. mógł wskazać Wam gdzie jest błąd w komendach które wpisujecie a są traktowane jako niepoprawne.
 +
 +++++
 +
 +
 +++++ IPv6  |
 +Podobnie jak na zajęciach z kształtowania ruchu (powyżej) w trakcie zajęć będą wykorzystywane komputery w laboratoriach.
 +
 +W trakcie tych zajęć będzie konieczność uruchomienia programu Wireshark na komputerach w laboratorium. \\
 +Dlatego proszę o przygotowanie się do używania programu wireshark, np:
 +  * wykorzystując X11 forwarding w SSH (opisane [[sk1:ssh_screen_tmux|tutaj]]); \\ jeśli korzystacie z Windowsa, X11 forwardig wymaga uruchomionego serwera [[https://en.wikipedia.org/wiki/X_Window_System|X]], np. [[https://sourceforge.net/projects/vcxsrv/|vcxsrv]] \\ Uwaga: z powodu [[https://github.com/PowerShell/Win32-OpenSSH/issues/1088|błędu]] w windowsowej wersji ssh może być konieczne posiadanie pliku ''C:\dev\tty'', <html><small></html> np. tworzonego przez:<code>
 +mkdir \dev
 +echo x > \dev\tty
 +</code> <html></small></html>a następnie ustawienie zmiennej DISPLAY na odpowiednią wartość przed wywołaniem ssh, np. w cmd.exe: \\ ''set DISPLAY=localhost:0''
 +  * uruchomienie serwera VNC <html><small></html>(lub rdesktop)<html></small></html> na maszynie w laboratorium i połączenie się z tym serwerem, wykorzystując [[https://instrukcje.put.poznan.pl/category/vpn/|VPN politechniki]] lub tunelowanie po SSH (opisane skrótowo [[sk1:ssh_screen_tmux|tutaj]]).
 +++++
 +
 +++++ WLAN 1  |
 +Podobnie jak na zajęciach z IPv6 (powyżej) w trakcie zajęć będą wykorzystywane komputery w laboratoriach. \\
 +Możliwe (zależy od tempa zajęć) że w trakcie zajęć będzie też potrzeba uruchomić Wireshark na komputerach w laboratorium.
 +++++
 +
 +++++ WLAN 2  |
 +Zajęcia będą odbywać się na komputerach w laboratorium. \\
 +W zależności od ilości osób może wystąpić konieczność pracy w grupach – sprzętowych AP jest ograniczona ilość.
 +Dlatego proszę o przećwiczenie pracy w jednej konsoli przez kilka osób (np. używając tmux/wemux lub współdzieląc ekran).
 +++++
 +
 +++++ WLAN 3  |
 +Zajęcia będą odbywać się na komputerach w laboratorium. \\
 +Będziecie konfigurować sprzęt firmy MikroTik, który najłatwiej konfiguruje się z użyciem przeglądarki pod domyślnym  dla sprzętu tej firmy adresem IP 192.168.88.1.\\
 +Dla wygody i sprawnego działania interfejsu konfiguracyjnego zalecam skonfigurować przekierowanie portów po SSH.
 +Możecie albo:
 +  * użyć //local port forwarding// do przekazywania danych z połączeń nawiązywanych na podany port lokalnego komputera przez połączenie SSH do wskazanego adresu po stronie serwera SSH, np. przez: <code>ssh -Y -J infXXX@polluks.cs.put.poznan.pl -L 8080:192.168.88.1:80 root@lab-sec-X</code> Wtedy połączenie pod ''http://localhost:8080/'' z przeglądarki internetowej spowoduje nawiązanie połączenia z serwera ssh do adresu 192.168.88.1:80 i przekazywanie danych między tymi połączeniami, a więc wyświetlenie interfejsu konfiguracyjnego sprzętu.
 +  * użyć //dynamic port forwarding// do uruchomienia proxy SOCKS tunelujących połączenia na drugą stronę połączenia SSH i skonfigurować połączenie przeglądarki z siecią tak by używało tego proxy. Przykładowa komenda ssh: <code>ssh -Y -J infXXX@polluks.cs.put.poznan.pl -D 8080 root@lab-sec-X</code> Przykładowa instrukcja jak używać takiego proxy jest tutaj: https://linuxize.com/post/how-to-setup-ssh-socks-tunnel-for-private-browsing/
 +
 +++++
 +
 ====== Udostępnianie widoku swojego pulpitu  ====== ====== Udostępnianie widoku swojego pulpitu  ======
 +
 +Proszę wybrać __jedną__ metodę na udostępnianie mi podglądu kodu który piszecie.
  
 ===== Metoda #1: Udostępnienie VNC prowadzącemu (Linuks) ===== ===== Metoda #1: Udostępnienie VNC prowadzącemu (Linuks) =====
  
-  # tl;dr (czyli dla osób które chcą gotowe polecenia i nie chce im się czytać dalej) +==== Skrócona instrukcja ==== 
-  wget http://www.cs.put.poznan.pl/jkonczak/pub/sk2/sk2-vpn-ca.crt +Instrukcja skrócona (dla osób które chcą gotowe polecenia i nie chce im się czytać dalej):
-  sudo openvpn --dev tap --client --ca sk2-vpn-ca.crt --auth-user-pass --daemon --remote ipv4.jprofesorek.mooo.com +
-  x11vnc -quiet -nopw -forever -display :0 & disown +
-  sleep 5 +
-  ip -4 addr show dev tap0 +
-  +
  
-==== Krok 1: dołączenie do VPNa ====+  - zainstaluj openvpn, x11vnc i vncviewer 
 +  - wykonaj:<code> 
 +wget http://www.cs.put.poznan.pl/jkonczak/pub/sk2/sk2-vpn-ca.crt 
 +sudo openvpn --dev tap --client --ca sk2-vpn-ca.crt --auth-user-pass --daemon --remote ipv4.jprofesorek.mooo.com 
 +x11vnc -quiet -nopw -forever -display :0 & disown 
 +sleep 5 
 +ip -4 addr show dev tap0</code> 
 +  - sprawdź z drugiego komputera czy po połączeniu go identycznymi poleceniami do VPNa możesz zobaczyć swój ekran:<code>vncviewer <ip_komputera></code> 
 + 
 +==== Pełna Instrukcja ==== 
 +   
 +=== Krok 1: dołączenie do VPNa ===
 W trakcie zajęć wykorzystywany będzie OpenVPN. Należy zainstalować odpowiednią paczkę (zwykle o nazwie ''openvpn'') w systemie z którego będzie udostępniany ekran. W trakcie zajęć wykorzystywany będzie OpenVPN. Należy zainstalować odpowiednią paczkę (zwykle o nazwie ''openvpn'') w systemie z którego będzie udostępniany ekran.
  
Line 98: Line 153:
   * (port i protokół domyślne - 1194/udp)   * (port i protokół domyślne - 1194/udp)
   * nazwa użytkownika i hasło, przekazane innym kanałem przez prowadzącego.  \\ Nazwę użytkownika i hasło można dla wygody wpisać do pliku o nieskomplikowanym  formacie: <code - userPass.txt>theExampleUsername   * nazwa użytkownika i hasło, przekazane innym kanałem przez prowadzącego.  \\ Nazwę użytkownika i hasło można dla wygody wpisać do pliku o nieskomplikowanym  formacie: <code - userPass.txt>theExampleUsername
-someIncorrectPassword</code>Uwaga: plikz hasłem musi mieć uprawnienia zabraniające odczyt komukolwiek poza bieżącym użytkownikiem (do ustawienia uprawnień można użyć np. ''chmod go-rwx userPass.txt'')+someIncorrectPassword</code>Uwaga: plik z hasłem musi mieć uprawnienia zabraniające odczyt komukolwiek poza bieżącym użytkownikiem (do ustawienia uprawnień można użyć np. ''chmod go-rwx userPass.txt'')
  
 Polecenie uruchamiające VPNa, należy je uruchamiać z __roota__ (**wybierz jedno**): Polecenie uruchamiające VPNa, należy je uruchamiać z __roota__ (**wybierz jedno**):
-  * Wersja 1 - wszystko w linii poleceń: <code>openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com</code> Uwaga 1: można pominąć nazwę pliku '' /somewhere/userPass.txt'', wtedy program pyta o nazwę użytkownika / hasło. \\ Uwaga 2: można dodać opcję ''--daemon'', która przenosi program w tło. Bez tej opcji program openvpn zajmuje konsolę (a zamknięcie okna z konsolą przerywa połączenie).+  * Wersja 1 - wszystko w linii poleceń: <code>openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com</code> Uwaga 1: można pominąć podawanie pliku ''/somewhere/userPass.txt'', wtedy program pyta o nazwę użytkownika / hasło. \\ Uwaga 2: można dodać opcję ''--daemon'', która przenosi program w tło. Bez tej opcji program openvpn zajmuje konsolę (a zamknięcie okna z konsolą przerywa połączenie).
   * Wersja 2 - przygotuj plik konfiguracyjny: <code - sk2-vpn.ovpn>client   * Wersja 2 - przygotuj plik konfiguracyjny: <code - sk2-vpn.ovpn>client
 remote ipv4.jprofesorek.mooo.com remote ipv4.jprofesorek.mooo.com
Line 108: Line 163:
 auth-user-pass /somewhere/userPass.txt auth-user-pass /somewhere/userPass.txt
 #daemon</code> następnie uruchom polecenie: <code>openvpn --config sk2-vpn.ovpn</code> #daemon</code> następnie uruchom polecenie: <code>openvpn --config sk2-vpn.ovpn</code>
-  * Wersja 3 - użyj graficznego konfiguracja dla NetworkManagera (ta wersja potrzebuje NetworkManagera i może potrzebować dodatkowych pakietów, np. ''network-manager-openvpn-gnome'').+  * Wersja 3 - użyj graficznego konfiguracja dla NetworkManagera (ta wersja potrzebuje NetworkManagera i może potrzebować dodatkowych pakietów, np. ''network-manager-openvpn-gnome''). <html><small></html> \\ Uwaga: poza przeklikaniem wymienionych wyżej ustawień konieczne jest wyłączenie dodawnia domyślnej bramy przez VPN: \\ ''IPv4 options'' / ''Routes…'' / ''Use this connection only for resources on its network'' \\ Można to też zmienić z konsoli: ''nmcli c modify <nazwa_połączenia> ipv4.never-default true'' <html></small></html> 
  
 **Sprawdzenie czy wszystko poszło dobrze:** po wykonaniu wybranej z komend, w wynikach komendy ''ip address'' powinien pojawić się interfejs ''tap0'' z adresem IP z sieci 10.0.9.0/24. Dodatkowo powinna działać komenda ''ping 10.0.9.1''. **Sprawdzenie czy wszystko poszło dobrze:** po wykonaniu wybranej z komend, w wynikach komendy ''ip address'' powinien pojawić się interfejs ''tap0'' z adresem IP z sieci 10.0.9.0/24. Dodatkowo powinna działać komenda ''ping 10.0.9.1''.
Line 114: Line 169:
 <html><small></html>Dla zainteresowanych [[sk2:vpn_serwer_dla_zajec|konfiguracja serwera]]<html></small></html> <html><small></html>Dla zainteresowanych [[sk2:vpn_serwer_dla_zajec|konfiguracja serwera]]<html></small></html>
  
-==== Krok 2: uruchomienie VNC ====+=== Krok 2: uruchomienie VNC ===
  
 Przykładowe polecenie używa serwer [[https://en.wikipedia.org/wiki/X11vnc|x11vnc]] aby udostępnić bieżącą sesję graficzną. \\ <html><small></html> Przykładowe polecenie używa serwer [[https://en.wikipedia.org/wiki/X11vnc|x11vnc]] aby udostępnić bieżącą sesję graficzną. \\ <html><small></html>
Line 150: Line 205:
  
 === OpenVPN === === OpenVPN ===
-Należy zainstalować openvpn: https://openvpn.net/community-downloads-2/ \\+Należy zainstalować openvpn: https://openvpn.net/community-downloads/ \\
 Nie udało mi się (ale za bardzo nie próbowałem) skorzystać z GUI, stąd Nie udało mi się (ale za bardzo nie próbowałem) skorzystać z GUI, stąd
 proponuję z __uruchomionego jako administrator__  cmd.exe lub powershella proponuję z __uruchomionego jako administrator__  cmd.exe lub powershella
 wykonać odpowiednią komendę: \\ wykonać odpowiednią komendę: \\
-   ''"C:\Program Files\OpenVPN\bin\openvpn.exe" …'' \\+   "C:\Program Files\OpenVPN\bin\openvpn.exe" …
 Argumenty dla komendy wyglądają jak w Linuksie. Argumenty dla komendy wyglądają jak w Linuksie.
 ++++ Przykładowe screeny: | ++++ Przykładowe screeny: |
Line 169: Line 224:
 {{:sk2:win-vnc.png|}} {{:sk2:win-vnc.png|}}
 ++++ ++++
 +
  
 ===== Metoda #2: Wtyczka 'Live Share' w VS code (tylko zajęcia z programowania C/C++) ===== ===== Metoda #2: Wtyczka 'Live Share' w VS code (tylko zajęcia z programowania C/C++) =====
 +
 +++++ Ten sposób nie nadaje się do tematów innych niż 5-10 (od "Wstęp do BSD sockets" do "Dobre praktyki w programowaniu") |
 +
 +Ta metoda jest prostsza do skonfigurowania, ale nie pozwala ona mi widzieć terminala, co utrudnia mi pomaganie w razie problemów z/podczas uruchomienia programów.
  
 Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia [[https://visualstudio.microsoft.com/pl/services/live-share/|Live Share]]. Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia [[https://visualstudio.microsoft.com/pl/services/live-share/|Live Share]].
Line 180: Line 240:
 {{:sk2:vscode_ls.png|}} {{:sk2:vscode_ls.png|}}
  
-**Uwaga**: Osoby korzystające z tej metody powinny:+**Uwaga**: Osoby korzystające z tej metody powinny do zajęć 1 i 2 z BSD sockets:
   * uruchomić u siebie usługę daytime na TCP i UDP   * uruchomić u siebie usługę daytime na TCP i UDP
   * lub wykonać z roota polecenie zastępujące daytime, np: \\ ''socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &''   * lub wykonać z roota polecenie zastępujące daytime, np: \\ ''socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &''
  
 +++++
sk2/zajecia_zdalne.1606653703.txt.gz · Last modified: (external edit)