This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
computing:gnulinux [2018/05/17 05:24] – oemb1905 | computing:gnulinux [2018/05/18 08:05] (current) – removed oemb1905 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ------------------------------------------- | ||
- | * **gnulinux** | ||
- | * **Jonathan Haack** | ||
- | * **Haack' | ||
- | * **netcmnd@jonathanhaack.com** | ||
- | ------------------------------------------- | ||
- | |||
- | //Welcome to my gnulinux wiki page. Tis page has simple and complex system administrationnotes to remind me when I forget something that I already learned! | ||
- | |||
- | ------------------------------------------- | ||
- | #**powerpc gnulinux notes; issues, installs +** | ||
- | ------------------------------------------- | ||
- | |||
- | Making a bootable usb stick ... | ||
- | |||
- | diskutil list | ||
- | diskutil eraseDisk < | ||
- | diskutil unmountDisk < | ||
- | |||
- | Examples | ||
- | |||
- | sudo dd if=/ | ||
- | sudo dd if=/ | ||
- | |||
- | Insert USB drive into PPC Mac of choice, depress command-option-o-f (open firmware) | ||
- | try usb0, usb1, usb2, etc. until it works and finds the port you used for the img | ||
- | |||
- | probe-usb | ||
- | boot usb0/ | ||
- | boot usb1/ | ||
- | |||
- | once inside the yaboot shell, some common examples are: | ||
- | |||
- | install url=mintppc.org | ||
- | install | ||
- | cli | ||
- | cli-expert | ||
- | cli64 | ||
- | cli64-expert | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**wireless hardware drivers, b43 cutter +** | ||
- | ------------------------------------------- | ||
- | |||
- | deb http:// | ||
- | deb http:// | ||
- | apt-get update | ||
- | sudo lspci | ||
- | apt-get install firmware-b43-installer | ||
- | apt-get install firmware-b43-lpphy-installer | ||
- | apt-get install firmware-b43legacy-installer | ||
- | |||
- | use lspci above and then visit https:// | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**some imaging notes** | ||
- | ------------------------------------------- | ||
- | |||
- | convert .iso to .img syntax example | ||
- | |||
- | hdiutil convert -format UDRW -o destination_file.img source_file.iso | ||
- | diskutil list | ||
- | diskutil partitionDisk /dev/disk1 1 "Free Space" " | ||
- | diskutil partitionDisk /dev/disk2 GPT JHFS+ New 0b | ||
- | dd if=[Directory/ | ||
- | diskutil eject /dev/disk2 | ||
- | | ||
- | Plug into the Intel Mac, hold option while booting, proceed w/ install | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**optical media ripping from command line** | ||
- | ------------------------------------------- | ||
- | |||
- | cdrecord -pad -dao -data blag-140k-i686.iso | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**security & policy information** | ||
- | ------------------------------------------- | ||
- | |||
- | sudo nano / | ||
- | |||
- | Prevent Log in - create file | ||
- | |||
- | / | ||
- | |||
- | tcpdump common uses; monitoring traffic on network | ||
- | |||
- | tcpdump -n -i < | ||
- | tcpdump -n -i < | ||
- | tcpdump -i eth0 -nn -c 10 tcp and host < | ||
- | tcpdump -i wlan0 port http or port smtp or port imap or port pop3 -l -A | egrep -e ' | ||
- | | ||
- | Generate | ||
- | | ||
- | sudo htpasswd -c .htpasswd username | ||
- | | ||
- | Syntax for .htaccess | ||
- | | ||
- | AuthUserFile / | ||
- | AuthGroupFile /dev/null | ||
- | AuthName " | ||
- | AuthType Basic | ||
- | |||
- | <Limit GET POST> | ||
- | require valid-user | ||
- | </ | ||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**display managers; lightdm & gdm3** | ||
- | ------------------------------------------- | ||
- | |||
- | cd / | ||
- | | ||
- | Global lightdm settings here | ||
- | |||
- | cd / | ||
- | sudo nano lightdm.conf | ||
- | | ||
- | Lightdm ubuntu-MATE greeter and lock screen issues | ||
- | |||
- | / | ||
- | / | ||
- | | ||
- | The .conf file w/ some common sense parameters | ||
- | |||
- | [SeatDefaults] | ||
- | allow-guest=false | ||
- | greeter-hide-users=true | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | # | ||
- | ------------------------------------------- | ||
- | | ||
- | sudo apt install mate-tweak | ||
- | cd / | ||
- | sudo nano sources.list | ||
- | <add contrib non-free to default debian repositories> | ||
- | sudo apt update | ||
- | sudo apt upgrade | ||
- | sudo reboot | ||
- | <upon reboot, begin the harvesting of ubuntu-MATE themes> | ||
- | cd / | ||
- | sudo nano sources.list | ||
- | <in the config file you just opened add the two repos below - no braces!> | ||
- | <deb http:// | ||
- | <deb http:// | ||
- | sudo apt update | ||
- | sudo apt install ubuntu-keyring-archive | ||
- | sudo apt update | ||
- | sudo apt install ubuntu-mate* | ||
- | < | ||
- | sudo apt autoremove | ||
- | cd / | ||
- | sudo nano sources.list | ||
- | <change the config file and comment out ubuntu repositories> | ||
- | <#deb http:// | ||
- | <#deb http:// | ||
- | sudo apt update | ||
- | sudo apt autoremove | ||
- | sudo apt update | ||
- | sudo apt upgrade | ||
- | sudo reboot | ||
- | <there could / will be problems when you attempt to sudo apt update - if so> | ||
- | sudo apt update --fix-missing <may need to run with and without ubuntu repos> | ||
- | sudo dpkg --reconfigure -a | ||
- | <there may also be a file in var that needs removed - be careful> | ||
- | rm -rf / | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**mac - hardware - gnulinux requirements** | ||
- | ------------------------------------------- | ||
- | | ||
- | mac fan control; needed to ensure computer does not fry ... | ||
- | |||
- | apt-get update | ||
- | apt-get install macfanctld | ||
- | / | ||
- | <set desired values> | ||
- | service macfanctld restart | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | ------------------------------------------- | ||
- | #**openWRT Notes** | ||
- | ------------------------------------------- | ||
- | |||
- | First, we need a router to set up openWRT on. This tutorial uses the WNDR3800. | ||
- | |||
- | Download the image for openWRT. | ||
- | |||
- | https:// | ||
- | | ||
- | Get on the proper subnet, and stop the network-manager from hijacking connection. | ||
- | |||
- | sudo systemctl stop network-manager | ||
- | ip a a 192.168.1.105/ | ||
- | |||
- | Put a paperclip in the reset button while device is off. Keeping it in, turn the device on, wait for flashing green. | ||
- | | ||
- | ping 192.168.1.1 | ||
- | |||
- | If you cannot successfully ping the router, then re-add your interface to the proper sub net and try again. | ||
- | |||
- | curl -T ~/ | ||
- | |||
- | Now that we have openWRT on the router, we should enable https for the web admin panel. | ||
- | |||
- | opkg update | ||
- | opkg install luci-ssl | ||
- | nano / | ||
- | |||
- | In the config file, comment out the port 80 lines to prohibit using the router with https. | ||
- | | ||
- | / | ||
- | |||
- | Now that we have https, we can begin to set up the vpn server on the WNDR. Using the template files in the directory openvpnconfig, | ||
- | |||
- | scp -r openvpnconfig root@[openwrt]:/ | ||
- | ssh root@[openwrt] | ||
- | |||
- | Simplified instructions, | ||
- | |||
- | opkg update | ||
- | opkg install zip openvpn-easy-rsa openvpn-openssl | ||
- | |||
- | mv / | ||
- | mv / | ||
- | cd /etc/ | ||
- | ln -s config/ | ||
- | nano / | ||
- | nano / | ||
- | nano / | ||
- | |||
- | build-ca | ||
- | build-dh <OR> sudo openssl dhparam -out / | ||
- | build-key-server server | ||
- | |||
- | Build your keys for testing - the template also includes a script which builds all the necessary client keys for you, and then places them in `/ | ||
- | |||
- | / | ||
- | | ||
- | <OR> ... change the " | ||
- | | ||
- | nano / | ||
- | pkitool [username] | ||
- | |||
- | Afterwards, on each client, make sure to create a client config such as by creating a file with the following parameters: | ||
- | | ||
- | nano / | ||
- | nobind | ||
- | float | ||
- | comp-lzo | ||
- | dev tun | ||
- | remote dns.com 1194 udp | ||
- | client | ||
- | tls-exit | ||
- | ca ca.crt | ||
- | cert < | ||
- | key < | ||
- | remote-cert-tls server | ||
- | mute 5 | ||
- | resolv-retry infinite | ||
- | # | ||
- | keepalive 10 60 | ||
- | ping-timer-rem | ||
- | persist-tun | ||
- | persist-key | ||
- | # | ||
- | |||
- | Using the luci web admin page, go to interfaces, add interface, select tun0, and set up fw zone. Using the luci web admin page, go to firewall, traffic rules, and then specify a rule that allows incoming vpn connections on udp 1194 to device. | ||
- | |||
- | Test away using the key you made two steps ago! | ||
- | |||
- | sudo openvpn location.com.ovpn | ||
- | |||
- | Tweak various client config settings and match on server ... specify cipher levels and versions as such: | ||
- | |||
- | </ | ||
- | tls-version-min 1.2 | ||
- | tls-cipher | ||
- | cipher AES-256-CBC | ||
- | |||
- | Key permissions | ||
- | |||
- | 640 for everything except the private key and 600 for that ... | ||
- | |||
- | ------------------------------------------- | ||
- | #**samba share basics** | ||
- | ------------------------------------------- | ||
- | | ||
- | sudo apt update | ||
- | sudo apt install samba | ||
- | sudo adduser username | ||
- | sudo smbpasswd -a username | ||
- | mkdir / | ||
- | nano / | ||
- | [sharename] | ||
- | path = / | ||
- | available = yes | ||
- | valid users = camalas | ||
- | read only = no | ||
- | browseable = yes | ||
- | public = yes | ||
- | writable = yes | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**sitc** | ||
- | ------------------------------------------- | ||
- | |||
- | start or stop network manager (or other services) | ||
- | | ||
- | systemctl < | ||
- | / | ||
- | | ||
- | verify dhcp client working for interface eno1 | ||
- | | ||
- | dhclient -v eno1 | ||
- | | ||
- | add subnet to interface eno1 | ||
- | | ||
- | ip address add 192.1## | ||
- | | ||
- | interface tool w/ eno1 example | ||
- | | ||
- | ethtool eno1 | ||
- | |||
- | interface with switch using screen | ||
- | | ||
- | screen / | ||
- | |||
- | calculate subnet automatically | ||
- | | ||
- | subnetcalc | ||
- | | ||
- | proxying web traffic through remote server | ||
- | | ||
- | ssh -D < | ||
- | | ||
- | get block ID of drives | ||
- | | ||
- | blkid | ||
- | |||
- | nmap example to get addresses of hosts / devices on lan | ||
- | | ||
- | nmap -sP 10.## | ||
- | |||
- | find utils example | ||
- | |||
- | find . -iname "< | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | ------------------------------------------- | ||
- | #**git basics** | ||
- | ------------------------------------------- | ||
- | | ||
- | git - force git to use ssh & pull / push to verify | ||
- | | ||
- | git remote set-url origin git@github.com: | ||
- | git clone ssh://< | ||
- | git commit -am" | ||
- | git pull | ||
- | git push | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**nano / text editor basics** | ||
- | ------------------------------------------- | ||
- | |||
- | ctl-r read -open file curr. buffer, or new in multibuffer mode, enter4new empty buffer | ||
- | ctl-o | ||
- | cctl-x | ||
- | ctl-g get help/ | ||
- | enter, ctl-m newline | ||
- | bksp, ctl-h | ||
- | del, ctl-d delete current character | ||
- | left, ctl-b | ||
- | right, ctl-f forward character | ||
- | home, ctl-a | ||
- | end, ctl-e end of line | ||
- | up, ctl-p | ||
- | down, ctl-n next line | ||
- | pgup, ctl-y | ||
- | pgdn, ctl-v next page | ||
- | m-space | ||
- | ctl-space | ||
- | alt-\ | ||
- | alt-/ end of file | ||
- | ctl-c | ||
- | ctl-/ go i.e. jump to line and column | ||
- | ctl-^ | ||
- | alt-^ copy marked, or copy line if nomark; actually alt-6 i.e. do not need shift key | ||
- | ctl-k cut marked or cut lineifnomark or cut2end line if cut2end is enabled using | ||
- | alt-k | ||
- | ctl-u paste cut or copied | ||
- | alt-t cut to end of file | ||
- | ctl-w | ||
- | alt-w | ||
- | alt-r | ||
- | alt-< | ||
- | alt-> | ||
- | alt-x | ||
- | alt-y | ||
- | alt-c | ||
- | alt-d | ||
- | alt-k | ||
- | ctl-t show file list at read/open prompt | ||
- | ctl-x | ||
- | ctl-z | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**scripts and miscellaneous** | ||
- | ------------------------------------------- | ||
- | |||
- | downloading scripts and executing them; example from DO | ||
- | |||
- | curl -sSL https:// | ||
- | |||
- | ngrok notes; private http(s) tunnels | ||
- | |||
- | ./ngrok http 80 | ||
- | wget https:// | ||
- | cat ~/ | ||
- | |||
- | query hosts on the lan | ||
- | |||
- | avahi-browse -tl _workstation._tcp | ||
- | |||
- | Debian print system configuration to stdout; use root | ||
- | |||
- | cat / | ||
- | lsb_release -a | ||
- | lspci | ||
- | |||
- | Debian repo management | ||
- | |||
- | cd /etc/apt | ||
- | nano sources.lsit | ||
- | [main contrib non-free] | ||
- | | ||
- | Uploading files to remote webservers with sftp | ||
- | |||
- | cd ~/Downloads | ||
- | sftp user@host.com:/ | ||
- | > put / | ||
- | | ||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**Building From Source to Custom library Location** | ||
- | ------------------------------------------- | ||
- | |||
- | tar -xf < | ||
- | |||
- | Navigate to the directory that tar unarchived the files to. Then, within that directory, execute: | ||
- | |||
- | ./configure --prefix=/ | ||
- | | ||
- | make | ||
- | sudo make install clean | ||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**Cacti Server Notes** | ||
- | ------------------------------------------- | ||
- | |||
- | Installing snmpd to an embedded system and then installing cacti to a client to monitor the | ||
- | device. Additionally, | ||
- | running on the client machine (ping only). | ||
- | |||
- | ssh -p ###### root@nameofembeddedhost | ||
- | opkg update | ||
- | opkg install snmpd | ||
- | cd /etc/config | ||
- | nano snmpd | ||
- | / | ||
- | / | ||
- | |||
- | There are many customizations possible, but my colleagues recommend the minimum of changing the | ||
- | name of the public community to something indicative of the network purpose. | ||
- | is also adviseable to change three fields below that refer to the physical location, ip address, and the contact email for the system administrator in charge of managing the snmp server. | ||
- | |||
- | sudo apt install cacti | ||
- | |||
- | I used the default recommendations, | ||
- | reconfiguration command below. | ||
- | |||
- | sudo dpkg-reconfigure cacti | ||
- | <Yes, rebuild database, default to other options> | ||
- | <I chose matching MySQL pass because it failed with blank> | ||
- | |||
- | At this point, cacti should work so to speak, but it will need to be configured and have its license terms accepted. | ||
- | |||
- | localhost/ | ||
- | <say yes to EULA, etc.> | ||
- | <user: admin> | ||
- | <pass: admin> | ||
- | |||
- | Since cacti' | ||
- | |||
- | Create Devices | ||
- | Add (upper right corner) | ||
- | Host Template - ucd/net SNMP Host | ||
- | Ping or SNMP | ||
- | ICMP Ping | ||
- | Version 2 | ||
- | <name of public community chosen must match / | ||
- | <fully qualified hostname must be the external domain name or local ip> | ||
- | <for linux devices or the cacti server itself, use local ip or 127.0.0.1, snmpd version 1> | ||
- | |||
- | After it successfully creates the device, then scroll down to graphs and add them all unless you have a reason not to. Once you do that, click return, and then select to "Place Device on a Tree" using the defaults provided. | ||
- | | ||
- | During this install I had a conflict with a previously installed web server nginx, so I had to find its process and then kill it: | ||
- | |||
- | netstat -enpl | ||
- | sudo kill -XXX PID | ||
- | | ||
- | After that, I restarted the web-server apache2 as follows: | ||
- | |||
- | sudo / | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**Private Git Server** | ||
- | ------------------------------------------- | ||
- | |||
- | Configure the machine that will be running the git server first. | ||
- | |||
- | sudo adduser git | ||
- | su - git | ||
- | cd ~ | ||
- | mkdir .ssh && chmod 700 .ssh | ||
- | touch .ssh/ | ||
- | |||
- | You can add keys to authorized keys file using copy and paste, or using some bash syntax (from within the git user's shell) as follows: | ||
- | |||
- | cat / | ||
- | |||
- | Now, let's finish configuring the server. | ||
- | |||
- | cd /srv | ||
- | mkdir git | ||
- | cd git/ | ||
- | mkdir repositoryname.git | ||
- | cd repositoryname.git/ | ||
- | git init --bare --shared | ||
- | | ||
- | The shared option above allows more than just the git user to write to the repository. | ||
- | |||
- | sudo adduser < | ||
- | |||
- | The instructions below assume the clients are on the same LAN and using a directory in their home directory dedicated to git repos. | ||
- | |||
- | cd ~ | ||
- | mkdir git | ||
- | cd git/ | ||
- | git clone git@gitserver:/ | ||
- | cd repositoryname/ | ||
- | nano README | ||
- | git commit -am" | ||
- | git push origin master | ||
- | | ||
- | This method has everyone using the user git in order to clone the repository, and unless tweaked will allow users shell access to the server. | ||
- | |||
- | Using other user names for access / cloning will be covered in a later tutorial. | ||
- | | ||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**Beagle Bone Black w/ Debian** | ||
- | ------------------------------------------- | ||
- | To locate device if auto-mounted | ||
- | sudo dmesg | ||
- | |||
- | umount / | ||
- | |||
- | Optional: use fdisk to remove the partition first before dding ... | ||
- | |||
- | sudo dd of=/ | ||
- | |||
- | After this, pull out SD card. Plug back in. Locate where it mounted, prepare to edit file to allow it to run the installer upon boot. This is located in boot/ | ||
- | |||
- | cmdline=init=/ | ||
- | |||
- | Get out of the directory asap. then: | ||
- | |||
- | umount / | ||
- | |||
- | Now that the image has been turned into an installer, you may put the microSD card into the Beagle Bone (without power). | ||
- | |||
- | If there is a fourth pin, usually red, do not use. We only need input, output, and ground. | ||
- | | ||
- | sudo screen < | ||
- | sudo screen / | ||
- | | ||
- | {{: | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**Screen** | ||
- | ------------------------------------------- | ||
- | |||
- | Using ssh to tunnel to another host, and then executing screen to keep the session persistent. | ||
- | |||
- | ssh -p ### -t user@host.com screen -DRO | ||
- | |||
- | Using screen with usb to serial adapter | ||
- | |||
- | sudo screen / | ||
- | |||
- | Some other common speeds are 9600, 57600, 38400, 19200 | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | ------------------------------------------- | ||
- | #**next topic** | ||
- | ------------------------------------------- | ||
- | |||
- | git clone git@gitserver:/ | ||
- | |||
- | ------------------------------------------- | ||
- | # | ||
- | ------------------------------------------- | ||
- | Start defualt | ||
- | sudo virsh net-start default | ||
- | |||
- | Remove bridge | ||
- | sudo ifconfig virbr0 dow | ||
- | sudo brctl delbr virbr0 | ||
- | |||
- | List all | ||
- | sudo virsh net-list --all | ||
- | |||
- | ------------------------------------------- | ||
- | #**rsync** | ||
- | ------------------------------------------- | ||
- | |||
- | sudo rsync -avxHAX --progress / | ||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**next topic** | ||
- | ------------------------------------------- | ||
- | |||
- | chmod 700 ~/ | ||
- | chmod 644 ~/ | ||
- | chmod 600 ~/ | ||
- | chmod 755 ~/ | ||
- | |||
- | ------------------------------------------- | ||
- | #**Simple Bridge Mode Virt-Manager** | ||
- | ------------------------------------------- | ||
- | create it - use gui, or brctl | ||
- | |||
- | sudo nano / | ||
- | |||
- | auto br1 | ||
- | iface br1 inet dhcp | ||
- | | ||
- | | ||
- | | ||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**smart tests** | ||
- | ------------------------------------------- | ||
- | smartctl -t short | ||
- | smartctl -t long | ||
- | |||
- | ------------------------------------------- | ||
- | #**ssh with screen** | ||
- | ------------------------------------------- | ||
- | ssh -t xx.xx.xx.xx screen -DRO | ||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**RAID 1 Notes** | ||
- | ------------------------------------------- | ||
- | The sfdisk command is not complete ... the proc shows kernel report on mirroring / syncing status ... | ||
- | |||
- | sfdisk -d | sfdisk | ||
- | cat / | ||
- | | ||
- | Temperamental Swap mirroring ... | ||
- | | ||
- | mdadm --readwrite /dev/md1 | ||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**Purism Keyboard Issue** | ||
- | ------------------------------------------- | ||
- | |||
- | sudo nano / | ||
- | |||
- | Put this in the file. | ||
- | | ||
- | #!/bin/sh | ||
- | setkeycodes 56 43 | ||
- | exit 0 | ||
- | |||
- | Ctrl-X, Y, Enter. | ||
- | | ||
- | sudo chmod 750 / | ||
- | sudo chown root:root / | ||
- | sudo reboot | ||
- | |||
- | Done - problem fixed. | ||
- | | ||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**Level 3 DNS & resolv.conf** | ||
- | ------------------------------------------- | ||
- | |||
- | sudo nano / | ||
- | search domain.com [local domain] | ||
- | nameserver xx.xx.xx.xx [router] | ||
- | nameserver 4.2.2.1 | ||
- | nameserver 4.2.2.2 | ||
- | nameserver 4.2.2.3 | ||
- | nameserver 4.2.2.4 | ||
- | | ||
- | | ||
- | | ||
- | ------------------------------------------- | ||
- | #**set new origin** | ||
- | ------------------------------------------- | ||
- | |||
- | git remote set-url origin ssh:// | ||
- | |||
- | |||
- | |||
- | ------------------------------------------- | ||
- | #**next topic** | ||
- | ------------------------------------------- | ||
- | |||
- | |||
- | |||
- | --- // |