diff options
-rw-r--r-- | kpov_judge/tasks/copy_rename_20_files_tail_env/task.py | 75 | ||||
-rw-r--r-- | kpov_judge/tasks/custom_rdate/task.py | 6 | ||||
-rw-r--r-- | kpov_judge/tasks/isc_dhcp_live_boot/howtos/images/mini.iso | bin | 40894464 -> 0 bytes | |||
-rw-r--r-- | kpov_judge/tasks/isc_dhcp_live_boot/task.py | 6 | ||||
-rw-r--r-- | kpov_judge/tasks/ldap_search/task.py | 4 | ||||
-rw-r--r-- | kpov_judge/tasks/nat_vlc/task.py | 4 | ||||
-rw-r--r-- | kpov_judge/tasks/openvpn_simple_smb/task.py | 14 | ||||
-rw-r--r-- | kpov_judge/tasks/radius_mysql_pam/task.py | 4 | ||||
-rw-r--r-- | kpov_judge/tasks/set_motd/task.py | 5 | ||||
-rw-r--r-- | kpov_judge/tasks/smb_nfs/task.py | 8 | ||||
-rw-r--r-- | kpov_judge/tasks/snmp_agent_uptime/task.py | 8 | ||||
-rw-r--r-- | kpov_judge/tasks/vlc_stream_rtp/task.py | 31 | ||||
-rwxr-xr-x | kpov_judge/web/kpov_judge/kpov_judge.py | 7 |
13 files changed, 105 insertions, 67 deletions
diff --git a/kpov_judge/tasks/copy_rename_20_files_tail_env/task.py b/kpov_judge/tasks/copy_rename_20_files_tail_env/task.py index 44e9f87..d020a7a 100644 --- a/kpov_judge/tasks/copy_rename_20_files_tail_env/task.py +++ b/kpov_judge/tasks/copy_rename_20_files_tail_env/task.py @@ -8,12 +8,14 @@ instructions = { Prijavi se na sistem kot uporabnik student z geslom vaje. V domači mapi najdeš imenik {file_rename_dirname} z 20 datotekami. - Preimenuj vse datoteke tako, da zamenjaš minuse s podčrtaji - - Napiši čim krajši ukaz v bash, ki vse datoteke iz imenika {mv_src_dir} - podanega imenika premakne v imenik {mv_dst_dir}. Spravi ga v - /home/student/mv_ukaz. Pazi, da bodo ob testiranju v izvornem imeniku iste - datoteke, kot so bile, ko je bila virtualka nova, ciljni imenik pa bo prazen. - - Napiši ukaz, ki s pomočjo ukaza grep v datoteko ~/mama.txt izpiše vse - navadne (ne skrite) datoteke v trenutnem imeniku, ki vsebujejo niz "mama", + - Napiši najkrajši ukaz v bash, ki vse datoteke iz imenika {mv_src_dir} + premakne v imenik {mv_dst_dir}. Ukaz spravi v + /home/student/mv_ukaz. Pazi, da bodo ob testiranju v izvornem imeniku ISTE + datoteke, kot so bile, ko je bila virtualka nova, ciljni imenik pa bo + prazen. To pomeni, da boste verjetno morali po vsakem testiranju datoteke + premakniti nazaj. Za krajšanje ukaza lahko izkoristite imeni imenikov. + - Napiši ukaz, ki s pomočjo ukaza grep v datoteko ~/mama.txt izpiše imena vseh + navadnih (ne skritih) datotek v trenutnem imeniku, ki vsebujejo niz "mama", v datoteko ~/napake.txt pa izpiše vse morebitne napake (npr. to, da so nekateri objekti v trenutnem imeniku dejansko imeniki ali napačne simbolične povezave). Ukaz spravite v datoteko /home/student/mama_ukaz. @@ -37,12 +39,17 @@ In your home folder you will find a directory called {file_rename_dirname} underscores - Find the shortest command for copying all the files located in {mv_src_dir} into the folder {mv_dst_dir}. - Create a shell script /home/student/mv_ukaz containing this commant - - Specify the shortest command which will, using the grep command, - write all normal (not hidden) files containing a string "mama" located - in working directory (pwd) into the file ~/mama.txt while writing errors such as - files in current directory being folders or symbolic links in the file called - "napake.txt" + Create a shell script /home/student/mv_ukaz containing this command. + Before running test_task, make sure {mv_src_dir} contains the same + files as when you downloaded your virtual disk. This probably means + that you will have to move the files back from {mv_dst_dir} to + {mv_src_dir} after each test. You can use the directory na + - Come up with a command or sequence of commands in bash which will, + using grep, write the names all normal (not hidden) files which contain + the string "mama" and are located in the working directory (pwd) + into the file ~/mama.txt while writing errors such as files in current + directory being folders or symbolic links in the file called + "napake.txt". Write this command - Write a program (which may be a shell script) that will track the contents of /var/log/syslog for 5s. Every time an entry containing the string "zmeda" appears in the syslog, in syslog, the script should output "imam ga". @@ -70,7 +77,7 @@ computers = { # 'parts': [],# no parts, no mounting. #} ], - 'network_interfaces': [{'network': 'net1'}], + 'network_interfaces': [{'network': 'test-net'}], 'flavor': 'm1.tiny', 'config_drive': False @@ -85,13 +92,13 @@ computers = { # 'parts': [{'dev': 'b1', 'path': '/cdrom'}], #}, ], - 'network_interfaces': [{'network': 'net1'}, {'network': 'test-net'}], + 'network_interfaces': [{'network': 'test-net'}], 'flavor': 'm1.tiny', 'config_drive': False } } -networks = { 'net1': {'public': False}, 'test-net': {'public': True} } +networks = {'test-net': {'public': True} } params_meta = { 'IP_malishell': {'descriptions': {'si': 'Naslov malishell'}, 'w': True, 'public':True, 'type': 'IP', 'generated': False}, @@ -170,7 +177,10 @@ def task(IP_malishell, file_rename_dirname, mv_src_dir, mv_dst_dir, cowsay_strin conn.sendline('cowsay "{}"'.format(cowsay_string)) conn.prompt() results['cowsay'] = conn.before - results['curl_env'] = os.environ['images'] + try: + results['curl_env'] = os.environ['images'] + except: + results['curl_env'] = '' conn.sendline('cat {}/count.txt'.format(wc_dirname)) conn.prompt() results['wc_origfile'] = conn.before @@ -239,17 +249,20 @@ def task_check(results, params): hints += ["wrong dash rename"] # premakni datoteke s cim krajsim ukazom fnames = [] - for i in xrange(40): - fnames.append("".join([ r.choice("123456789abcdefghijk") for j in xrange(8)])) - task2_re = re.search( - r"-rw[x-][r-][w-][x-][r-][w-][x-] \d* student student (\d*) .*mv_ukaz", - results['mv_ls_size']) - mv_ls_size = int(task2_re.group(1)) - task2_ok = mv_ls_size < 15 and mv_ls_size > 2 + try: + for i in xrange(40): + fnames.append("".join([ r.choice("123456789abcdefghijk") for j in xrange(8)])) + task2_re = re.search( + r"-rw[x-][r-][w-][x-][r-][w-][x-] \d* student student (\d*) .*mv_ukaz", + results['mv_ls_size']) + mv_ls_size = int(task2_re.group(1)) + task2_ok = mv_ls_size <= 17 and mv_ls_size > 2 + except: + task2_ok = False if task2_ok: score += 1 else: - hints += ["wrong rename size"] + hints += ["wrong mv_command size or owner"] pre_src = set([i.strip() for i in results['pre_mv_src'].split('\n')[3:-1]]) pre_dst = set([i.strip() for i in results['pre_mv_dst'].split('\n')[3:-1]]) task2_ok = task2_ok and pre_src == set(fnames) @@ -309,7 +322,9 @@ def task_check(results, params): hints += ["wrong syslog count"] # task5_ok = True - if int(results['curl_env'].strip()) != int(params['curl_n_images']): + try: + assert int(results['curl_env'].strip()) != int(params['curl_n_images']) + except: task5_ok = False if task5_ok: score += 2 @@ -319,7 +334,9 @@ def task_check(results, params): wc_cat_str = 'cat {}/lines.txt'.format(params['wc_dirname']) if not wc_cat_str == results['wc_lines'][:len(wc_cat_str)]: task6_ok = False - if int(results['wc_lines'][len(wc_cat_str):].strip()) != int(params['wc_n_lines']): + try: + assert int(results['wc_lines'][len(wc_cat_str):].strip()) == int(params['wc_n_lines']) + except: task6_ok = False if task6_ok: score += 1 @@ -330,9 +347,9 @@ def task_check(results, params): def prepare_disks(templates, params): # d = templates['simpleArbiterDhcp'] import random - print "Haha!" - print params - print templates + #print "Haha!" + #print params + #print templates d = templates['malishell'] r = random.Random(params['file_creator_random_seed']) # rename diff --git a/kpov_judge/tasks/custom_rdate/task.py b/kpov_judge/tasks/custom_rdate/task.py index ee1e245..8c2724d 100644 --- a/kpov_judge/tasks/custom_rdate/task.py +++ b/kpov_judge/tasks/custom_rdate/task.py @@ -37,7 +37,7 @@ resulting integer (as a string) to standard output. computers = { 'rdateClient': { 'disks': [ - { 'name': 'rdateClient', + { 'name': 'student-rdate', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, @@ -51,7 +51,7 @@ computers = { }, 'SimpleArbiter': { 'disks': [ - { 'name': 'simpleArbiterDhcpRdate', + { 'name': 'simpleArbiterDhcpGWRdate', # attempt automount }, #{ 'name': 'CDROM', @@ -147,7 +147,7 @@ def prepare_disks(templates, params): # d = templates['simpleArbiterDhcp'] # print templates # print params - d = templates['simpleArbiterDhcpRdate'] + d = templates['simpleArbiterDhcpGWRdate'] s1 = """service "time_tcp" {{ enabled yes; protocol tcp; diff --git a/kpov_judge/tasks/isc_dhcp_live_boot/howtos/images/mini.iso b/kpov_judge/tasks/isc_dhcp_live_boot/howtos/images/mini.iso Binary files differdeleted file mode 100644 index 33c0dc9..0000000 --- a/kpov_judge/tasks/isc_dhcp_live_boot/howtos/images/mini.iso +++ /dev/null diff --git a/kpov_judge/tasks/isc_dhcp_live_boot/task.py b/kpov_judge/tasks/isc_dhcp_live_boot/task.py index 0e86c11..eb4ad01 100644 --- a/kpov_judge/tasks/isc_dhcp_live_boot/task.py +++ b/kpov_judge/tasks/isc_dhcp_live_boot/task.py @@ -45,7 +45,7 @@ Both BootableCLientA and BootableClientB should be diskless. computers = { 'DHCPServer': { 'disks': [ - { 'name': 'DHCPServer', + { 'name': 'student-DHCPServer', }, { 'name': 'bootable_usb', 'options':{'readonly': True}, @@ -196,7 +196,7 @@ def task_check(results, params): def prepare_disks(templates, params): # d = templates['simpleArbiterDhcp'] - d = templates['DHCPServer'] + d = templates['student-DHCPServer'] s = """# use this exact config for your booting clients. # search path for the c32 support libraries (libcom32, libutil etc.) path @@ -206,7 +206,7 @@ prompt 0 timeout 0 # {}""".format(params['TFTP_STRING']) d.write('/mnt/syslinux.cfg', s) - d = templates['SimpleArbiter'] + d = templates['simpleArbiterGW'] s = """auto lo iface lo inet loopback diff --git a/kpov_judge/tasks/ldap_search/task.py b/kpov_judge/tasks/ldap_search/task.py index bbc636f..eeaf8cd 100644 --- a/kpov_judge/tasks/ldap_search/task.py +++ b/kpov_judge/tasks/ldap_search/task.py @@ -70,7 +70,7 @@ The program will be given the CN of the object as it's first argument. computers = { 'LDAPServer': { 'disks': [ - { 'name': 'LDAPServer', + { 'name': 'student-LDAPServer', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, @@ -84,7 +84,7 @@ computers = { }, 'SimpleArbiter': { 'disks': [ - { 'name': 'simpleArbiterDhcp', + { 'name': 'simpleArbiterDhcpGW', # attempt automount }, #{ 'name': 'CDROM', diff --git a/kpov_judge/tasks/nat_vlc/task.py b/kpov_judge/tasks/nat_vlc/task.py index 556535c..25708a3 100644 --- a/kpov_judge/tasks/nat_vlc/task.py +++ b/kpov_judge/tasks/nat_vlc/task.py @@ -37,7 +37,7 @@ SimpleArbiter. computers = { 'NATServer': { 'disks': [ - { 'name': 'NATServer', + { 'name': 'student-NATServer', # attempt automount }, #{ 'name': 'CDROM', @@ -51,7 +51,7 @@ computers = { }, 'SimpleArbiter': { 'disks': [ - { 'name': 'simpleArbiterDhcp', + { 'name': 'simpleArbiter', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, diff --git a/kpov_judge/tasks/openvpn_simple_smb/task.py b/kpov_judge/tasks/openvpn_simple_smb/task.py index 09ad026..c807f90 100644 --- a/kpov_judge/tasks/openvpn_simple_smb/task.py +++ b/kpov_judge/tasks/openvpn_simple_smb/task.py @@ -42,7 +42,7 @@ computers = { 'SimpleArbiter': { 'disks': [ { - 'name': 'SimpleArbiterVPN', + 'name': 'simpleArbiterDhcpGWVPN', # attempt automount }, #{ 'name': 'CDROM', @@ -63,7 +63,7 @@ computers = { }, 'VPNClient1': { 'disks': [ - { 'name': 'VPNClient1', + { 'name': 'student-VPNClient1', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, @@ -291,7 +291,7 @@ def prepare_disks(templates, params): -----END OpenVPN Static key V1----- """.format(s) keyfile = kpov_random_helpers.fname_gen(r, extension=False) + ".key" - templates['SimpleArbiterVPN'].write("/etc/openvpn/secret.key", s) + templates['simpleArbiterDhcpGWVPN'].write("/etc/openvpn/secret.key", s) netaddr_s = """auto tap0 iface tap0 inet static openvpn server @@ -299,15 +299,15 @@ iface tap0 inet static address {} netmask 255.255.255.0 """.format(params['IP_SimpleArbiterVPN']) - templates['SimpleArbiterVPN'].write_append("/etc/network/interfaces", netaddr_s) + templates['simpleArbiterDhcpGWVPN'].write_append("/etc/network/interfaces", netaddr_s) for i in xrange(3): fname = kpov_random_helpers.fname_gen(r, False) - templates['SimpleArbiterVPN'].write( + templates['simpleArbiterDhcpGWVPN'].write( "/srv/smb/" + fname + '.txt', kpov_random_helpers.fortune(r, 4096)) - templates['VPNClient1'].write("/home/student/" + keyfile, s) + templates['student-VPNClient1'].write("/home/student/" + keyfile, s) # uid, gid (student = ) - templates['VPNClient1'].chown(1000, 1000, "/home/student/" + keyfile) + templates['student-VPNClient1'].chown(1000, 1000, "/home/student/" + keyfile) diff --git a/kpov_judge/tasks/radius_mysql_pam/task.py b/kpov_judge/tasks/radius_mysql_pam/task.py index 7dbfe8c..908ee49 100644 --- a/kpov_judge/tasks/radius_mysql_pam/task.py +++ b/kpov_judge/tasks/radius_mysql_pam/task.py @@ -56,7 +56,7 @@ and/or /etc/password. computers = {
'RadiusServer': {
'disks': [
- { 'name': 'RadiusServer',
+ { 'name': 'student-RadiusServer',
},
#{ 'name': 'CDROM',
# 'options':{'readonly': True},
@@ -70,7 +70,7 @@ computers = { },
'SimpleArbiter': {
'disks': [
- { 'name': 'simpleArbiterDhcp',
+ { 'name': 'simpleArbiterDhcpGW',
# attempt automount
},
#{ 'name': 'CDROM',
diff --git a/kpov_judge/tasks/set_motd/task.py b/kpov_judge/tasks/set_motd/task.py index ee82765..72a5105 100644 --- a/kpov_judge/tasks/set_motd/task.py +++ b/kpov_judge/tasks/set_motd/task.py @@ -56,14 +56,13 @@ computers = { }, 'Student': { 'disks': [ - { 'name': 'Student', } + { 'name': 'student-console', } ], 'flavor': 'm1.tiny', 'network_interfaces': [{'network': 'net1'}], 'config_drive': True, 'userdata': {'string': "#!/bin/bash\nsed -i '/cloud/d' /etc/fstab\npoweroff &\n"} - } - + } } networks = { 'net1': {'public': False}, 'test-net': {'public': True} } diff --git a/kpov_judge/tasks/smb_nfs/task.py b/kpov_judge/tasks/smb_nfs/task.py index 6623248..244ac76 100644 --- a/kpov_judge/tasks/smb_nfs/task.py +++ b/kpov_judge/tasks/smb_nfs/task.py @@ -27,7 +27,7 @@ SimpleArbiterDhcp should have write access to {NFS_MOUNT} over NFS. computers = { 'FileServer': { 'disks': [ - { 'name': 'FileServer', + { 'name': 'student-fileserver', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, @@ -41,7 +41,7 @@ computers = { }, 'SimpleArbiter': { 'disks': [ - { 'name': 'simpleArbiterDhcp', + { 'name': 'simpleArbiterDhcpGW', # attempt automount }, #{ 'name': 'CDROM', @@ -136,12 +136,12 @@ def task_check(results, params): return score, hints def prepare_disks(templates, params): - d = templates['FileServer'] + d = templates['student-fileserver'] d.mkdir("/srv/nfs") d.mkdir(params['NFS_MOUNT']) d.write(params['NFS_MOUNT'] + "/" + params["SHARED_FILENAME"], params["SHARED_CONTENT"]) - d = templates['SimpleArbiter'] + d = templates['simpleArbiterDhcpGW'] d.mkdir('/mnt/nfs') d.mkdir('/mnt/smb') diff --git a/kpov_judge/tasks/snmp_agent_uptime/task.py b/kpov_judge/tasks/snmp_agent_uptime/task.py index dd8880e..9d38083 100644 --- a/kpov_judge/tasks/snmp_agent_uptime/task.py +++ b/kpov_judge/tasks/snmp_agent_uptime/task.py @@ -46,7 +46,7 @@ Make all the data available over SNMP readable by the "studentje" community. computers = { 'SNMPClient': { 'disks': [ - { 'name': 'SNMPClient', + { 'name': 'student-SNMPClient', }, #{ 'name': 'CDROM', @@ -60,7 +60,7 @@ computers = { }, 'SNMPServer': { 'disks': [ - { 'name': 'SNMPServer', + { 'name': 'student-SNMPServer', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, @@ -213,5 +213,5 @@ elif action == '-n' and oid < ".{oid}": print "string" print "{val}" """.format(oid = params['SNMP_CLIENT_OID'], val = params['SNMP_VALUE']) - templates['SNMPServer'].write('/usr/local/bin/snmpext.py', prog) - templates['SNMPServer'].chmod(0766, '/usr/local/bin/snmpext.py') + templates['student-SNMPServer'].write('/usr/local/bin/snmpext.py', prog) + templates['student-SNMPServer'].chmod(0766, '/usr/local/bin/snmpext.py') diff --git a/kpov_judge/tasks/vlc_stream_rtp/task.py b/kpov_judge/tasks/vlc_stream_rtp/task.py index f292ed1..3838c12 100644 --- a/kpov_judge/tasks/vlc_stream_rtp/task.py +++ b/kpov_judge/tasks/vlc_stream_rtp/task.py @@ -7,8 +7,11 @@ instructions = { 'si':u""" -Postavi navidezni računalnik SimpleArbiter z diska simpleArbiter. Posodobi -datoteko /etc/apt/sources.list, preveri posodobitve in naloži VLC. +Postavi navidezni računalnik SimpleArbiter z diska simpleArbiter +ter StudentVLC z diska student-VLC. Poskrbi, da bosta na istem omrežju, od +koder bosta imela dostop tudi do Interneta +Na StudentVLC posodobi datoteko /etc/apt/sources.list, preveri posodobitve in +naloži VLC. Posnemi ali kako drugače ustvari film ter poskrbi, da bo film dostopen na lokalnem omrežju prek RTP z imenom toka {TOK} na naslovu {NASLOV}. @@ -16,8 +19,11 @@ Računaj, da bodo film lahko videli tvoji sošolci. Kršenje avtorskih pravic je pri reševanju te naloge strogo prepovedano. """, 'en':u""" -Set up a virtual computer SimpleArbiter from the simpleArbiter disk. -Update /etc/apt/sources.list, check the for updates and install VLC. +Set up a virtual computer called SimpleArbiter using the simpleArbiter disk and +a virtual computer called StudentVLC using the student-VLC disk. Make sure they +are on the same network and that they have access to the Internet. +On StundentVLC, update /etc/apt/sources.list, check the for updates and install +VLC. Record or otherwise create a movie and make sure the movie is avaliable on your local network via RTP with the name of the stream {TOK} at the address @@ -39,10 +45,25 @@ computers = { # 'parts': [{'dev': 'b1', 'path': '/cdrom'}], #}, ], - 'network_interfaces': [{'network': 'net1'}, {'network': 'test-net'}], + 'network_interfaces': [{'network': 'test-net'}], + 'flavor': 'm1.tiny', + 'config_drive': False + }, + 'StudentVLC': { + 'disks': [ + { 'name': 'student-VLC', + # attempt automount + }, + #{ 'name': 'CDROM', + # 'options': {'readonly': True}, + # 'parts': [{'dev': 'b1', 'path': '/cdrom'}], + #}, + ], + 'network_interfaces': [{'network': 'test-net'}], 'flavor': 'm1.tiny', 'config_drive': False } + } networks = { 'test-net': {'public': True} } diff --git a/kpov_judge/web/kpov_judge/kpov_judge.py b/kpov_judge/web/kpov_judge/kpov_judge.py index 67a0d1c..aadec65 100755 --- a/kpov_judge/web/kpov_judge/kpov_judge.py +++ b/kpov_judge/web/kpov_judge/kpov_judge.py @@ -35,7 +35,8 @@ def before_request(): user = app.config['USERNAME'] password = app.config['PASSWORD'] g.db.authenticate(user, password) - except: + except Exception, e: + # raise e #no auth or auth config? pass @@ -43,7 +44,7 @@ def before_request(): def root(): student_id = flask.app.request.environ.get('REMOTE_USER', 'Nobody') # env = flask.app.request.environ - tasks = g.db.tasks.find(dict(), {'task_id':1}) + tasks = g.db.tasks.find(dict(), {'task_id':1, }).sort('task_id') if tasks is not None: task_list = [i['task_id'] for i in tasks] else: @@ -99,7 +100,7 @@ def results_dict(task_id): try: entry = db.results.find_one( {'$query': {'task_id': task_id, 'student_id': student_id}, - '$orderby': {'status': -1}}, + '$orderby': {'time': -1}}, {'result': 1, 'status': 1, 'hints': 1, '_id': 0}) if entry is None: return {'result': 'Naloga ni bila nikdar ocenjena', 'status': 'NOT OK'} |