Schulung-Teil2-Server mit Xen aufsetzen: Unterschied zwischen den Versionen

Aus revampedia
 
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
{{#switch:{{#IfLang:}}
 +
|en=
 +
== Preface ==
 +
This training session took place on 11-17-2016. It is the continuation of [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil1-Server_mit_RAID1_aufsetzen ersten Teil]. Today we learned how to setup a Xen-Server. With a Xen-Server we can create virtual machines, that we can use for various purposes. The first virtual machine will be a webserver (Apache). jr <br />
 +
 +
<pre>
 +
If there are still questions open after these instructions, please go to "Views" and then "Discussion" to leave your feedback, so I can add more Details to this page. jr
 +
</pre>
 +
 +
== Remotely start the server ==
 +
 +
Our teacher installed the program "wakeonlan" on the LTSP-System we have for our training sessions. So, all our clients also get to use this program. With "wakenonlan" we can turn on our server through the LAN connection. In our training session the server is only a few meters away from us, but if there are several floors between us and the server or even several kilometers, this is a very handy tool, so we don't have to be on-site to power up the server. We do this with the following command:<br />
 +
wakeonlan -i 192.168.67.255 00:21:5a:6d:6d:42
 +
 +
-i states that an IP address follows<br />
 +
192.168.67.255 is the broadcast address of our network. Most likely this will be differnt in your case. For a little introduction into IPv4 I made [http://wiki.revamp-it.ch/index.php?title=Kurzeinf%C3%BChrung_zu_IPv4 this page]. <br />
 +
00:21:5a:6d:6d:42 is the MAC address of my server's network card. This must be unique, so your's will be different <br />
 +
 +
So, the general synthax for this is: <br />
 +
wakeonlan -i "broadcast IP" "MAC address"
 +
 +
To be able to do an SSH session to our server, we had to find out the IP address our servers received. Our teacher did this by viewing the following: <br />
 +
less /var/lib/dhcp/dhcpd.leases
 +
 +
This file only exists on a DHCP server. It won't exist on a DHCP client. The path /var/lib/dhcp/ will exist on a server and a client. <br />
 +
 +
== How to login on the server ==
 +
 +
In my case I had to enter the following command to login to my server:<br />
 +
ssh user1@192.168.67.68
 +
 +
A more general synthax is <br />
 +
ssh "username"@"remote computer"
 +
 +
Username is the user you wish to use to login to the server. The user "root" can't login through SSH on the server for security reasons.
 +
Remote computer can be either an IP address or a DNS name. <br />
 +
 +
When you connect the first time to a remote computer, it sends you it's finger print. To continue, you need to write out the answer. A simple "y" isn't enough.<br />
 +
 +
Are you sure you want to continue connecting (yes/no)? yes
 +
 +
== Update packages ==
 +
 +
Before we start installing a new program, we want to update the list of available packages for our Debian Jessie. If we're logged in as a regular user we do this with the following command:<br />
 +
sudo apt update
 +
 +
If you do this as "root", the "sudo" isn't necessary<br />
 +
 +
== Install packages for Xen-Hypervisor ==
 +
 +
For our Xen-server, we need the packages xen-linux-system and xen-tools. So, we enter the following command on the CLI: <br />
 +
user1@server1:~$ sudo apt install xen-linux-system xen-tools
 +
 +
An outdated version of this installation can be found in german [http://wiki.revamp-it.ch/index.php?title=Revamp_LTSP:_Doku_zu_Installation_und_Konfiguration in our wiki]. We can copy some things from there, so we don't have to type too much.<br />
 +
 +
We have to enter the following command:<br />
 +
sudo dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
 +
 +
We change the name of the file, so it won't be overwritten with the next update of the package. My own understanding of Linux isn't well enough to give a better explanation of what we do with the command. If that ever changes, I'll update this text.<br />
 +
 +
Since I got tired of having to enter sudo at the beginning of each command, I changed to the root user. I did this by entering <br />
 +
sudo -i
 +
 +
Next we have to update our boot loader GRUB. For that we need to enter: <br />
 +
update-grub
 +
 +
To test if our changes were successful, we rebooted the server. We can do this with the following command:<br />
 +
reboot
 +
 +
== Reconfigure the network connection ==
 +
 +
Since the connection to the server was lost with the reboot, we need to reconnect to it with:<br />
 +
  ssh "username"@"remote computer" (in my case ssh user1@192.168.67.68)
 +
 +
and changed again to root user<br />
 +
sudo -i
 +
 +
To check if the server started with the new parameters, we used the program "dmesg". The computer shows a lot of information. As it's more than the console can show at once on the screen, we redirect the output to the programm "less", so we can also use PageUp and PageDown to look at the text.
 +
<pre>
 +
dmesg | less
 +
</pre>
 +
Here we found our entries to Xen. To leave the progam "less" you need to press "q".<br />
 +
 +
If you wish to see the first or last lines, you can use the program "head" or "tail". Without further parameters it will show 10 lines:
 +
<pre>
 +
dmesg | head
 +
</pre>
 +
-> Shows the first 10 lines
 +
<pre>
 +
dmesg | tail
 +
</pre>
 +
-> Shows the last 10 lines
 +
 +
As we're planing on changing a file, we first make a copy of it for backup purposes:
 +
root@server1:~# cp /etc/network/interfaces /etc/network/interfaces.orig
 +
And we open the file with the editor "nano":
 +
root@server1:~# nano /etc/network/interfaces
 +
 +
If you don't want to write out a long path, you can first change into the directory by typing the following:
 +
cd /etc/network/
 +
and make the copy of the file:
 +
cp interfaces interfaces.orig
 +
that you can go and edit the original:
 +
nano interfaces
 +
 +
[http://wiki.revamp-it.ch/index.php?title=Private_Versuche-Xen_aufsetzen_auf_Laptop Here you can find my private tries on a laptop without ethernet and only WLAN]
 +
 +
We commented the existing entries out:
 +
# allow-hotplug eth0
 +
# iface eth0 inet dhcp
 +
Lines that start with a # are considered a comment and everything that follows it is ignored. <br />
 +
And added the folloing:
 +
iface eth0 inet manual
 +
auto xenbr0
 +
iface xenbr0 inet dhcp
 +
bridge_ports eth0
 +
 +
To save the changes press Ctrl+o and to leave the nano-editor press Ctrl+x. The commands are also listed at the bottom of the editor.
 +
 +
Here's an explanation what we do with the new settings.
 +
iface eth0 inet manual  -> Interface für Internet is configured manually <br />
 +
auto xenbr0            -> When the computer starts up it automatically enables the Xen-Bridge <br />
 +
iface xenbr0 inet dhcp  -> Xen-Bridge uses DHCP <br />
 +
bridge_ports eth0      -> Bridge to Interface eth0 <br />
 +
 +
The purpose of the Xen-Bridge is to be able to communicate with the virtual machine, as we only have one physical network interface. For more details follow [https://wiki.xenproject.org/wiki/Xen_Networking this link]. I hope that the picture I copied helps a bit to understand what the bridge does.
 +
 +
[[Datei:Xen-network-basic.png]]
 +
 +
 +
After the editing we reboot once more by typing:
 +
reboot
 +
 +
== Create a virtual machine ==
 +
 +
Our teacher checked if the IP addresses changed due to the reboot.
 +
 +
Now we go back to the server by typing
 +
ssh "username"@"remote computer"
 +
 +
Now we can see the changes we did to /etc/network/interfaces. We use the command "ip address". We don't have to write the full command, the system knows what do when we type the following:
 +
ip a
 +
 +
Here is what it showed on my test machine:
 +
 +
<pre>
 +
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
 +
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 +
    inet 127.0.0.1/8 scope host lo
 +
      valid_lft forever preferred_lft forever
 +
    inet6 ::1/128 scope host
 +
      valid_lft forever preferred_lft forever
 +
 +
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master xenbr0 state UP group default qlen 1000
 +
    link/ether 00:21:5a:6d:6d:42 brd ff:ff:ff:ff:ff:ff
 +
 +
3: xenbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
 +
    link/ether 00:21:5a:6d:6d:42 brd ff:ff:ff:ff:ff:ff
 +
    inet 192.168.67.68/24 brd 192.168.67.255 scope global xenbr0
 +
      valid_lft forever preferred_lft forever
 +
    inet6 fe80::221:5aff:fe6d:6d42/64 scope link
 +
      valid_lft forever preferred_lft forever
 +
</pre>
 +
 +
We can see that there is no address on eth0 and that Xen manages the address. If you wish to know a little more to IPv4, there is a short introduction to it [http://wiki.revamp-it.ch/index.php?title=Kurzeinf%C3%BChrung_zu_IPv4 under this link]. <br />
 +
 +
Next we have to change into a different folder:  <br />
 +
cd /etc/xen-tools/partitions.d/
 +
 +
Here is what's currently in this folder:  <br />
 +
root@server1:/etc/xen-tools/partitions.d# ls -la
 +
insgesamt 12
 +
drwxr-xr-x 2 root root 4096 Nov 17 14:29 .
 +
drwxr-xr-x 6 root root 4096 Nov 17 14:29 ..
 +
-rw-r--r-- 1 root root  463 Okt 26  2014 sample-server
 +
 +
We could make a copy of "sample-server" and modify it, but that's not what we're going to do. We'll create a new file and we're going to use the nano-editor
 +
nano vm1 (chose the same number as your server)
 +
 +
With Ctrl+Shift+V we can paste something in the console that we've copied in the browser. Ctrl+Shift+C can copy something in the console. Unfortunately this key combination doesn't work in all consoles. I use the program "Terminator" where this works. <br />
 +
 +
Here is the text that we pasted into the file vm1:
 +
<pre>
 +
[root]
 +
size=20G
 +
type=ext4
 +
mountpoint=/
 +
 +
[swap]
 +
size=5G
 +
type=swap
 +
</pre>
 +
 +
Ctrl+o to save the file and Ctrl+x to leave the nano-editor.  <br />
 +
 +
Now follows a very long command to create the virtual machine:
 +
root@server1:/etc/xen-tools/partitions.d# xen-create-image --hostname=vm1 --memory=2gb --vcpus=1 --dhcp --lvm=vg01 --dist=jessie --partitions=/etc/xen-tools/partitions.d/vm1 --pygrub --verbose --password=****
 +
 +
Here's the explanation of what we entered here:  <br />
 +
 +
xen-create-image -> This is the command we use to create the virtual machine<br />
 +
--hostname=vm1 -> The name that the virtual machine will have <br />
 +
--memory=2gb  -> How much RAM will be available to the virtual machine<br />
 +
--vcpus=1      -> wieviele Processoren die virtuelle Maschine brauchen darf <br />
 +
--dhcp          -> IP address will be obtained through DHCP<br />
 +
--lvm=vg01      -> The partition where the virtual machine will be created. In the first training session we activated LVM and created vg01<br />
 +
--dist=jessie  -> What Debian distribution will be installed on the virtual machine.<br />
 +
--partitions=/etc/xen-tools/partitions.d/vm1 -> Information for what partitions will be created. It has the path to the file we've created previously.<br />
 +
--pygrub        -> alternative boot loader for our virtual machine<br />
 +
--verbose      -> we receive more information from the system while the virtual machine is being created<br />
 +
--password=**** -> root password for the virtual machine <br />
 +
 +
At the end of the installation we receive a little summary from the xen-create-image-tool: <br />
 +
 +
<pre>
 +
Installation Summary
 +
---------------------
 +
Hostname        :  vm1
 +
Distribution    :  jessie
 +
MAC Address    :  00:16:3E:98:82:D7
 +
IP Address(es)  :  dynamic
 +
RSA Fingerprint :  31:75:57:0d:c9:f2:8e:79:b6:ef:bb:85:04:ea:75:b4
 +
Root Password  :  ****
 +
</pre>
 +
 +
cd /etc/xen
 +
-rw-r--r--  1 root root  651 Nov 17 15:30 vm1.cfg
 +
 +
This file was created by xen-create-image. To see it's context we enter: <br />
 +
 +
less vm1.cfg
 +
<pre>
 +
 +
#
 +
# Configuration file for the Xen instance vm1, created
 +
# by xen-tools 4.5 on Thu Nov 17 15:30:28 2016.
 +
#
 +
 +
#
 +
#  Kernel + memory size
 +
#
 +
 +
bootloader = '/usr/lib/xen-4.4/bin/pygrub'
 +
 +
vcpus      = '1'
 +
memory      = '2048'
 +
 +
#
 +
#  Disk device(s).
 +
#
 +
root        = '/dev/xvda2 ro'
 +
disk        = [
 +
                  'phy:/dev/vg01/vm1-root,xvda2,w',
 +
                  'phy:/dev/vg01/vm1-swap,xvda1,w',
 +
              ]
 +
 +
#
 +
#  Physical volumes
 +
#
 +
 +
#
 +
#  Hostname
 +
#
 +
name        = 'vm1'
 +
 +
#
 +
#  Networking
 +
#
 +
dhcp        = 'dhcp'
 +
vif        = [ 'mac=00:16:3E:98:82:D7' ]
 +
 +
#
 +
#  Behaviour
 +
#
 +
on_poweroff = 'destroy'
 +
on_reboot  = 'restart'
 +
on_crash    = 'restart'
 +
</pre>
 +
 +
With q we can end the program "less"<br />
 +
 +
<pre>
 +
root@server1:/etc/xen# xl list
 +
Name                                        ID  Mem VCPUs    State      Time(s)
 +
Domain-0                                    0  1853    2    r-----    187.2
 +
</pre>
 +
 +
The virtual machine hasn't been started yet. <br />
 +
 +
<pre>
 +
root@server1:/etc/xen# free -h
 +
            total      used      free    shared    buffers    cached
 +
Mem:          1.7G      217M      1.5G      5.0M        12M      139M
 +
-/+ buffers/cache:        65M      1.6G
 +
Swap:        4.7G        0B      4.7G
 +
</pre>
 +
 +
The free command showed us that my server doesn't have enough RAM. So, it's necessary to edit the configuration file that xen-create-image created: <br />
 +
 +
root@server1:/etc/xen# nano vm1.cfg
 +
memory      = '1024'
 +
 +
== Login to the virtual machine ==
 +
 +
Now we can start the virtual server <br />
 +
root@server1:/etc/xen# xl create -c /etc/xen/vm1.cfg
 +
 +
xl -> The program we use<br />
 +
create -> A subcommand that will require a .cfg file. [http://xenbits.xen.org/docs/unstable/man/xl.1.html Here a link to the man page of the xl command] <br />
 +
-c -> we wish to have a console for the virtual machine <br />
 +
/etc/xen/vm1.cfg -> path to the configuration file of the virtual machine <br />
 +
 +
Since no other users have been created to far we need to login as root with the password we entered during the xen-create-image command (the long line). <br />
 +
That we're able to login to the virtual machine with SSH in the future, we need to create a new user. For security purposes the user root isn't allowed to login via SSH. In my case I chose "user1":
 +
adduser user1
 +
So the newly created user will also have administrative rights we need to installl the program "sudo":
 +
apt install sudo
 +
That we get those right, we also need to add the username to the group sudo:
 +
adduser user1 sudo
 +
 +
To be able to login directly through SSH it's best to quickly check the IP address we have on our network interface. The command for it is:
 +
ip a
 +
 +
As the hard drive of our LTSP server for training purposes crashed, we had to stop here. The continuation will be in [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil3-Webserver_aufsetzen Teil3]<br />
 +
 +
 +
== Automatically boot the virtual machine ==
 +
 +
On 02-16-2017 we learned how to automatically start the virtual machine when the server is turned on. Thematically it belongs here, so I wanted to at least add a [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil4-Joomla_aufsetzen link] on this page.
 +
 +
 +
 +
|#default=
 
== Vorwort ==
 
== Vorwort ==
 
Diese Schulung hat am 17.11.2016 stattgefunden. Es handelt sich um eine Fortsetzung vom [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil1-Server_mit_RAID1_aufsetzen ersten Teil]. Wir haben heute gelernt wie wir einen Xen-Server aufsetzen. Damit können wir virtuelle Maschinen erstellen, die wir für unterschiedliche Zwecke konfigurieren können. Die erste virtuelle Maschine wird ein Webserver (Apache) werden. jr <br />
 
Diese Schulung hat am 17.11.2016 stattgefunden. Es handelt sich um eine Fortsetzung vom [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil1-Server_mit_RAID1_aufsetzen ersten Teil]. Wir haben heute gelernt wie wir einen Xen-Server aufsetzen. Damit können wir virtuelle Maschinen erstellen, die wir für unterschiedliche Zwecke konfigurieren können. Die erste virtuelle Maschine wird ein Webserver (Apache) werden. jr <br />
Zeile 12: Zeile 345:
  
 
-i sagt, dass anschliessend eine IP Adresse folgt <br />
 
-i sagt, dass anschliessend eine IP Adresse folgt <br />
192.168.67.255 ist die Broadcast-Adresse von unserem Netzwerk. Ich werde noch an einer anderen Seite arbeiten um IPv4 noch ein wenig zu erklären und dann hier den Link dazu einfügen. <br />
+
192.168.67.255 ist die Broadcast-Adresse von unserem Netzwerk. [http://wiki.revamp-it.ch/index.php?title=Kurzeinf%C3%BChrung_zu_IPv4 Hier] findet man noch eine kleine Einführung in IPv4, dass man dies besser versteht.<br />
 
00:21:5a:6d:6d:42 ist die MAC-Adresse von der Netzwerkkarte die im Server steckt, den ich aufgesetzt habe. <br />
 
00:21:5a:6d:6d:42 ist die MAC-Adresse von der Netzwerkkarte die im Server steckt, den ich aufgesetzt habe. <br />
  
Zeile 76: Zeile 409:
  
 
Um sehen zu können ob der Server jetzt auch mit den neuen Parametern startet benutzen wir das Programm "dmesg" Da Computer sehr viele Infos zum aufstarten anzeigt ist dies mehr als man in der Konsole anzeigen kann. Um trotzdem alles anschauen zu können leiten wir die Daten zu dem Programm "less" um, dass wir auch PageUp und PageDown nutzen können:  
 
Um sehen zu können ob der Server jetzt auch mit den neuen Parametern startet benutzen wir das Programm "dmesg" Da Computer sehr viele Infos zum aufstarten anzeigt ist dies mehr als man in der Konsole anzeigen kann. Um trotzdem alles anschauen zu können leiten wir die Daten zu dem Programm "less" um, dass wir auch PageUp und PageDown nutzen können:  
dmesg | less
+
<pre>
 +
dmesg | less
 +
</pre>
  
 
Hier haben wir Einträge zu Xen gefunden. Mit "q" kann man das Programm "less" verlassen um wieder auf der Konsole zu sein. <br />
 
Hier haben wir Einträge zu Xen gefunden. Mit "q" kann man das Programm "less" verlassen um wieder auf der Konsole zu sein. <br />
  
 
Falls man am Anfang oder Ende einer Datei die Einträge sehen will kann man dies über "head" oder "tail" machen. Ohne andere Parameter werden 10 Zeilen angezeigt:
 
Falls man am Anfang oder Ende einer Datei die Einträge sehen will kann man dies über "head" oder "tail" machen. Ohne andere Parameter werden 10 Zeilen angezeigt:
dmesg | head
+
<pre>
 +
dmesg | head
 +
</pre>
 
-> Zeigt die ersten 10 Zeilen
 
-> Zeigt die ersten 10 Zeilen
dmesg | tail
+
<pre>
 +
dmesg | tail
 +
</pre>
 
-> Zeigt die letzten 10 Zeilen
 
-> Zeigt die letzten 10 Zeilen
  
Zeile 160: Zeile 499:
 
  cd /etc/xen-tools/partitions.d/
 
  cd /etc/xen-tools/partitions.d/
  
Hier ist sich aktuell in dem Ordner befindet:  <br />
+
Hier ist was sich aktuell in dem Ordner befindet:  <br />
 
  root@server1:/etc/xen-tools/partitions.d# ls -la
 
  root@server1:/etc/xen-tools/partitions.d# ls -la
 
  insgesamt 12
 
  insgesamt 12
Zeile 195: Zeile 534:
 
--memory=2gb  -> Wieviel RAM die virtuelle Maschine brauchen darf <br />
 
--memory=2gb  -> Wieviel RAM die virtuelle Maschine brauchen darf <br />
 
--vcpus=1      -> wieviele Processoren die virtuelle Maschine brauchen darf <br />
 
--vcpus=1      -> wieviele Processoren die virtuelle Maschine brauchen darf <br />
--dhcp          -> IP Adresse wird über DHCP bezogenn <br />
+
--dhcp          -> IP Adresse wird über DHCP bezogen <br />
 
--lvm=vg01      -> Wo er die Partionen für die virtuelle Maschine erstellt werden darf. Beim Aufsetzen haben wir ja LVM aktiviert und dort die vg01 erstellt <br />
 
--lvm=vg01      -> Wo er die Partionen für die virtuelle Maschine erstellt werden darf. Beim Aufsetzen haben wir ja LVM aktiviert und dort die vg01 erstellt <br />
 
--dist=jessie  -> Welche Debian Distribution auf der virtuellen Maschine installiert wird <br />
 
--dist=jessie  -> Welche Debian Distribution auf der virtuellen Maschine installiert wird <br />
Zeile 317: Zeile 656:
 
Weiter geht es in [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil3-Webserver_aufsetzen Teil3], doch der ist noch nicht fertig, da unsere Schulung unfreiwillig frühzeitig abgebrochen wurde, weil die Festplatte vom LTSP-Server in unserem Schulungsraum kaputt ging. <br />
 
Weiter geht es in [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil3-Webserver_aufsetzen Teil3], doch der ist noch nicht fertig, da unsere Schulung unfreiwillig frühzeitig abgebrochen wurde, weil die Festplatte vom LTSP-Server in unserem Schulungsraum kaputt ging. <br />
  
[[Kategorie:Schulungen_/_Workshops]]
+
 
 +
== Start der virtuellen Maschine automatisieren ==
 +
 
 +
Da wir dies erst am 16.02.2017 gelernt haben ist die Anleitung dazu [http://wiki.revamp-it.ch/index.php?title=Schulung-Teil4-Joomla_aufsetzen hier] zu finden. Da es jedoch thematisch noch zu dieser Schulung gehört will ich hier wenigsten den Link dazu haben.
 +
}}
 +
 
 +
[[Kategorie:Schulungen_/_Workshops]],[[Kategorie:Server-Schulung]]

Aktuelle Version vom 23. Juni 2017, 13:24 Uhr

Vorwort

Diese Schulung hat am 17.11.2016 stattgefunden. Es handelt sich um eine Fortsetzung vom ersten Teil. Wir haben heute gelernt wie wir einen Xen-Server aufsetzen. Damit können wir virtuelle Maschinen erstellen, die wir für unterschiedliche Zwecke konfigurieren können. Die erste virtuelle Maschine wird ein Webserver (Apache) werden. jr

Falls noch Fragen offen sind nach dieser Anleitung bitte oben bei "Ansichten" auf "Diskussion" gehen und Feedback hinterlassen, dass ich noch weitere Details hinzufügen kann. jr

Den Server aufstarten

Unser Lehrer hat auf dem Server das Programm "wakeonlan" installiert, dass unsere Clients an denen wir arbeiten das auch nutzen können. Mit diesem Programm können wir unsere Server über die LAN-Verbindung einschalten. In unserem Schulungsfall ist das zwar nur ein paar Meter entfernt, doch falls man mehrere Stockwerke dazwischen hat oder gar mehrere Kilometer Distanz zum Server hat ist es eine grosse Erleichterung dies nicht vor Ort machen zu müssen. Der Befehl dazu ist der folgende:

wakeonlan -i 192.168.67.255 00:21:5a:6d:6d:42

-i sagt, dass anschliessend eine IP Adresse folgt
192.168.67.255 ist die Broadcast-Adresse von unserem Netzwerk. Hier findet man noch eine kleine Einführung in IPv4, dass man dies besser versteht.
00:21:5a:6d:6d:42 ist die MAC-Adresse von der Netzwerkkarte die im Server steckt, den ich aufgesetzt habe.

Eine allgemeinere Formulierung ist also

wakeonlan -i "broadcast IP" "MAC address"

Um jetzt per SSH musste unser Lehrer auf dem Server schauen welche IP Adressen unsere frisch aufgeweckten Server bezogen haben. Dies machte er über

less /var/lib/dhcp/dhcpd.leases

Diese Datei existiert jedoch nur auf dem DHCP Server. Auf einem DHCP Client existiert diese Datei nicht. Es gibt jedoch den Pfad /var/lib/dhcp/

Auf dem Server einloggen

In meinem Fall zum Einloggen auf dem Server musste ich den folgenden Befehl eingeben:

ssh user1@192.168.67.68

Die allgemeine Formulierung dazu ist

ssh "Benutzername"@"Remote Computer"

Benutzername ist als wen man sich auf dem Server einloggen will. Der Benutzer root darf sich nicht per SSH auf einem Server einloggen aus Sicherheitsgründen. Remote Computer kann in Form der IP Adresse oder dem DNS Namen sein.

Wenn man zum ersten Mal auf einem Remote Computer einloggt von einer Maschine aus, schickt der Remote Computer seinen Fingerabdruck mit. Um da fortfahren zu können ist es notwendig die Antwort auszuschreiben. Ein einfaches "y" reicht nicht aus.

Are you sure you want to continue connecting (yes/no)? yes

Paketliste aktualisieren

Bevor wir jetzt anfangen Programme zu installieren wollen wir in unserem Debian Jessie die Liste mit den verfügbaren Paketen auf den neusten Stand bringen. Wenn man als normaler Benutzer eingeloggt ist macht man dies über

sudo apt update

Als Root kann man das "sudo" weglassen

Pakete für Xen-Hypervisor installieren

Für unseren Xen-Server brauchen wir die Pakete xen-linux-system und xen-tools. Also geben wir auf der Befehlszeile den folgenden Befehl ein:

user1@server1:~$ sudo apt install xen-linux-system xen-tools

Eine veraltete Version von dieser Installation finden wir bereits in unserem Wiki, doch einige Dinge können wir von dort übernehmen, dass wir nicht soviel schreiben müssen.

Wir müssen den folgenden Befehl eingeben:

sudo dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen

Wir geben damit der Datei einen anderen Namen und macht noch etwas dass die Datei nicht von einem Paketupdate überschrieben wird. Ich verstehe leider Linux als ganzes auch noch zu wenig um es besser erklären zu können. Sollte ich in der Zukunft mal ein besseres Verständnis dafür haben, werde ich den Text hier wohl updaten.

Da ich es leid wurde, dass ich die Befehle nicht direkt ausführen zu können (weil immer ein sudo nötig ist), habe ich in den Root User gewechselt über

sudo -i

Als nächstes müssen wir unserem Bootloader mit dem Namen Grub die Änderungen beibringen. Deswegen müssen wir den Befehl "update-grub" eingeben:

update-grub

Um zu testen ob was wir installiert haben auch effektiv ist, starten wir den Server neu. Auf der Kommandozeile geben wir den Befehl ein:

reboot

Netzwerkverbindung anpassen

Da die Verbindung der Arbeitsstation mit dem Server unterbrochen wird, müssen wir mit dem Server wieder neu verbinden: neu mit server verbinden nach dem Neustart

ssh "Benutzername"@"Remote Computer" (in meinem Fall ssh user1@192.168.67.68)

und wieder auf Root gewechselt über

sudo -i

Um sehen zu können ob der Server jetzt auch mit den neuen Parametern startet benutzen wir das Programm "dmesg" Da Computer sehr viele Infos zum aufstarten anzeigt ist dies mehr als man in der Konsole anzeigen kann. Um trotzdem alles anschauen zu können leiten wir die Daten zu dem Programm "less" um, dass wir auch PageUp und PageDown nutzen können:

dmesg | less

Hier haben wir Einträge zu Xen gefunden. Mit "q" kann man das Programm "less" verlassen um wieder auf der Konsole zu sein.

Falls man am Anfang oder Ende einer Datei die Einträge sehen will kann man dies über "head" oder "tail" machen. Ohne andere Parameter werden 10 Zeilen angezeigt:

dmesg | head

-> Zeigt die ersten 10 Zeilen

dmesg | tail

-> Zeigt die letzten 10 Zeilen

Wir werden an einer Datei Änderungen vornehmen und deswegen erstellen wir erst noch eine Kopie der Datei:

root@server1:~# cp /etc/network/interfaces /etc/network/interfaces.orig

Und wir öffnen mit dem Editor "nano" die Datei:

root@server1:~# nano /etc/network/interfaces

Falls man nicht einen so langen Pfad schreiben will kann man auch zuerst in den richtigen Ordner wechseln und dann die kürzere Version davon eingeben:

cd /etc/network/
cp interfaces interfaces.orig
nano interfaces

Hier kann man noch meine privaten Versuche sehen auf einem Laptop ohne Ethernet und nur WLAN

Wir haben die vorhandenen Einträge auskommentiert:

# allow-hotplug eth0
# iface eth0 inet dhcp

Zeilen die mit einem # beginnen werden als Kommentar betrachtet und was dahinter steht wird das ignoriert.

iface eth0 inet manual
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0

Um die Änderungen zu speichern drücken wir Ctrl+o und um den nano-editor zu verlassen Ctrl+x. Die Befehle sind auch am unteren Rand vom nano-Editor aufgelistet.

Hier noch die Erklärung was wir mit diesen neuen Einstellungen machen. iface eth0 inet manual -> Interface für Internet wird manuell konfiguriert
auto xenbr0 -> Wenn der Computer startet wird automatisch eine Xen-Bridge erstellt
iface xenbr0 inet dhcp -> Xen-Bridge hat DHCP
bridge_ports eth0 -> Bridge geht zum Interface eth0

Diese Xen-Bridge dient dazu, dass wir die virtuellen Maschinen ansprechen können und gegen aussen nur ein physikalisches Interface haben. Für detailierte Infos gibt es die folgende Seite. Ich hoffe das Bild, das ich von dort kopiert habe hilft ein wenig zum Verstehen, was die Brücke macht.

Xen-network-basic.png


Nach dem Editieren nochmals neu starten:

reboot

Virtuelle Maschine erstellen

Unser Lehrer hat geprüft ob sich die IP Adressen geändert haben.

Also wieder zurück auf den server mit

ssh user1@192.168.67.68

Jetzt können wir die Änderungen, welche wir an /etc/network/interfaces vorgenommen haben auch auf dem Server sehen. Wir benutzen dazu den Befehl "ip address". Wir müssen den Befehl jedoch nicht ganz ausschreiben, sondern der Computer weiss bereits was wir wollen wenn wir folgendes schreiben:

ip a

Hier was auf meiner Testmaschine angezeigt wird:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master xenbr0 state UP group default qlen 1000
    link/ether 00:21:5a:6d:6d:42 brd ff:ff:ff:ff:ff:ff

3: xenbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 00:21:5a:6d:6d:42 brd ff:ff:ff:ff:ff:ff
    inet 192.168.67.68/24 brd 192.168.67.255 scope global xenbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::221:5aff:fe6d:6d42/64 scope link 
       valid_lft forever preferred_lft forever

Wir sehen, dass eth0 keine Adresse hat und Xen unsere Adresse verwaltet. Falls man ein wenig mehr zu IPv4 wissen will, gibt es noch diesen Link den ich erstellt habe.

Als nächses wechseln wir in einen anderen Ordner:

cd /etc/xen-tools/partitions.d/

Hier ist was sich aktuell in dem Ordner befindet:

root@server1:/etc/xen-tools/partitions.d# ls -la
insgesamt 12
drwxr-xr-x 2 root root 4096 Nov 17 14:29 .
drwxr-xr-x 6 root root 4096 Nov 17 14:29 ..
-rw-r--r-- 1 root root  463 Okt 26  2014 sample-server

Wir könnten wohl die "sample-server" nehmen und für uns anpassen, doch das ist nicht was wir machen. Wir erstellen eine neue Datei und wir verwenden den nano-Editor

nano vm1

Über Ctrl+Shift+V kann man etwas das man im Browser kopiert hat in der Konsole einfügen. Mit Ctrl+Shift+C kopieren wir etwas in der Konsole. Dies funktioniert nicht in allen Konsolen. "Terminator" ist ein Programm in dem man dies nutzen kann.

Dies ist der Text, den wir in der Datei vm1 eingefügt haben:

[root]
size=20G
type=ext4
mountpoint=/

[swap]
size=5G
type=swap

Ctrl+o zum Speichern und Ctrl+x um den nano-Editor zu verlassen.

Jetzt folgt eine lange Zeile die uns eine virtuelle Maschine erstellt

root@server1:/etc/xen-tools/partitions.d# xen-create-image --hostname=vm1 --memory=2gb --vcpus=1 --dhcp --lvm=vg01 --dist=jessie --partitions=/etc/xen-tools/partitions.d/vm1 --pygrub --verbose --password=****

Hier noch die Erklärung zu was wir eingegeben haben:

xen-create-image -> Befehl mit dem wir eine virtuelle Maschine erstellen können
--hostname=vm1 -> Name für die virtuelle Maschine die erstellt wird
--memory=2gb -> Wieviel RAM die virtuelle Maschine brauchen darf
--vcpus=1 -> wieviele Processoren die virtuelle Maschine brauchen darf
--dhcp -> IP Adresse wird über DHCP bezogen
--lvm=vg01 -> Wo er die Partionen für die virtuelle Maschine erstellt werden darf. Beim Aufsetzen haben wir ja LVM aktiviert und dort die vg01 erstellt
--dist=jessie -> Welche Debian Distribution auf der virtuellen Maschine installiert wird
--partitions=/etc/xen-tools/partitions.d/vm1 -> Angabe was für Partitionen erstellt werden mit dem Pfad zu der Datei die wir vorher erstellt haben.
--pygrub -> alternativer Bootloader den die virtuelle Maschine kriegt
--verbose -> Gib uns mehr Informationen während die virtuelle Maschine erstellt wird
--password=**** -> Passwort für die virtuelle Maschine

Am Schluss der Installation gibt und das xen-create-image-Tool auch ein paar Infos zu unserer VM:

Installation Summary
---------------------
Hostname        :  vm1
Distribution    :  jessie
MAC Address     :  00:16:3E:98:82:D7
IP Address(es)  :  dynamic
RSA Fingerprint :  31:75:57:0d:c9:f2:8e:79:b6:ef:bb:85:04:ea:75:b4
Root Password   :  ****
cd /etc/xen
-rw-r--r--  1 root root  651 Nov 17 15:30 vm1.cfg

Diese Datei wurde von xen-create-image erstellt und der Inhalt der Datei ist das folgende:

less vm1.cfg

#
# Configuration file for the Xen instance vm1, created
# by xen-tools 4.5 on Thu Nov 17 15:30:28 2016.
#

#
#  Kernel + memory size
#

bootloader = '/usr/lib/xen-4.4/bin/pygrub'

vcpus       = '1'
memory      = '2048'

#
#  Disk device(s).
#
root        = '/dev/xvda2 ro'
disk        = [
                  'phy:/dev/vg01/vm1-root,xvda2,w',
                  'phy:/dev/vg01/vm1-swap,xvda1,w',
              ]

#
#  Physical volumes
#

#
#  Hostname
#
name        = 'vm1'

#
#  Networking
#
dhcp        = 'dhcp'
vif         = [ 'mac=00:16:3E:98:82:D7' ]

#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Mit q wird "less" beendet

root@server1:/etc/xen# xl list
Name                                        ID   Mem VCPUs    State      Time(s)
Domain-0                                     0  1853     2     r-----     187.2

Die virtuelle Maschine wurde noch nicht gestartet

root@server1:/etc/xen# free -h
             total       used       free     shared    buffers     cached
 Mem:          1.7G       217M       1.5G       5.0M        12M       139M
-/+ buffers/cache:        65M       1.6G
Swap:         4.7G         0B       4.7G

Dies hat uns gezeigt, dass mein Server nicht genug RAM hat und somit müssen wir das in der vm1.cfg, welche das xen-create-image erstellt hat, anpassen:

root@server1:/etc/xen# nano vm1.cfg 
memory      = '1024'

Auf der virtuellen Maschine einloggen

Jetzt können wir unseren Server starten

root@server1:/etc/xen# xl create -c /etc/xen/vm1.cfg

xl -> Das Programm welches wir nutzen
create -> Ein Unterkommande welches eine .cfg Datei erwartet. Hier noch ein Link zur man-Page vom xl-Befehl
-c -> Dass wir eine Konsole bekommen
/etc/xen/vm1.cfg -> Pfad zur Konfiguration von unserer virtuellen Maschine

Da noch keine Benutzer bestehen loggen wir als root ein mit dem Passwort, welches wir bei xen-create-image eingegeben haben.
Wir möchten in der Zukunft in der Lage sein über SSH einzuloggen, doch da der Benutzer root dies nicht darf müssen wir einen neuen Benutzer erstellen. In meinem Fall ist es "user1":

adduser user1

Dass wir mit dem neu erstellten Benutzer auch Admin-Rechte haben müssen wir das Programm "sudo" installieren:

apt install sudo

Dass der neu erstellte Benutzer diese Rechte dann auch hat müssen wir ihn in die Gruppe sudo aufnehmen:

adduser user1 sudo

Am besten noch schnell den folgenden Befehl eingeben und sich die IP Adresse merken welche wir auf dem Ethernet Interface haben, dass man später über SSH direkt mit dem neu erstellten Benutzernamen einloggen kann:

ip a


Weiter geht es in Teil3, doch der ist noch nicht fertig, da unsere Schulung unfreiwillig frühzeitig abgebrochen wurde, weil die Festplatte vom LTSP-Server in unserem Schulungsraum kaputt ging.


Start der virtuellen Maschine automatisieren

Da wir dies erst am 16.02.2017 gelernt haben ist die Anleitung dazu hier zu finden. Da es jedoch thematisch noch zu dieser Schulung gehört will ich hier wenigsten den Link dazu haben.,