201301212000


Смена модели вычислений

  B.C. - 1909     докомпьютерный период, ручная обработка информации. основные средства: мозг, карандаш, бумага.
                  
  1911 - 1939     офис как центр переработки информации и совместного владения первичными средствами автоматизации работы с информацией: перфокарта, механический калькулятор, пишущая машинка, др.
                  
  1940 - 1989     компьютеры дороги и вычисления публичны. приватность работ часто определяется прочностью стен юридического лица, а внутри предприятия - доверием между сотрудниками.
                  
  1990 - 2009     персональные вычисления. компьютер, помогающий производить работу имеющую положительную рыночную стоимость, стоит недорого (~1000$).
                   
  2010 - Сегодня  публичные вычисления в глобальной сети. приватность работ часто определяется доверием к эвристическим математическим методам и верой в отсутствие фатальных ошибок и backdoor дыр при их программировании. рыночная стоимость доступных средств переработки информации, может превышать миллиарды долларов.


Фазы работ

  EUCIP (European Certification of Informatics Professionals) 

    plan - build - use


Виды работ

  - Создавать информацию
  - Обрабатывать информацию
  - Перемещать информацию
  - Копировать информацию
  - Потреблять информацию
  - Уничтожать информацию
  
  
                      Путник: Я, кажется, начинаю понимать, 
                              откуда ветер дует..
                              
                      Ветер:  Нет, это качественная пародия.

                                  Принцип работы симулятора.
                                  
----------

Лабораторные работы на симуляторах 

  (vmware, virtualbox, parallels, qemu, bosch, xen, hyper-v..)
  
Зачитываются работающие Unix виртуальные машины VirtualBox (FreeBSD, Solaris, Android-x86, Linux и т.д), должен быть организован доступ с хоста в консоль виртуальной машины (telnet, ssh), и возможность администрирования через web (типа webmin, никаких инсталляций в хост). Принимаются ответы на Unix-quiz (в стиле сертификата Linux+, nelus.tpt.edu.ee -> Unix quiz).

----------

Работа 1 вводная для всех работ с 2 по 8.

Lab 1. Создание VM в VirtualBox
       
Шаг 1. JeOS - Создать VM

  Name: JeOS
  RAM:  256MB
  HD:   1GB
  NIC:

    General        Network
    System         Adapter 1  Adapter 2  Adapter 3  Adapter 4
    Display        [v] Enable Network Adapter
    Storage              Attached to: [ NAT               |v]
    Audio                Name
    Network            v Advanced
    Serial Ports       Adapter Type: PCnet-FAST III (Am79C973)
    USB            Promiscuous Mode: Deny
    Shared Folders      MAC Address: XXXXXXXXXXXX
                                     [v] Cable connected
                                     [ Port Forwarding ]
          Port Forwarding Rules
    Name   Protocol  Host IP  Host Port  Guest IP  Guest Port  <+>
    Rule 1 TCP                2222                 22          <->
    Rule 2 TCP                11111                10000
    Rule 3 TCP                33333                3306
  

Шаг 2. JeOS - Install

Скачать CD Image (ISO) с адреса:

  http://ignum.dl.sourceforge.net/project/turnkeylinux/iso/turnkey-bootstrap-12.0-squeeze-x86.iso
       
Привязать ISO к виртуальному CD/DVD драйву (VirtualBox 4.2.4, turnkey-bootstrap-12.0-squeeze-x86.iso)

  1. Запустить виртуальную машину JeOS. login как root (нет пароля). Update local repositories:
   
       apt-get update
     
     Install installer:
   
       apt-get install di-live
     
     Run installer (use entire disk):
        
       di-live
     
  2. Shutdown. Remove ISO. Start VM from HD. Set root password (root). Update local repositories. Install openssh-server, openssh-client, webmin. Restart.
   
  3. Access VM from Putty as root (Windows Host, 127.0.0.1:2222). Access VM from Webmin as root (Windows Host, 127.0.0.1:11111)
   
  4. В классе, установите фонт putty достаточным для ослепшего учителя: Courier New, Regular, 18. Сохраните параметры сессии.
   
----------

Lab 2. Линукс для пользователя

Начать сессию как root. Создать пользователя virtu. Назначить ему пароль (virtu). Внести virtu в список пользователей sudo, передать (после sudo -s) ему права root. Закончить сессию. В putty начать новую сессию, зайти как virtu. Создать файл lesson-1 (touch) в папке /home/virtu. Привести примеры команд из раздела "Основные команды UNIX" (в скобках ключи, которые следует знать в первую очередь). Окончательно, файл lesson-1 должен содержать

  - файловое дерево виртуальной машины.
  
  - строку-разделитель "-------------".
  
  - примеры освоенных команд (и их ключей). 
   
  - строку-разделитель "-------------".
  
  - примеры использования труб и перенаправления потоков ввода-вывода.
      
  - строку-разделитель "-------------".
  
  - примеры скриптов (языки sh, python, ruby, perl). Защита работы заключается в способности объяснить написанное).
    
  - строку-разделитель "-------------".
  
  - примеры регулярных выражений для поиска и замены текста (ed, vi, sed, grep..). Защита работы заключается в способности объяснить написанное).
    
  - строку-разделитель "-------------".
  
  - подредактированную (убрать лишнее) версию файла .bash_history для пользователя virtu
    
  - строку-разделитель "-------------".
  
  - подредактированную (убрать лишнее) версию файла .bash_history для пользователя root
    
Переименовать файл так, чтобы было видно когда и кем он создан:

  lesson-1-KPV11-Ivanov-Ivan-20121201101010.txt

Отправить файл в указанное место (индивидуально).

----------

Lab 3. Среды программирования.

  1. Установить Anjuta и продемонстрировать отладчик C на примере простой консольной программы. 
   
     Продемонстрировать автогенерацию проекта и построение сгенерированного проекта из командной строки. Создать архив:

       myanjutademo.src.tar.bz2

  2. Установить Codeblocks и продемонстрировать отладчик C на примере простой консольной программы.
 
Простая программа 1 (C).

  #include <stdio.h>
  #include <stdlib.h>

  int main()
  {
      int x = 1;
      x = x + 7;
      printf("%d\n", x);
      return 0;
  }
  
Простая программа 2 (PHP).

  <?php
     $s=
     "Prefixes for bit and byte multiples<br>" +
     "<br>" +
     "  http://en.wikipedia.org/wiki/Binary_prefix<br>" +
     "<br>" +
     "Decimal           Binary<br>" +
     "Value  (SI)       Value   (IEC JEDEC)<br>" +
     "1000   k  kilo-   1024    Ki kibi- 1024<br>" +
     "1000^2 M  mega-   1024^2  Mi mebi- 1048576<br>" +
     "1000^3 G  giga-   1024^3  Gi gibi- 1073741824<br>" +
     "1000^4 T  tera-   1024^4  Ti tebi- 1099511627776<br>" +
     "1000^5 P  peta-   1024^5  Pi pebi- 1125899906842624<br>" +
     "1000^6 E  exa-    1024^6  Ei exbi- 1152921504606846976<br>" +
     "1000^7 Z  zetta-  1024^7  Zi zebi- 1180591620717411303424<br>" +
     "1000^8 Y  yotta-  1024^8  Yi yobi- 1208925819614629174706176";
     print $s;
  ?>

----------

Lab 4. MySQL клиент и сервер

  1. Установить клиент и сервер mysql

  2. изменить права пользователя root так, чтобы он был доступен  клиенту хоста (сервер на машине guest в virtualbox, database mysql, table user, host ip)

  3. Войти в соединение с хоста.

  4. Продемонстрировать запрос к самодельной таблице.

Краткое руководство по SQL.

  SQL:   DDL - data definition language
         DML - data manipulation language
         DCL - data control language
         Queries

  DDL:   CREATE, DROP, ALTER
  DML:   INSERT, DELETE, UPDATE
  DCL:   GRANT, REVOKE
  QUERY: SELECT, (SHOW)

Пример

  CREATE DATABASE one;
  USE one;
  CREATE TABLE colors (
     id INTEGER, 
     name VARCHAR(20), 
     wavelength INTEGER, 
     unit VARCHAR(3)
  );

  INSERT INTO colors (id, name, wavelength, unit)
              VALUES (1, "red", 680, "nm");
              
  INSERT INTO colors (id, name, wavelength, unit)
              VALUES (2, "green", 550, "nm");
              
  INSERT INTO colors (id, name, wavelength, unit)
              VALUES (3, "jama", 480, "nm");
              
  DELETE FROM colors WHERE id=3;

  INSERT INTO colors (id, name, wavelength, unit)
              VALUES (3, "blue", 333, "nm");
              
  UPDATE colors SET wavelength=480 WHERE id=3;

----------

Lab 5. Античный Unix

Установить симулятор SIMH и с его помощью запустить эмуляцию PDP-11, UNIX 5. 

  http://simh.trailing-edge.com/
  
Найти программу tr, экспортировать в хост ее исходный код, объяснить ключи запуска из командной строки.

pdp.ini

  set cpu U18
  attach rk0 unix_v5_rk.dsk
  boot rk0

пример сессии

  $ ./pdp11

  PDP-11 simulator V3.4-0
  Disabling XQ
  @unix

  login: root

  # ls -l /
  total 60
  drwxr-xr-x  2 bin       944 Nov 26 18:13 bin
  drwxr-xr-x  2 bin        80 Nov 26 18:13 dev
  drwxr-xr-x  2 bin       240 Mar 21 12:07 etc
  drwxr-xr-x  2 bin       224 Nov 26 18:13 lib
  drwxr-xr-x  2 bin        32 Nov 26 18:13 mnt
  drwxrwxrwx  2 bin       112 Mar 21 12:11 tmp
  -rwxrwxrwx  1 bin     25802 Mar 21 12:07 unix
  drwxr-xr-x 14 bin       224 Nov 26 18:13 usr

  # chdir /usr/source/s1

  # cat echo.c
  main(argc, argv)
  int argc;
  char *argv[];
  {
          int i;

          argc--;
          for(i=1; i<=argc; i++)
                  printf("%s%c", argv[i], i==argc? '\n': ' ');
  }

  # cc echo.c

  # mv a.out newecho

  # ./newecho Hello World
  Hello World

  # chdir /tmp

  # cat >hello.c
  main()
  {
     printf ("Hello World!\n");
  }

  # cc hello.c

  # ./a.out
  Hello World!

  # cat >hello.b
  10 print "Hello World!"

  # bas hello.b
  run
  Hello World!

----------

Lab 6. Что установлено ?

Используя приведенные ниже скрипты, выяснить сколько и какие пакеты и приложения (листья дерева) установлены в вашем линукс компьютере.
    
  for i in `rpm -qa --queryformat='%{NAME}\n'`
  do
    rpm -q --whatrequires $i | grep "no package requires"
  done

  for i in `dpkg-query --showformat='${Package}\n' --show`
  do
    dpkg --purge --dry-run $i 2> /dev/null 1| \
    grep "^Would remove or purge"
  done

  exec < f17-default.packages
  while read x
  do
    y=.`cat f17.packages | grep ^$x`
    s=`expr length $y`
    if test $s -eq "1"
    then
       echo $x
    fi
  done

----------

Lab 7. Перекодировка кириллицы.

Написать преобразователь данного текста в ansi7 и обратно. 

Существует много вариантов обработки кириллических текстов. это и преобразования популярных форматов CP866 CP1251 KOI8R UTF-8 UTF-16 и т.д., и набор утилит grep, sed, cat, .. и всевозможные решения на базе языков программирования C, Java, Perl, PHP, Python, Ruby. Кроме того, что разных способов решения задачи слишком много, они еще большей частью работают только частично (например gnuwin32 sed понимает юникод иначе и хуже чем cygwin sed, а tr в большинстве дистрибутивов Linux, и вовсе не дружит с кодировкой utf8).

В одиночку создать стандарт почти невозможно (в Unix это почти удалось), поэтому предлагаю здесь очередной способ перекодировки большeго набора символов в меньший (русский текст + цифры + знаки препинания в ansi7), не ломая философию Unix.

  А   A       З   Z       П   P       Ч  'C       Я  'A
  Б   B       И   I       Р   R       Ш  'W
  В   V       Й  'I       С   S       Щ  'S       $  '$
  Г   G       К   K       Т   T       Ъ  'Q       '  ''
  Д   D       Л   L       У   U       Ы  'Y
  Е   E       М   M       Ф   F       Ь   Q
  Ё  'O       Н   N       Х   H       Э  'E
  Ж  'Z       О   O       Ц   C       Ю  'U
                                      
  а   a       з   z       п   p       ч  'c       я  'a
  б   b       и   i       р   r       ш  'w
  в   v       й  'i       с   s       щ  's       $  '$
  г   g       к   k       т   t       ъ  'q       '  ''
  д   d       л   l       у   u       ы  'y
  е   e       м   m       ф   f       ь   q
  ё  'o       н   n       х   h       э  'e
  ж  'z       о   o       ц   c       ю  'u

в качестве червиточины, вместо ' 0x27 можно использовать и менее "загруженный", но хуже видимый символ ` 0x60. Переход между кодировками можно осуществлять, например, по символам [] 0x5b 0x5d (неудобно писать исходники с кириллицей в индексах массива, а и не надо).

----------

Исходя из правила Тейлора:

  Никогда не пишите на 'C', если Вы можете это сделать в 'awk';
  Никода не делайте это в 'awk', если с этим справится 'sed';
  Никогда не используйте 'sed', если работу может сделать 'tr';
  Никогда не применяйте 'tr', когда достаточно применить 'cat';
  Избегайте использования 'cat', всегда, когда это возможно.

Исправленный пример c сайта 

  http://www.linux.org.ru/forum/general/1704776

  #!/bin/sh
  #
  # а   a       з   z       п   p       ч  'c       я  'a
  # б   b       и   i       р   r       ш  'w
  # в   v       й  'i       с   s       щ  's       $  '$
  # г   g       к   k       т   t       ъ  'q       '  ''
  # д   d       л   l       у   u       ы  'y
  # е   e       м   m       ф   f       ь   q
  # ё  'o       н   n       х   h       э  'e
  # ж  'z       о   o       ц   c       ю  'u
  #
  # червиточина [x] 0x78

  shopt -s nullglob # If set, Bash allows filename patterns 
                    # which match no files to expand to a null 
                    # string, rather than themselves.
                    #
                    #   http://www.gnu.org/software/bash/manual
                    #        /html_node/The-Shopt-Builtin.html
  for NAME in *
    do
      TRS=`echo $NAME | \               
      sed -e 'y/абвгдезиклмнопрстуфцьу/abvgdeziklmnoprstufcqy/'\
      -e 'y/АБВГДЕЗИКЛМНОПРСТУФЦЬУ/ABVGDEZIKLMNOPRSTUFCQY/'    \
      -e 's/ё/xo/' -e 's/Ё/xO/' -e 's/ж/xZ/' -e 's/Ж/xZ/'      \
      -e 's/й/xi/' -e 's/Й/xI/' -e 's/ч/xc/' -e 's/Ч/xC/'      \
      -e 's/ш/xw/' -e 's/Ш/xW/' -e 's/щ/xs/' -e 's/Щ/xS/'      \
      -e 's/ъ/xq/' -e 's/Ъ/xQ/' -e 's/ы/xy/' -e 's/Ы/xY/'      \
      -e 's/э/xe/' -e 's/Э/xE/' -e 's/ю/xu/' -e 's/Ю/xU/'      \
      -e "y/я/xa/" -e "y/я/xA/" -e 's/x/xx/';

    if [ "$NAME" -ne "$TRS" ]; then
      mv -v "$NAME" "$TRS"
    fi

    if [ -d "$TRS" ]; then
      cd "$TRS"
      "$0"
      cd ..
    fi
  done
  
----------

Lab 8. Формирование словаря.

Исходный текст (англ.) приводится в конце описания работы (Job ... field.). Создать файл со списком разных слов:

  cat textfile | \
  tr -cs '[:lower:][:upper:]' '[\n*]' | \
  sort | uniq > newfile

Сколько разных слов?

  cat textfile | \
  tr -cs '[:lower:][:upper:]' '' | \
  sed s/'/\n/g | sort | uniq | wc -l
  
  80
  
Сколько слов?  

  cat textfile | \
  tr -cs '[:lower:][:upper:]' '' | \
  sed s/'/\n/g | sort | uniq | wc -l
  
  98

Повторяющиеся слова?

  cat textfile | \
  tr -cs '[:lower:][:upper:]' '' | \
  sed s/'/\n/g | sort | uniq -d
  
  a field in job market not of or people story the to was
  
Словари. Какие слова не входят в следующие словари?

Voice of america english (copy-paste)

  http://www.manythings.org/voa/words.htm
  
Globish english (pdftotext.exe, xpdf)

  http://www.speakenglisheasilytoday.com/uploads/4/2/0/4/4204084/globish-english.pdf
  
Odgen basic english (copy-paste)
       
  http://www.manythings.org/vocabulary/lists/l/words.php?f=ogden
  
Pidgin english (bash, wget, sed, cat, grep)

  http://www.tok-pisin.com/sort-english.php?page=1..74
  
  
Job evolution.

The story well-known from westerns: 

  Cowboy at revolver (or rifle) gunpoint digs his own grave.
  
It seems the story was not one that liked by people with highest IQ, people capable to develop new weapons (including WMD) or lead work in the field of AI. 

So, additional competition in the medium difficulty job market was created. That led to a strong fragmentation of those job segments, what in turn complicated the implementation of such jobs.

In other words - Einstein saying ".. simple as possible, but not simpler .. " is no longer appliable to a job market field.

----------

Lab 9. JeOSX: Обмен текста (вырезать-копировать-вставить, clipboard)

  1. Настройка клиента.

    Machine -> 
      Settings -> 
        General -> 
          Advanced -> 
            Shared Clipboard: [ Bidirectional ]
            
    Devices -> 
      Install Guest Additions
      
    sudo -s
    mkdir -p /mnt/vbga
    mount -o ro /dev/cdrom /mnt/vbga
    cd /mnt/vbga
    apt-get update
    apt-get upgrade
    reboot

  2. Удалить файлы устаревшего ядра и его заголовки (headers)

    dpkg -l | grep linux
    apt-get remove ...
    apt-get autoremove
    
  3. Установить новые заголовки и средства построения модулей ядра

    apt-get install build-essential linux-headers-$(uname -r)
    
  4. Установить "guest additions"

    ./VBoxLinuxAdditions.run uninstall
    ./VBoxLinuxAdditions.run
    
  5. Запустить VirtualBox guest

    virtu@bootstrap:~$ VBoxClient-all
    
  6. Проверить и изменить (если необходимо) файлы настройки X:

    virtu@bootstrap:~$ cat .Xdefaults 

    XTerm*VT100.translations: #override <Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)
    XTerm*font:     *-fixed-*-*-*-18-*
    XTerm*boldFont: *-fixed-*-*-*-18-*

    virtu@bootstrap:~$ cat .xinitrc 

    xrdb -merge ./Xdefaults
    xterm &
    feh --bg-scale /usr/local/data/stairway.jpg &
    fbpanel &
    openbox-session                           

  7. Установить разрешение экрана guest 1024x768, для чего

    apt-get install arandr
    arandr &
    
    Outputs -> VBOX0 -> Resolution: [ 1024x768 ]
    Apply
    Exit
     
  8. Копировать-вставить текст между JeOSX guest и Windows 8 host.

    Русскую клавиатуру можно включить набрав в xterm:
     
    $ setxkbmap ee
    $ setxkbmap ru
  
----------

Lab 10.

                   Даже известный факт можно засекретить 
                   методом забывания.
                   Достаточно правильно определить момент, 
                   когда его уже никто не может вспомнить.

Сетевой интерфейс.

  1. Скачать и клонировать (не клонировать UUID !) JeOSX-4GB.vdi

  2. Построить на склонированном образе жесткого диска вторую виртуальную машину (ОЗУ 512K). Добавить сетевую карту, настоив ее на internal network.
     
  3. /etc/network/interfaces

    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1

    Временно (внутри сессии) можно:

    ifconfig eth0 192.168.1.2 up
    route add default gw 192.168.1.1
    
  4. Ликвидировать замусоривание eth0,.. если оно возникло

     dmesg ethx
     rmmod <nic_module_name>
     # стереть интерфейсы eth0.. в файле
     /etc/udev/rules.d/70-persistent-net-rules 
     service udev restart
     modprobe <nic_module_name>
        
  5. /etc/resolv.conf

     должно содержать ссылку на сервер DNS.

  6. Установить iptables
     
  7. Поднять второй интерфейс в виртуальной машине 1, соединить его с той-же внутренней сетью, что и для виртуальной машины 2.
     
     iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
     sysctl net.ipv4.ip_forward=1

  8. Сделать ping себя, первой виртуальной машины, доступного адреса.
     
  9. Активировать DNS в машине 2, добавив доступный DNS сервер в /etc/resolv.conf
     
     nameserver x.x.x.x
     

Lab 11.

Загрузка файла по http.

На сервере (виртуальная машина JeOSX-4GB.vdi) установлены apache2 и php (пятая версия). Машина снабжена двумя сетевыми интерфейсами eth0 (ip 10.0.2.15 dhcp), находится в виртуальной подсети за NAT gateway устройством (10.0.2.2), встроенным в программу Oracle VirtualBox и eth1 (ip 192.168.10.1, внутренняя сеть с именем, например "intnet".

Запустить на машине ip-маскарад с 10-й работы. добавить в папку web рута скрипты закачки файла (u.html, upload.php) и тест <?php phpinfo(); ?>.

На клоне сервера удалить интерфейс eth0, eth1 переименовать в eth0 изменив его адрес на 192.168.10.2 и указав gateway: 192.168.10.1. В /etc/resolv.conf должен быть указан работающий DNS сервер - машина 2. Запустить Машину 2 во внутренней сети intnet, браузером проверить наличие интернета и доступность apache на машине 1. Вызвать скрипт с phpinfo, затем скрипт загрузки файла. Из машины 2 в машину 1 загрузить текстовый файл с содержанием: "<имя> был(а) здесь". Прочесть файл в машине 1. 


Дальнейшие задачи.

  1. Запустить услугу DNS в виртуальной машине 1.

  2. Запустить сервис DHCP в виртуальной машине 1. В машине 2 вернуться к динамическому IP (но во внутренней сети)
  3. Cвязаться из машины 2 (клиент) с машиной 1 (сервер) по SSH, FTP, SAMBA (монтировать папку с машины 1)

Далее привожу неотредактированные фрагменты лабoраторных работ по схожим темам (группа КПЭ07):

----------

DNS teenused

  1) dnsmasq

  dnsmasq.conf

  resolv-file=/etc/dnsmasqresolv.conf
  interface=eth0
  address=/rate.ee/193.40.160.1

  2) cp /etc/resolv.conf /etc/dnsmasqresolv.conf

  3) echo nameserver 127.0.0.1 > /etc/resolv.conf

----------

  0. Linuxi masinas peab olema installitud

     samba ( apt-get install samba, yum install samba)
     smbclient 
     dhcp3-server

  1. tuntap liides

     #!/bin/bash
     # /usr/local/bin/tuntap-start
 
     tunctl -u kasutaja
     ip addr add 10.0.0.1/24 dev tap0
     ip link set tap0 up
     service iptables stop
     iptables -F
     iptables -X
     iptables -t nat -F
     iptables -t nat -X
     iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
     sysctl net.ipv4.ip_forward=1
     service dhcpd restart
 
     #!/bin/bash
     # /usr/local/bin/tuntap-stop
 
     sysctl net.ipv4.ip_forward=0
     iptables -F
     iptables -X
     iptables -t nat -F
     iptables -t nat -X
     tunctl -d tap0
     service iptables start 
 
  2. Start dhcp3-server (ubuntus) dhcpd (fedora)

  3. Virtuaalstendi konfiguratsioon (VirtualBox 2.20). 
     (bridged interface, tap0)

     HOST OS:  Ubuntu 8.10 (või Fedora 10)
               Sun VirtualBox 2.2.0
     GUEST OS: Windows XP 4GB HD 128M RAM

     +---------------------+
     |eth0|  172.16.131.x  |  DHCP
     +----+                |
     |   Host Computer     |
     |                     |
     +----+                |
     |tap0|   10.0.0.1     |  STATIC:
     +----+                |
     |                     |
     |+-------------------+|
     || (DHCP, Windows OS)||
     ||  Guest Computer   ||
     ||VirtualGuestAddons ||
     |+-------------------+|
     +---------------------+

  4. Monteerimine

    # mkdir /mnt/samba0
    # mount -t cifs -o username=virtual //10.0.0.11/C /mnt/samba0

----------

Virtuaalstendi konfiguratsioon I. (NAT)

   HOST OS:  Ubuntu 8.10 (või Fedora 10)
             Sun VirtualBox 2.1.4
             
   GUEST OS: Fedora 10 FluxBox 2GB HD 128M RAM

  +---------------------+
  |eth0|  172.16.131.x  |
  +----+                |
  |   Host Computer     |
  |                     |
  |                     |
  | [VirtualBox Router] |
  | [    10.0.2.3     ] |
  | [NAT, DHCP, DNS   ] |
  |                     |
  |+-------------------+|
  ||    10.0.2.15      ||
  ||  Guest Computer   ||
  ||VirtualGuestAddons ||
  |+-------------------+|
  +---------------------+

  1. Käivitada SSH teenus mõlemas arvutis (host ja virtual).

  2. Virtuaalarvutis luua revers SSH tunneli.

     # ssh -R 10022:localhost:22 -l kasutaja 172.16.131.x

  3. Terminalist host süsteemis võtta ühendus virtuaalarvutiga

     # ssh -p 10022 virtu@localhost

  4. Terminalist host süsteemis käivitada graafiline aplikatsioon
     virtuaalarvutis näidates seda host arvuti desktopile

     # ssh -p 10022 -X virtu@localhost
     $ xclock 

  5. Terminalist host süsteemis käivitada graafiline aplikatsioon
     virtuaalarvutis näidates seda virtuaal arvuti desktopile.

     Virtuaalses arvutis:

     # xhost +localhost
     
     Host arvutis:

     # xclock -display :0

----------

Virtuaalstendi konfiguratsioon II. (host interface, tap)

   HOST OS:  Ubuntu 8.10 (või Fedora 10)
             Sun VirtualBox 2.1.4
   GUEST OS: Fedora 10 FluxBox 2GB HD 128M RAM

  +---------------------+
  |eth0|  172.16.131.x  |  DHCP
  +----+                |
  |   Host Computer     |
  |                     |
  +----+                |
  |tap0|   10.0.0.1     |  STATIC:
  +----+                |
  |                     |
  |                     |
  |+-------------------+|
  ||    10.0.0.2       ||
  ||  Guest Computer   ||
  ||VirtualGuestAddons ||
  |+-------------------+|
  +---------------------+

  Ubuntu Host

  1  apt-get install uml-utilities

  2  tunctl -u kasutaja
     ip addr add 10.0.0.1/24 dev tap0
     ip link set tap0 up
     service iptables stop
     iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
     sysctl net.ipv4.ip_forward=1

  Fedora Guest

  1  /etc/sysconfig/network-scripts/ifcfg-eth0

     DEVICE=eth0
     BOOTPROTO=static
     IPADDR=10.0.0.2
     NETMASK=255.255.255.0
     BROADCAST=10.0.0.255
     GATEWAY=10.0.0.1

  2  service network stop
     service network start

  3  echo nameserver 172.16.131.1 > /etc/resolv.conf

  4  ping neti.ee

  5  (yum install mysql-server mysql httpd php php-mysql
      /var/www/html - document root)

----------

DHCP server (Ubuntu Host)

  1  Installida dhcp daemon

     apt-get install dhcp3-server

  2  Konfigureerida /etc/dhcp3/dhcpd.conf

     #kõik muu kommentida välja
 
     default-lease-time 600;
     max-lease-time 7200;
 
     subnet 10.0.0.0 netmask 255.255.255.0
     {
             range 10.0.0.10 10.0.0.20;
             option subnet-mask 255.255.255.0;
             option routers 10.0.0.1;
             option domain-name-servers 172.16.131.1;
     }
 
     subnet 172.16.131.0 netmask 255.255.255.0
     {
     }

  3  Startida dhcpd

     /etc/init.d/dhcp3-server start


  Fedora Guest

  1. /etc/sysconfig/network-scripts/ifcfg-eth0
 
   DEVICE=eth0
   BOOTPROTO=dhcp
  
  2. service network start
 
     (vajaduse puhul:
 
       service network stop
       killall -9 dhclient
       rm /var/run/dhclient*.pid
     )
 
  3. ifconfig eth0
     route -n
     ping neti.ee

----------

DNS daemon (Ubuntu Host)

  1. apt-get install dnsmasq
 
  2. Konfida /etc/dnsmasq.conf
 
    address=/www.tpt.edu.ee/193.40.160.1
    interface=tap0
 
  3. /etc/init.d/dnsmasq start
 
 
Fedora Guest
 
  1. service network restart
 
  2. yum install dillo
 
  3. browsida suvaline sait ja "faked" sait

----------

Guest:

  /usr/share/X11/app-defaults/XTerm

  xterm*font: -*-fixed-medium-r-*-*-24-*-*-*-*-*-iso8859-*
  xterm*background: yellow
  xterm*foreground: black
  xterm*geometry:   80x25

-----------

Untested upload script

  <?php
  if ( isset( $_SERVER['CONTENT_LENGTH']) && $_SERVER['CONTENT_LENGTH'] > 1024*1024)
      echo "Oshibka: ZAGRUZKA RUHNULA, fail slishkom bol'shoj !";

  echo "Length " . $_SERVER['CONTENT_LENGTH'] . "<br>";
  $f = isset($_FILES) && isset($_FILES["file"]);
  echo $f . '<br/>';

  if ( $f ) {
    var_dump($_FILES["file"]);
    
    echo '<br/>';
    echo '=== isset ===' . '<br/>';

    if ($_FILES["file"]["error"] > 0) {
      echo "Oshibka: " . $_FILES["file"]["error"] . "<br>";
    }
    else {
      echo "Zagruzhen: " . $_FILES["file"]["name"] . "<br>";
      echo "Tip: " . $_FILES["file"]["type"] . "<br>";
      echo "Vremenno Sohranen v: " . $_FILES["file"]["tmp_name"];

      if ($_FILES["file"]["error"] > 0) {
        echo "Kod vozvrata: " . $_FILES["file"]["error"] . "<br>";
      }
      else {
        move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]);
        echo "Sohranen v: " . "uploads/" . $_FILES["file"]["name"];
      }
    }
  } else {
      var_dump($_FILES);
      echo '<br/>';
      echo "Nepravil'nyj fail" . '<br/>';
  }
  ?>    

----------

Upload page:

  <html>
    <head>
      <meta charset="utf-8"/>
      <title>U</title>
    </head>
    <body>
      <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file" maxlength="102400" size="60"><br>
        <input type="submit" name="submit" value="Submit">
      </form>
    </body>
  </html>


