Moodle webservices

Example of using Web services https://moodle.org/mod/forum/discuss.php?d=193295
Automating user/course creation and enrolments http://stackoverflow.com/questions/11572189/moodle-automating-user-course-creation-and-enrolments

nodescript web

Starting with Node and Web Sockets : http://codular.com/node-web-sockets
Default web page directory : /var/lib/cloud9
Path to default server : /usr/local/lib/node_modules/bonescript/
NODE_PATH in /etc/default/node as NODE_PATH=/usr/local/lib/node_modules
Nested states and views : http://plnkr.co/edit/3KgB5g?p=preview
Nested states : Loading: http://plnkr.co/edit/3KgB5g?p=preview
Building a flexible layout using AngularJS and UI-Router: Part 1: http://josephhsu.com/post/79273250581/building-a-ui-with-ui-router-part-1
ANGULARJS WEBSOCKET SERVICE EXAMPLE http://clintberry.com/2013/angular-js-websocket-service/
WebSocketListener Terminal Server: https://github.com/vtortola/WebSocketListener/wiki/WebSocketListener-Terminal-Server
Beginner’s Guide To Node.Js (Server-Side JavaScript): http://www.hongkiat.com/blog/node-js-server-side-javascript/
Layout switcher: http://plnkr.co/edit/3KgB5g?p=preview

ProxMox WebGUI erişim yetkilendirme

ProxMox WebGUI URLsi olan https://139.179.yyy.xxx:8006 yazan herkes WebGUI’ye erişemez. Erişim yetkileri /etc/default/pveproxy dosyasında tanımlanır.
Örneğin:

# /etc/default/pveproxy
ALLOW_FROM="139.179.14.0-139.179.14.250,139.179.155.2,139.179.39.0/24,139.179.111.0/24"
DENY_FROM="all"
POLICY="allow"

… ve bu dosyada değişiklik ardından

/etc/init.d/pveproxy restart

ProxMox otomatik yedekleme

Mümkündür…
Ancak bir kaç ayar gerektirmektedir:
Önce otomatik yedeklemeyi etkinleştirmelisiniz. Bunun için bir NFS sunucu üzerinde bir NFS paylaşım dizininiz olmalı.

backup_001

“NFS Share” olarak tanıtacağınız NFS paylaşımının adı harfi harfine “Backup_Storage” olmalı. “Content” alanında ise sadece “Backups” olmalı. Sonra  kaç gün geriye kadar yedeklerin alınacağını belirlemelisiniz (“Max. Backups”).
backup_002
Ardından otomatik olarak yedeklenecek makinaları ve yedekleme gün-saatlerini seçmelisiniz.
backup_003

ProxMox'da Kendi CT Şablonunuzu (template) Yaratma

ProxMox’da kendinize özel bir CT (container) şablonu yaratmak istediğinizde izlemeniz gereken adımlar:

  1. Uygun standart sistem şablonlarından birisini kullanarak kendinize bir CT (Container) sanal makina yaratınız.
  2. Bu sanal makinayı uygun gördüğünüz araçlarla donatıp (paketler kurup – kaldırıp) istediğiniz konfigurasyona getiriniz.
  3. Sanal makinanız şablonlaştırmaya hazır olduğunda kapatınız ve ProxMox web yönetim panelinden Network altından IP adresi ile ilgili tanımı siliniz..
  4. ProxMox sunucunuza root olarak bağlanınız.
  5. Aşağıdaki komutları çalıştırınız:
    # cd /var/lib/vz/private/nnn   (nnn: şablonlaştırılacak makinanin ID#)
    # tar xtvf yeni_sablon_adi.tar.gz ./
    # mv yeni_sablon_adi.tar.gz ../../template/cache/

Önemli: yeni_sablon adı xxxxxxxx_i386.tar.gz  veya xxxxxxxx_x86_64.tar.gz olmalıdır. (kurulu Linux’un mimarisine bağlı olarak)

  1. Artık bu şablonu kullanarak yeni CT makinalar yaratabilirsiniz (“Cretae CT”).

LXC'den (Linux Containers) ProxMox'a sanal makina taşıma

Gerekli Ön Bilgiler

LXC sunucusunda sanal makinaların bulunduğu dizin: /var/lib/lxc/

LXC sanal makinalarının disk görüntüsü dizini: /var/lib/lxc/sanal_makina/rootfs

LXC sanal makinalarının konfigürasyon bilgileri: /var/lib/lxc/sanal_makina/config (örneğin sanal makinanın IP adresi bu dosyada “lxc.network.ipv4 = 139.179.139.122/24” şeklinde görülebilir)

ProxMox sunucusunda VM sanal makinaların disk görüntü dizini: /var/lib/vz/images

ProxMox sunucusunda CT sanal makinaların disk görüntü dizini: /var/lib/vz/private

Taşıma İşlemi

LXC sunucusuna root yetkisiyle bağlanıp  taşımak istediğiniz makinanın disk görüntüsünün yer aldığı dizinin büyüklüğünü öğrenin:

root@lxc: du -sh /var/lib/lxc/sanal_makina

Sonra söz konusu makinanın halen sahip olduğu IP adresini öğrenin:

root@lxc: grep network.ipv4  /var/lib/lxc/sanal_makina/config

ProxMox sunucusunda yukarda belirlediğiniz disk kapasitesinden az olmamak; hatta %10 falan daha fazlası (ya da gereği kadar) büyüklükte diski olan bir CT (Container tipi sanal makina) yaratın.

proxmox_createCT

Sunucuda daha önce kullanılmamış bir “VM ID”, uygun bir “Hostname” ve yeni makinada kullanılacak root şifresini girin. (Sanal makina taşındıktan sonra /etc/passwd ve /etc/shadow dosyaları da taşınmış olacağından, bu şifre taşınan eski makinanın root şifresi olarak değişecektir.)

proxmox_createCT2

Ardından yeni CT (container) makinanız için bir şablon (Template) seçmelisiniz. Şablon seçiminden sonra bellek, swap alanı ve disk boylarını belirleyip makinayı yaratınız. İhtiyacınız olan şablon listede yoksa, ProxMox “Server View” menüsünden “local” seçip “Templates” tabını tıklayınız. Uygun bir şablon seçip ProxMox sunucunuza indirilmesini (ProxMox sitesinden) sağlayınız. Artık   bu yeni şablon CT yaratma aşamasında listelenen şablonlar arasında görünecektir.
proxmox_createCT3

 Yeni makinanızı bu aşamada açmayınız. 

ProxMox sunucunuza root olarak bağlanın. Yeni CT makinanızın disk görüntüsünün olduğu dizine geçin:

# root@proxmox:  cd /var/lib/vz/private/204

Aşağıdaki komutla LXC sunucusundaki disk görüntü dizini ile ProxMox sunucusundaki disk görüntüsü dizinini senkronize edin:

rsync -avze ssh --exclude etc/inittab
                --exclude etc/network/interfaces
                --exclude dev/
                --exclude sys/
                --exclude proc/
                root@lxc_sunucu:/var/lib/lxc/sanal_makina/rootfs/ .

Aslında bu senkronizasyon sırasında LXC’deki makina kapalı olsa iyi olur ama bunu istemezseniz çok da dert değil.

Senkron işlemi tamamlanınca ProxMox sunucusundaki yeni makinayı açınız. ProxMox konsoluyla login olup olamadığınızı deneyin (LXC ortamındaki hesap ya da hesapları kullanarak). Yeni IP adresiyle deneyebildiğiniz kadar servislerin çalışıp çalışmadığını kontrol edin. Bir çek servis host adresiyle kurulmuş olduğu için genellikle eski makinaya yönelecektir ama gene de taşımanın başarılı olup olmadığı konusunda fikir verecektir.

Şimdi LXC sunucudaki makinada apache, lighthttpd, mysql, pgsql gibi servisleri durdurup yukardaki rsync komutunu tekrarlayınız. Böylece ilk rsync sırasında dosyalarda oluşmuş olabilecek değişiklikler de yeni makinaya yansımış olacaktır.

DNS sunucunuzda, LXC makinasında çalışmakta olan servislerle ilgili DNS kayıtlarını yenileyiniz ve LXC’deki makinayı tamamen kapatınız. DNS propagasyonu yüzünden eski sunucuya yönelecek olan erişimler sorun çıkaracaksa başka önlemler almak gerekecektir. (PHP ile redirect falan gibi şeyler)

Debian-Linux'ta USB bellek takıldığında otomatik olarak bir uygulama başlatmak

Bir gün, bir Linux makinaya USB bellek veya disk takıldığında kullanıcıya hiç sormadan o belleği/diski formatlama gereği çıktı. “Niye?” diye sormayın; çıktı işte…
Çözümü udev uygulamasıyla ve şu adresteki uygulama notlarıyla buldum (yazarı Nicolas Bernaerts). Uygulama notlarının özeti şöyle:
Bir USB belek ya da disk seçip makinanıza takın
Taktıktan sonra konsoldan “dmesg” komutunu verip çıktının sonuna bakınız.

# dmesg
[...] USB Mass Storage support registered.
[...] usb-storage: device scan complete
[...] scsi 2:0:0:0: Direct-Access     TOSHIBA  TransMemory PMAP   PQ: 0 ANSI: 4 CCS
[...] sd 2:0:0:0: [sdc] 781422768 512-byte hardware sectors (400088 MB)
[...] sd 2:0:0:0: [sdc] Write Protect is off
[...] sd 2:0:0:0: [sdc] Mode Sense: 34 00 00 00
[...] sd 2:0:0:0: [sdc] Assuming drive cache: write through
[...] sd 2:0:0:0: [sdc] 781422768 512-byte hardware sectors (400088 MB)
[...] sd 2:0:0:0: [sdc] Write Protect is off
[...] sd 2:0:0:0: [sdc] Mode Sense: 34 00 00 00
[...] sd 2:0:0:0: [sdc] Assuming drive cache: write through
[...] sdc: sdc1
[...] sd 2:0:0:0: [sdc] Attached SCSI disk

Bu çıktıdan USB diskinize /dev/sdc1 olarak erişildiğini öğrenmiş olacaksınız.
Taktığınız disk/USB bellek hakkında daha ayrıntılı bilgi için şu komutu kullanınız: Komutun çıktısı oldukça uzun olacaktır. Burada sadece bir kısmını listeledim.

# udevadm info -a -p $(udevadm info -q path -n /dev/sdc)
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/host2/target2:0:0/2:0:0:0':
KERNELS=="2:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{device_blocked}=="0"
ATTRS{type}=="0"
ATTRS{scsi_level}=="3"
ATTRS{vendor}=="TOSHIBA  "
ATTRS{model}=="TransMemory     "
ATTRS{rev}=="    "

Şimdi artık  makinanıza “TOSHIBA” marka “TransMemory” modeli bir USB bellek takıldığında yapılacak işi tarif eden udev kuralını oluşturabilirsiniz:

# vi /etc/udev/rules.d/90-local.rules
KERNEL=="sd?1", ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="XTOSHIBA ", ATTRS{model}=="TransMemory     ", RUN+="/root/cua.sh %k"
# /etc/init.d/udev/restart
# vi /root/cua.sh
#!/bin/bash
echo USB $1 takildi >> /var/log/usblog
nohup /root/cua-task.sh $1

udev kural dosyasında belirtilen marka-model USB disk takıldığında başlatılacak iş RUN parametresinde belirtilmektedir. Bu başlatılan iş kısa süre sonra udev işini bitirdiğinde hala çalışıyor olsa bile, üst process (udev) öldüğü için öldürülecektir. Bunu önlemek için RUN parametresinde belirttiğiniz betik, asıl yapılması gerekenleri halledecek olan betik ya da programı nohup parametresiyle başlatmalıdır. Kural satırında geçek %k parametresi, takılan USB belleğin partition numarası bilgisini de içeren “sd1” gibi bir değer içeriyor olacaktır.
Artık gerisi /root/cua-task.sh betiğine kalmış. İster USB belleği formatlayın; ister kopyalayın.

ProxMox Sanallaştırma Platformu

Citrix Xenserver’dan vazgeçince tavsiye ve denemeler üzerine ProxMox PVE‘de karar kıldık. Kurulumu ve kullanımı kolay (tek bir web ara yüzünden herşeyi yapabiliyorsunuz); Hem KVM ile tam sanallaştırma, hem de  CV (Container Virtualization; Linux’a özel hızlı ama fazla esnek olmayan bir yapı… detaylar için openvz.org )
Kurulum: Sitesinden ISO dosyasını indirip, CD’ye yakıp bir kaç TByte diski, 16GB falan belleği olan bir makinayı bununla açınız. Gerisi kolay… (diske kendini, bir Debian türevi olan kendi işletim sistemiyle birlikte kuracaktır.
Kullanım: Firefox veya Chrome ile https://sunucunuz:8006 adresine gidip root/root_şifresi ile web yönetim paneline girin. Gerisi kolay… Web yönetiminde sanal makinalarınızın konsollarına erişebilmek için Java gerekecektir. Ancak OpenJDK ile çalışmıyor! İstemcilere mutlaka ORACLE-Java yüklenmesi gerekiyor.
Debain türevi istemcide OpenJDK’yı kaldırmak ve yerine Oracle Java  [78] kurmak icin:

 # apt-get purge openjdk*
 # add-apt-repository ppa:webupd8team/java
 # apt-get install oracle-java[78]-installer
 # apt-get updateupdate-java-alternatives -s java-[78]-oracle

İlk akla gelen sorular:

Sanal makinaların diskleri nerede?  /var/lib/vz/images/ altında, makina tanıtım kodu (numarası) ile aynı olan dizin altında…
Sanal makinaların ayarları nerede? /etc/pve/nodes/PROXMOX-SUNUCUSU/qemu-server/*.conf …
Bu ayar dosyalarını vi ile editleyebilir miyim? Ne yaptığınızı biliyorsanız, evet!
Otomatik VM yedekleme var mı? Var! ProxMox’a bir NFS mount noktası gösterdiğinizde (bizde heybe3.bcc.bilkent.edu.tr:/proxmox_vm_backups on /mnt/pve/Backup_Storage) ( ProxMox yönetim panelinde “Datacenter –> Storage –> Add –> NFS Share –> Server = Nfs Server –> Export = Export adı –> “Content = Backups” ) artık otomatik yedekleme için kullanılacak NFS sunucusu ve paylaşılan dizin belirlenmiş olur. Ardından “Datacenter” –> “Backup” –> seçimi ardından otomatik yedeklemesi yapılacak makinaları ve yedekleme gün-saatlerini seçebilirsiniz.  Geriye dönük kaç günlük yedeklerin tutulacağını ise “Datacenter” –> Storage ->> “Backup_Storage” –> çift klik –> “Max Backups” ile tanımlayabilirsiniz.

proxmox_backup

Fiziksel Linux Makinaları ProxMox’a Taşıma

Yöntem-1 (Taşınacak makina uzunca süre kapalı kalacaktır)

ProxMox ortamında diski fiziksel makinanın diskinden 300-500 MB daha büyük olan bir sanal makina yaratın.

Bu sanal makinaya bir Live-CD takın (bu CD’nin ISO dosyası daha önce ProxMox sunucusunda “local storage”a upload edilmiş olmalıdır. Sol menüden “Storage List” -> “local” -> “Upload”). Sanal bir makinaya CD takmak için: Sol menüden ilgili makinayı tıkla -> “Hardware” -> CD/DVD Drive çift tıkla -> “Use CD/DVD disk image” -> ISO Image dosyasını seç.

Sanal makinayı CD/DVD’den boot et. Gerekirse sanal makina için “Options” altında “Boot order” bilgisini değiştir.

Sanal makinanın IP ayarlarını yapın:

# ifconfig eth0 139.179.39.119 netmask 255.255.255.0 broadcast 139.179.39.255
# route add default gw 139.179.39.1           gibi

Fiziksel makinayı kapatıp bir Live-Linux CD/USB kullanarak açın ve uygun IP ayarlarını yapın:

# ifconfig eth0 139.179.125.120 netmask 255.255.255.0 broadcast 139.179.125.255
# route add default gw 139.179.125.1       gibi

Fiziksel makinanın diskini, fiziksel makinada vereceğiniz dd komutuyla sanal makinanın diskine kopyalayın (100 Mbit/sn bir bağlantıda saatler sürebilir) (/dev/sda mı  yoksa /dev/hda mı kullanılacağını her iki makinada çalıştıracağınız “fdisk -l” komutlarıyla görebilirsiniz. Büyük olasılıkla “/dev/sda” olacaktır.

# dd if=/dev/sda | ssh root@139.179.39.119 dd of=/dev/sda

Kopyalama bittiğinde sanal makinayı kapatıp, CD’yı çıkarıp ( sol menüden makinayi tıklayıp -> Hardware -> “CD/DVD Drive” çift tıklayıp -> “Do not use any media”  ya da “Options” altında “Boot order” değiştirerek) makinanın diskten açmasını sağlayınız. Disk kopyalama sırasında IP adresiyle ilgili ayarlar da kopyalanmış olacağından bu yeni sanal makinanın konsolunu kullanarak IP adresi ve diğer TCP/IP parametrelerini olması gerektiği şekilde değiştirmeyi unutmayınız.

Yöntem-2 (Taşınacak makina bir-iki dakika servis dışı kalabilir)

ProxMox ortamında diski fiziksel makinanın diskinden 300-500 MB daha büyük olan bir sanal makina yaratın.

Bu sanal makinaya, sanallaştırılacak makina ile tıpa-tıp aynı Linux distrosunu yükleyin.

Sanallaştırılacak makinaya, yoksa rsync paketini yükleyin. ( apt-get install rsync )

Sanallaştırılacak makinada “rsync” servisini açın ( /etc/default/rsync –> RSYNC_ENABLE=true )

Sanallaştırılacak makinada /etc/rsyncd.conf dosyasını aşağıdaki örneğe göre yaratın ya da günceleyin: (139.179.39.0/24 IP adres bloğunu sanal makinanızın yer aldığı IP bloğu ile değiştirmeyi unutmayın)

[all]
exclude = /etc/network/interfaces /boot /etc/grub / dev /proc /sys /run /mnt /lost+found /media
read only = yes
numeric ids = yes
uid = 0
gid = 0
hosts allow = 139.179.39.0/24

Yeni sanal makinada aşağıdaki komutu çalıştırın (139.179.125.120: sanallaştıtılacak makinanın IP adresi):

rsync -av 139.179.125.120::all  /

rsync tamamlandığında, sanallaştırılacak makinada apache, mysql gibi servisleri durdurup rsync komutu tekrarlayın.

Hemen ardından yeni sanal makinayı restart edin. Sorun yoksa DNS ayarlarında gerekli değişiklikleri yapıp sanallaştırılan makina için tanımlı IP adreslerini yeni makinaya göre değiştirin. Fiziksel makinayı kapatıp tüm servislerin yeni sanal makina tarafından verildiğine emin olun.

Fiziksel Windows Makinaları ProxMox’a Taşıma

(Taşınacak makina kapalı kalmaz.)

Bu yöntem, sanallaştırılacak Windows makinanın disklerinin IDE, ATA, SATA olmasına göre başarılı olmayabiliyor. Şu anda hangi durumda başarılı; hangi durumda başarısız olduğunu anlayamadım. Başarısız olma durumunda sanal makina açılacakmış gibi başlayıp sürekli reboot ediyor. Recovery mode da flan açılmıyor. Literatürde sözu edilen embedide.reg registry ayar eklentileri de bende işe yaramadı. Bir Windows-7 makinayı bu yöntemle başarıyla aktardım ama bir XP makinayı aktaramadım.

ProxMox ortamında diski fiziksel Windows makinanın diskinden 300-500 MB daha büyük olan bir sanal makina yaratın.

Windows makinaya SelfImage-121 yazılımını kurun.

ProxMox sunucusunda az önce yarattığınız sanal makinanın sanal diskinin adını öğreniniz. Bunun için ProxMox ekranında sol tarafta makinayı seçip “Hardware” tab’i altında “Hard Disk” olarak listelenen satırda “local:115/vm-115-disk-1.qcow2,format=qcow2,size=50G” gibi bir satır göreceksiniz. Bu satırdan size lazım olan karakter dizisi “115/vm-115-disk-1.qcow2” kısmıdır. Bu dizin/dosya adını not edip ProxMox sunucunuzda açacağınız bir root konsolundan aşağıdaki komutu giriniz:

qemu-nbd  -t  /var/lib/vz/images/115/vm-115-disk-1.qcow2  -p  1024

Sanallaştıtılacak WinPC’de selfimage programını başlatıp, “Input” bölümünde “Harddisk (Entire disk)” seçip “Output” bölümünde “NBD” (Network Block Device) seçiniz  ve “Port” olarak “1024” giriniz. “Host” olarak ProxMox sunucunuzun adını ya da IP adresini giriniz.

selfimage

Ardından “Start” tıklayıp beklemeye başlayınız. Diskinizin büyüklüğüne ve ağ hızınıza bağlı olarak uzun saatler beklemek durumunda kalabilirsiniz.

SelfImage işini bitirdiğinde ProxMox sunucu konsolunda ^C ile qemu-nbd komutunu sonlandırıp sanal makinanızı çalıştırın. Ben bu işlemi Windows-7 bir fiziksel makina ile denediğimde sanal Windows-7 makina açıldığında bir dizi chkdsk işleminden sonra başarıyla açıldı.