Makeuseof

Локальный веб-сервер — virtualbox, debian, nginx+php-fpm, mysql

База

Вместо обычного MySQL я предпочитаю Percona Server. Многие рекомендуют этот продукт, благодаря скорости и дополнительным фичам. Я использую Percona Server не менее 2 лет и тоже могу его рекомендовать. Для сайта, для любого сайтового движка — это будет просто MySQL, они не увидят разницы.

Я не делал сравнений. Просто однажды перешел на Percona Server и все. Никаких проблем никогда не было. Если при этом есть хоть небольшой прирост скорости, оно стоит того.

Установка Percona Server:

Продолжаем установку:

В процессе установки потребуется указать пароль для root-пользователя базы. Не путайте с root-пользователем системы.

Установим дополнительно phpMyAdmin. Последнее время я предпочитаю это делать через Composer. Так проблем меньше, да и версия точно будет новая. Вначале установим сам Сomposer:

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

В этом каталоге запускаем установку phpMyAdmin:

Он установится в каталог .

Теперь из основной системы phpMyAdmin можно открыть: .

Управление недоступными снаружи машинами в виртуальной сети

Доступ по RDP

RDP-сервер работает на физическом сервере, поэтому для подключения к
любой виртуальной машине справедливо написанное в разделе Управление
через веб-интерфейс этой статьи.

Проброс портов

Существует возможность создать в гостевой системе виртуальную сетевую
карту с подключением через NAT (реализуемый автоматически средствами
VirtualBox) и пробросить (отобразить) произвольный порт гостевой системы
на порт сервера VirtualBox. Для того, чтобы сделать это через
phpvirtualbox, нужно:
1. Зайти в свойства гостевой системы, перейти в раздел «Network», выбрать в поле «Attached to» опцию «NAT»
2. Раскрыть опции, скрывающиеся в разделе «Advanced» этого же раздела, и нажать там кнопку Port Forwarding
3. В открывшемся окне «Port Forwarding Rules» указать следующие параметры:
4. Нужный протокол, путем щелчка мышью по именованию «TCP» в поле «Protocol»
5. Указать свободный порт на сервере VirtualBox в поле «Host Port»
6. Указать порт гостевой системы в поле «Guest Port».
Больше ничего указывать не нужно. После применения настроек порт
гостевой системы станет немедленно (без перезагрузки) доступен через
соответствующий порт сервера VirtualBox. Как пример, в случае с
пробросом порта ssh (22 TCP) гостевой системы на 2200 порт VirtualBox
нужно указать следующие параметры:
Количество отображаемых портов не ограничено, можно отобразить столько, сколько нужно.

Виртуальный маршрутизатор

В случае создание в VirtualBox группы взаимодействующих гостевых систем
без внешних адресов имеет смысл установить еще одну гостевую систему,
которая будет играть роль маршрутизатора. Какие цели при этом
достигаются?
Конфигурацию сетевых адаптеров клонированных сервером можно не менять.
При этом виртуальный маршрутизатор создает для остальных гостевых систем
видимость того, что они настоящие и пользуются своими настоящими
именами хостов и IP-адресами
К гостевым системам не имеющим ни внешних адресов, ни описанной выше
возможности проброса портов, которая работает только в случае
использования NAT опции VirtualBox, становится возможен прямой доступ по
ssh.
Создание создание виртуального маршрутизатора состоит из следующих шагов:

  • Создание гостевой системы
  • Установка на гостевую систему любой ОС, которая может играть роль маршрутизатора, например Debian Linux или FreeBSD
  • Ввод гостевой системы в виртуальную сеть как описано выше
  • Настройка гостевой системы для выполнения функций маршрутизатора
  • Подключение к гостевой системе второго виртуального сетевого адаптера в режиме моста с сетевым адаптером сервера VirtualBox

После этого можно пробрасывать порты с виртуального маршрутизатора на
гостевые системы без внешних адресов. В случае Linux c iptables для
проброса входящих соединений с 2200 порта протокола TCP виртуального
маршрутизатора на 22 порт (TCP) гостевой системы без внешнего адреса c
внутренним адресом 192.168.0.2 достаточно следующего правила:
При этом предполагается, что виртуальный маршрутизатор настроен
правильно и имеет сетевой адаптер, настроенный на работу с виртуальной
подсетью в которой находится гостевая система с адресом 192.168.0.2

Доступ по SSH

В соответствии с вышеприведенным примером можно зайти по ssh на гостевую
систему без внешнего адреса указав в ssh-клиенте адрес виртуального
маршрутизатора и порт 2200. Аналогично можно зайти по scp для передачи
файлов на гостевую систему.

Типы подключений сетевых адаптеров

Существует семь типов подключений сетевых адаптеров. Каждый создает собственный режим взаимодействия между виртуальным и физическим сетевыми устройствами.

Не подключен

Режим симулирует выдернутый из разъема сетевой кабель. Virtualbox сообщает системе что сетевой адаптер существует, но является неактивным.

NAT (Network Address Translation)

Тип подключения присваивающийся каждой виртуальной машине по умолчанию. Отвечает минимальным требованиям для работы в сети интернет и не требует первоначальной настройки.

NAT соединяет гостевую ОС с внешней сетью изолируя от прямых подключений извне. Наверно все слышали выражение — сидеть за NAT? Это оно и есть, вы можете просматривать сайты, выполнять любую работу в сети, но при этом прямые подключения извне невозможны.

NAT имитирует подключение к маршрутизатору. Маршрутизатором выступает сетевой модуль Virtualbox, обрабатывающий исходящие пакеты и пересылающий их хост-системе, точно так же происходит обработка входящего трафика. Маршрутизатор создается между каждой виртуальной машиной и хост-системой. Посредством такого разделения виртуальная машина становится защищенной от контактов с другими машинами и проникновений со стороны внешней сети.

Виртуальная машина получает сетевой адрес от встроенного DHCP-сервера. Машине присваивается адрес из диапазона 10.0.X.0/24, где «X» обозначает адрес интерфейса, определяемый по формуле +2. Таким образом «X» будет равен 2, если имеется только один активный NAT-интерфейс. Гостевая операционная система получит адрес 10.0.2.15, сетевому шлюзу назначается адрес 10.0.2.2, сервер имен (DNS) получит 10.0.2.3.

Сетевой мост

Сетевой мост эмулирует карту подключенную к сети напрямую. Адаптер подключается к распределяющему устройству внутри сети, после чего машина получает стандартный ip-адрес из ее диапазона и в составе сети появляется еще один «компьютер».

Все соединения между виртуальной машиной и внешней сетью, осуществляются посредством физической сетевой карты хост-компьютера. Если у вас несколько сетевых карт, то вы можете выбирать карту, которая будет обслуживать соединение. Делается это на вкладке Имя, появляющейся если типом подключения выбран Сетевой мост.

Внутренняя сеть

Тип подключения симулирует закрытую сеть, доступную только для входящих в ее состав машин. Сеть полностью закрыта для хост-системы и прочих внешних устройств.

Внутренняя сеть похожа на режим сетевого моста. Как и в режиме моста, машина может связываться с другими машинами в своей сети, но не имеет доступа за ее пределы. Поскольку ни одна из машин не имеет прямого доступа к физическому сетевому адаптеру хост-системы, то сеть получается полностью закрытой, снаружи и изнутри. Сама сеть создается автоматически, при выборе данного типа подключения. Дополнительных настроек режим не имеет, пользователь может изменить только имя сети.

Примером использования внутренней сети является система Whonix, состоящая из двух виртуальных машин. Одна машина выступает в роли шлюза в сеть TOR, вторая машина является рабочей системой. Рабочая система соединяется с шлюзом через внутреннюю сеть, который в свою очередь отправляет весь трафик в TOR.

Виртуальный адаптер хоста

Режим создает сеть между хост-системой и виртуальной машиной, минуя физическую сетевую карту. На компьютере появляется программный сетевой интерфейс, служащий для обмена данными между виртуальными машинами и хост-системой. Виртуальные машины могут соединятся друг с другом и хост-системой, как будто соединены через коммутатор. Как и в режиме внутренней сети, виртуальной машине не предоставляется физический интерфейс, благодаря чему машины не могут взаимодействовать с внешней сетью.

В хост-системе появляется устройство VirtualBox Host-Only Network. Оно имеет собственную подсеть 192.168.56.0 и шлюз с адресом — 192.168.56.1. Устройство соединяет подсеть и хост-систему без прямого выхода во внешнюю сеть.

Универсальный драйвер

Режим использует драйверы специальных типов взаимодействий, входящие в пакет расширений VirtualBox. Используется крайне редко и в обычной работе не нужен.

Сеть NAT

Сеть NAT появилась в последних версиях VirtualBox начиная с версии 4.3. Тот же NAT, но со своей локальной сетью. Виртуальные машины могут взаимодействовать между собой, имеют выход наружу, но остаются закрытыми со стороны внешней сети.

Установка phpvirtualbox

Для Virtualbox существует бесплатный web-интерфейс, реализованный на PHP
и использующий встроенную в virtualbox службу удаленного управления
virtualbox web service.
Устанавливаем phpvirtualbox:
1. На сайте разработчика смотрим последнюю версию и скачиваем ее на сервер:
2. Распаковываем:
3. Конфигурируем:
4

Прописываем адрес сервера, на котором работает VirtualBox, для
удаленных подключений с помощью встроенного в VirtualBox RDP-plugin:
Внимание! Для успешных подключений на сервере должны быть открыты
входящие порты, по умолчанию начиная с 3389 (TCP), по одному порту на
гостевую систему.
5. Настраиваем virtualbox web service, для чего создаем файл /etc/vbox/vbox.cfg со следующим содержанием:
6

Запускаем virtualbox web service, перед этим нужно убедиться в том,
что файл /srv/log/vboxwebservice доступен для чтения и записи
пользователю vbox:
phpvirtualbox теперь доступен по адресу virtbox.site/phpvirtualbox/.

Загрузка гостевой ОС в VirtualBox

Как пользоваться сервисом дальше? Теперь пришло время запустить виртуальную машину в первый раз. Убедитесь, что новый виртуальный ПК, который вы только что создали, выбран в окне диспетчера VirtualBox, затем нажмите кнопку «Пуск» в верхней части окна. Когда сервис запускается, вы будете встречать окно First Run Wizard, которое поможет вам подготовиться к установке Windows XP. Нажмите «Продолжить». Затем откроется вопрос, что вы хотите использовать в качестве установочных носителей – компакт-диск или образ на вашем жестком диске (обычно в виде файла .iso). После того, как вы выбрали свой вариант, нажмите «Продолжить», затем «Готово».

Если вам не удалось открыть виртуальную машину VirtualBox после вышеуказанных настроек, вероятно, вы неправильно выделили место под RAM либо HDD. В случае, если перезагрузка не решает проблему, повторите предыдущие шаги заново.

Поскольку на виртуальном жестком диске ничего не установлено, будет автоматически загружаться программа установки Windows. Потребуется некоторое время для загрузки всех необходимых ОС-файлов, но в итоге вы увидите экран, на котором отображается список существующих разделов и нераспределенное пространство на компьютере.

После этого вы должны настроить XP, поэтому нажмите Enter. Появится вопрос, как вы хотите отформатировать привод. Вам нужно выбрать вариант «Отформатировать раздел с помощью файловой системы NTFS (Quick)». Убедитесь, что вы выбрали опцию «Быстрое», или вы будете ждать очень долгое время!

После этого Windows Setup будет форматировать VHD, а затем начнет копирование файлов на диск. Ваше участие в этом процессе не требуется. После завершения копирования файлов программа установки Windows автоматически перезагрузит компьютер, чтобы перейти к следующему этапу.

Когда ПК перезагрузится, он попытается включиться с компакт-диска с помощью окна «Нажмите любую клавишу для загрузки с компакт-диска …». Игнорируйте это! Если вы это сделаете, вы снова повторите предыдущий шаг без причин.

Вы можете предотвратить этот системный вопрос, щелкнув правой кнопкой мыши по значку компакт-диска в нижней части окна виртуальной машины и нажав «Удалить диск с виртуального диска». Как только это окно закроется, вы увидите знакомый экран загрузки Windows XP, прежде чем он переключится на второй этап установки.

Как только отобразится «Мастер установки Windows XP», нажмите «Далее», чтобы начать ее. Сначала вам будет предложено задать региональные и языковые параметры, которые в основном связаны с нажатием «Настроить …» (чтобы выбрать страну), а затем «Детали», если нужно изменить раскладку клавиатуры.

После того, как все будет выбрано, снова нажмите «Далее». После этого вам нужно будет ввести имя компьютера и пароль администратора. Лучше выбрать название, которое имеет какой-то смысл, вместо случайной строки символов, созданных автоматически. Насколько сложным вы хотите сделать пароль администратора, зависит от того, насколько важна безопасность виртуальной машины.

После нажатия «Далее» вы увидите настройки даты и времени, которые вам не нужно менять. При повторном нажатии этой кнопки окно исчезнет некоторое время, Windows применит все настройки и продолжит установку. Теперь вы можете использовать в VirtualBox гостевые дополнения.

Через минуту или две появится другое окно, на этот раз для сетевых настроек. Удобнее выбрать первый вариант (сеть, у которой нет домена). Для этого требуется ввести имя рабочей группы – по умолчанию Rward, и все значения по умолчанию. Однако вам может потребоваться выбрать «Поддержку Direct3D», когда вас попросят определить компоненты.

Method-2: SSH into VirtualBox VM using NAT

I would recommend users to use this method to SSH into VirtualBox VM. if you recall, in our previous section of this article, I mentioned about connectivity issues when using some kind of VPN.

So for example you are connected to your office VPN and in parallel you also want to work on your Oracle VirtualBox setup. But the SSH won’t work with bridged Adapter due to the VPN as the network has changed.

Most VPN also do not allow configuring DHCP or static IP so there is no way you can connect to your VM using any SSH Client. In such scenarios we prefer to use NAT as it can bypass the VPN network using Port Forwarding.

Advertisement

Step-1: Access Machine Settings of the VM

We again need to modify our Network Settings of the respective VM. This although doesn’t require your VM to be Powered Off. So you can just head over to Machine and click on Settings from the TOP BAR menu of your Virtual Box Console.

Next access the Network Settings. Choose your Adapter and from the drop down menu select «NAT».

Step-3: Configure Port Forwarding

Next we need to configure Port Forwarding on your VirtualBox VM’s Network Settings. On the same section as above under Network Settings. Click on Advanced and next click on Port Forwarding:

Next another pop-up window will appear where you should provide the Port forwarding details. Click on the ADD icon to add a new rule. Fill in the below details

  • Name: Provide any rule name
  • Protocol: SSH uses TCP protocol
  • Host IP: It is better if you leave this empty
  • Host Port: Provide any random port between 0 to 65535
  • Guest IP: Again better to leave it empty for our use case
  • Guest Port: Provide your SSH service port number.

Sample Output:

Once done, click OK

Step-4: Configure Network on Linux Server

After you have saved the Network Settings changes on the oracle VirtualBox VM, we also need to refresh our network configuration in the Linux server.

We ca again use the same set of commands as we used in the previous section to refresh our network configuration:

nmcli networking off
nmcli networking on

This will bring down all your interfaces and then start them again. Alternatively to refresh only one of your interface you can use

ifdown <interface>
ifup <interface>

Next verify your IP Address:

For a NAT network, you will always get IP Address. So this means our configuration is complete, now let’s try to connect to this VM using SSH Client.

Step-5: Verify SSH connectivity to Oracle VirtualBox VM

We will use PuTTY to verify the SSH connectivity towards the Oracle VirtualBox VM. Open a new PuTTY session and provide the details:

The hostname (or IP Address) section must contain the loopback address and provide the same port number as used for Host Port in Port Forwarding section.

Next click on Open and you should get the login prompt to connect to the VM:

Well Done, you have successfully connected to your Oracle VirtualBox VM using SSH.

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

If this is not the first time you are setting up machines you might easily encounter an error message that looks like this:

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:HnZL2cdy+SVZ0PUwajmqndUgqWl0n7dLMEP3o4ZDZSw.
Please contact your system administrator.
Add correct host key in /Users/dpinchoff/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/dpinchoff/.ssh/known_hosts:2
ECDSA host key for 192.168.56.10 has changed and you have requested strict checking.
Host key verification failed

Explanation

When you ssh to a machine the first time, ssh will ask the ECDSA key of the host. It will then ask you to verify that the key
it received from the host is the correct key. This is used so you, the user, will know that you are connecting to the server
you intended to connect to and not some other machine posing as that server. The question looks like this:

When you say «yes» to this, the signature of that server is saved in the ~/.ssh/known_hosts file. One line for each server you connect to in the format of

hostname server-key

or

IP-address server-key

Any subsequent time you connect to the same machine, ssh will verify that the key the remote server sends is the same as listed for the given hostname or IP address in the ~/.ssh/known_hosts file.
If it is the same key, the ssh process will continue and then the server will try to verify that you are who you claim to be. Either by asking your password or by asking you to use your private key to make sure it corresponds to the public key it has on file. (In the ~/.ssh/authorized_keys file on the remote machine)
If the ssh does not find the hostname or IP address of the remote machine in the ~/.ssh/known_hosts file of your local user, then it asks the question as we described above. If, however, the hostname was found, but the signature the server sent you is not the same as you have on file, then you get the above error message. (That claims to be as WARNING.)

This can happen either if you replaced the server machine with another machine, but used the same IP address and/or same hostname. Or if some other machine poses as your server. This is what’s usually called man-in-the-middle attack. Even if the attacker is a woman called Mallory. It can happen for example if one of the boxes that acts as a router between you and the remote machine where your traffic passes will suddenly try to act as that remote server. If you don’t notice this, you might type in your password and let the owner of that box, the man in the middle, know your password.

So if you get such message, start by being suspicious.

This can easily happen if you are currently playing with virtual images on your computer and you clone them and change their IP address and maybe you destroy one and then create a new machine with the same IP as you had earlier. In that case it is safe to accept the new signature. The way do that is that you edit the ~/.ssh/known_hosts file on the computer from which you run the ssh client and remove the line that corresponds to the specific server. This is the line that was mentioned in the above error message, in this case it is line 2 in the ~/.ssh/known_hosts file .

Offending ECDSA key in /Users/dpinchoff/.ssh/known_hosts:2

Remove line 2 from ~/.ssh/known_hosts. Then try to ssh again. It will ask you to verify the key of the remote host. When you say «yes» it will save that key in the ~/.ssh/known_hosts file.

Сетевые режимы VirtualBox

В правой колонке переходим в меню «Сеть».

Каждая виртуальная машина имеет 4 условных адаптера, каждый из адаптеров имеет 5 профилей настройки, о которых мы поговорим ниже.

По умолчанию при создании такой машины адаптер настроен на работу в режиме NAT, который позволяет выходить в .

Рассмотрим более детально каждый тип сетевого интерфейса.

NAT

Network Adress Translation
— механизм в сетях, построенных с использованием TCP/IP протокола, преобразующий IP-адреса транзитных пакетов.

Данная настройка сетевого интерфейса позволяет гостевой операционной системе иметь доступ в Интернет, используя при этом частный IP-адрес недоступный извне.

Данный принцип используется в домашних роутерах.

Устройство имеет 1 внешний, «белый» IP-адрес, выданный провайдером для идентификации в глобальной сети, и множество внутренних, «серых» IP-адресов, установленных пользователем для взаимодействия сетевых устройств в .

Обратите внимание!
Данная настройка сетевого адаптера VirtualBox необходима преимущественно для Интернет-серфинга. При этом подключение к гостевой операционной системе извне невозможно

Данная особенность весьма полезна, т. к. позволяет защитить удаленные машины от внешних сетевых атак. Для снятия данного ограничения необходимо выполнить операцию проброса портов.

Сетевой мост (Bridge)

Используя этот тип соединения, виртуальная машина ничем не отличается от хост машины для других участников сети.

Сетевой адаптер при такой настройке служит мостом между виртуальной и физической сетью.

Условный сетевой адаптер подключается и работает напрямую с минуя хост-машину.

Если компьютер имеет несколько сетевых интерфейсов есть возможность указать через какой из них будет осуществляться взаимодействие (поле «Имя»).

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

Виртуальный адаптер хоста

При таком режиме работы есть возможность взаимодействия как между виртуальными машинами, так и виртуальной машиной и хостом.

В этом случае используется специальное устройство — vboxnet0, которое создает подсети и назначает IP-адреса гостевым ОС.

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

Внутренняя сеть

Как видно из названия данный тип взаимодействия предполагает подключение гостевых ОС к единой внутренней сети.

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

Стоить отметить, что отличие от предыдущего режима работы заключается лишь в отсутствии возможности работы с хост машиной.

Универсальный драйвер

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

На сегодня существует 2 драйвера для двух режимов работы виртуального адаптера:

UDP туннель. Используется для связи машин, запущенных на .

VDE. Используется для подключения виртуальных машин к виртуальному Ethernet-коммутатору на FreeBSD или Linux-хостах.

Стоить отметить, что режим VDE позволяет выполнять эмуляцию L2/L3 коммутаторов и STP, WAN, VLANs протоколов.

Настройка Mikrotik CHR

Для всех созданных интерфейсов на маршрутизаторе добавим комментарий и определим наименование.

Теперь для каждого интерфейса можем определить собственное адресное пространство, в каждом адресном пространстве DNS сервером будет являться виртуальная машина с Windows Server и AD. Тем самым каждое устройство сможет быть добавлено в созданную AD. Внутри AD дополнительно укажем DNS сервера организации.

Для обеспечения изолированности каждой подсети друг от друга создадим соответствующее правило, но при этом обеспечим доступ к сети где располагаются Windows Server с AD (цепочка forward). Также запретим ICMP пакеты между сетями (цепочка input).

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

После всех настроек получаем следующую ситуация из DHCP сервера:

Как видим машины занимают адреса из определенных сетей.

How VirtualBox NAT helps?

Let’s now take a look on the need for having special settings to SSH to the guest server.

VirtualBox support Network Address Translation aka NAT. NAT simply maps an address to another.

Usually, by enabling NAT networking for any guest server, VirtualBox automatically performs IP address translation between the guest VM and host’s network. And, there is no need to configure anything on the host machine or on the local network in guest. However, this makes guest VM not reachable or visible from external networks. Thus, it creates problems when you want to access the guest VM directly.

Fortunately, by enabling port forwarding for port 22, we can SSH to the guest machine from the host.

SSH into VirtualBox — Overview

Once you have installed any Linux distribution using the Oracle VirtualBox, the next step would be connect to your VM using any SSH client such as Putty or may be from a different Linux machine. This can be tricky for beginners or users who are using Oracle VirtualBox for the first time.

There can be multiple reasons due to which you are unable to SSH to your VirtualBox VM, some of them can be

  1. SSH is not up and running on the VM
  2. Firewall is not enabled on the VM to allow port 22 for SSH
  3. Some one has configured SSH on a different port other than the default port 22

Or may be none of the above, and since you are doing it for the first time so you are not sure where to start?

Well GoLinuxCloud to the rescue!!

Follow the steps from this article to first make sure there is no problem with your SSH server and then I will guide you with the steps to SSH into VirtualBox VM.

Понравилась статья? Поделиться с друзьями:
Wi-Fi Роутер
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: