Dydaktyka:
FeedbackTo jest stara wersja strony!
Programowanie niekopoziomowe (zajęcia 1-6)
Do zajęć zdalnych koniecznie musicie mieć do dyspozycji:
+:c+
+ -pthread --std=c+
+2a l4_z1_lambda.cpp
1)nc
/ncat
/netcat
/socat
netstat
/ss
Dodatkowo warto zainstalować:
man
)gdb
(debugger)valgrind
(narzędzie znajdujące błędy zarządzania pamięcią)strace
(narzędzie wyświetlające i tłumaczące wywołania systemowe)wireshark
Qt – 10.11 i 17.11 (grupy wtorkowe) / 25.11 i 2.12 (grupy środowe)
Proszę zainstalować program qtcreator oraz podstawowe biblioteki deweloperskie, dokumentację i narzędzia frameworku Qt (w wersji 5).
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
2)).
Proszę przetestować czy środowisko działa poprawnie kompilując przykładowy kod: l6_z2_template.tar.xz.
Java - 24.11 (grupy wtorkowe) / 9.11 (grupy środowe)
Proszę zainstalować JDK i swoje ulubione IDE do Javy (np. IntelliJ / Eclipse / NetBeans).
DNS - 1.12 (grupy wtorkowe) / 9.12 (grupy środowe)
Proszę zainstalować programy dig
, host
i bind
.
W zależności od dystrybucji, programy mogą być w paczkach o nazwach:
bind bind9 bind-tools bind9-tools bind-dnsutils bind9-dnsutils bind-utils bind9-utils
Do sprawdzenia czy programy są dostępne, proszę użyć poleceń:
named -v named-checkconf -v dig -v host -V
Uwaga: named i named-checkconf mogą być dostępne tylko z roota (tzn. są w
katalogu /usr/sbin
, który normalnie nie jest w $PATH
zwykłego użytkownika)
Proszę sprawdzić czy bind nie jest uruchamiany automatycznie.
Jeśli polecenie:
ps -FA | egrep '(named|bind)'
znajdzie działający program bind
lub named
, proszę go wyłączyć, właściwą
dla swojego systemu operacyjnego komendą, zapewne przez jedną z poniższych:
systemctl stop bind && systemctl disable bind systemctl stop bind9 && systemctl disable bind9 systemctl stop named && systemctl disable named /etc/init.d/bind stop && rc-update delete bind /etc/init.d/bind9 stop && rc-update delete bind9 /etc/init.d/named stop && rc-update delete named
# tl;dr (czyli dla osób które chcą gotowe polecenia i nie chce im się czytać dalej) 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
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.
Uwaga: VPN jest skonfigurowany tak, by była łączność między wszystkimi podłączonym osobami, co będzie wykorzystywane w trakcie zajęć, ale niesie za sobą dość oczywiste konsekwencje bezpieczeństwa.
Do uruchomienia VPNa potrzebny jest:
ipv4.jprofesorek.mooo.com
,device tap
theExampleUsername someIncorrectPassword
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
)
Polecenie uruchamiające VPNa, należy je uruchamiać z roota (wybierz jedno):
openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com
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).
client remote ipv4.jprofesorek.mooo.com dev tap ca /somewhere/sk2-vpn-ca.crt auth-user-pass /somewhere/userPass.txt #daemon
następnie uruchom polecenie:
openvpn --config sk2-vpn.ovpn
network-manager-openvpn-gnome
).
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
.
Dla zainteresowanych konfiguracja serwera
Przykładowe polecenie używa serwer x11vnc aby udostępnić bieżącą sesję graficzną.
Możecie oczywiście użyć dowolnego innego serwera VNC, np. TigerVNC, który pozwala zarówno udostępnić bieżącą sesję (np. x0vncserver --SecurityTypes None
) jak i stworzyć nową wirtualną sesję Xów (bez konieczności wykorzystania Xvfb).
Udostępnienie całej sesji graficznej:
x11vnc -forever -display :0 & disown
W powyższym poleceniu & disown
wrzuca program w tło i odłącza program od bieżącego terminala.
Oczywiście normalnie VNC pozwala na kontrolę myszy i klawiatury. W x11vnc
można dodać opcję -viewonly
żeby pozwolić tylko na podglądanie ekranu.
Inne przydatne opcje to -quiet
która zmniejsza gadatliwość standardowego wyjścia i -nopw
która pomija komunikat że serwer nie jest chroniony hasłem.
Można poeksperymentować z udostępnieniem części ekranu (poniższe polecenia wymagają zainstalowania xwininfo
do wyboru okna).
Udostępnienie jednego okna (nie udostępnia innych okien, np. oknien dialogowych czy okien menu):
x11vnc -forever -id pick -connect :0
Udostępnienie obszar jednego okna (uwaga: jeśli je coś zasłoni, x11vnc przesyła to co je zasłoniło):
x11vnc -forever -sid pick -connect :0
Udostępnienie jednej aplikacji (uwaga: u mnie nie działało prawidłowo):
x11vnc -appshare -id pick -connect :0
Aby sprawdzić czy VNC działa prawidłowo, należy spróbować połączyć się do (z innego komputera) np. poleceniem
vncviewer <ip lub nazwa domenowa>
Po uruchomieniu VPN i VNC należy na początku zajęć przesłać do prowadzącego swój adres IP z sieci 10.0.9.0/24.
Do zajęć z Qt / Javy można korzystać z Windowsa, stąd krótka instrukcja jak uruchomić VPN+VNC pod Windowsem.
Należy zainstalować openvpn: https://openvpn.net/community-downloads-2/
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
wykonać odpowiednią komendę:
"C:\Program Files\OpenVPN\bin\openvpn.exe" …
Argumenty dla komendy wyglądają jak w Linuksie.
Przykładowy i dość bezproblemowy serwer VNC to TightVNC.
Inne popularne serwery VNC to np. RealVNC czy TigerVNC.
W każdym przypadku proszę o niewymaganie hasła (ewentualnie podanie hasła prowadzącemu).
Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia Live Share.
Uwaga: Osoby korzystające z tej metody powinny:
socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &
--std=c+
+2a
, to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z --std=c+
+1z
, to na potrzeby zajęć wystarczylibclang-common-8-dev
jest wymagana w Ubuntu niezależnie od wersji clanga z niezrozumiałych przeze mnie powodów