Установка wget из портов для freebsd

Prepping the Ports Tree

The ports tree is the name of the hierarchy that exists beneath the directory. This hierarchy contains directories that correspond to port categories, within which are other directories that correspond to individual ports.

Before we begin manipulating any ports, we should ensure that this hierarchy is up-to-date. Forgetting to refresh the ports hierarchy can result in build failures as the ports try to fetch and build files that may not be valid anymore.

We can update the ports tree using a utility called . This tool queries the FreeBSD ports servers for changes.

Making Note of Our Last Update

Before we execute the actual update command, we need to take note of the timestamp on a specific file within our ports tree called . We can use the tool to see the various timestamps associated with the file:

You should see output that looks like this:

There is a chance that you will instead receive an error like this:

If you see this, it means that you do not have a ports tree initialized on your system. If this is the case, continue onto the next section to learn how to extract an initial ports tree onto your system using .

The values we want to pay attention to are the “Modify” and “Change” times, which are highlighted in the output above. In this instance, the “Modify” timestamp will be the most recent time that a ports maintainer modified the file with important information. The “Change” timestamp will be the last time that the file was synced to your server.

We need to remember the timestamp so that we know which updating notes we need to pay attention to after we refresh our ports tree. We can save these to a file in our home directory by typing:

Now that we have this information recorded, we can go ahead and update our ports tree.

Updating the Ports Tree with Portsnap

Once you have a good idea of when the ports tree was last updated, you can sync your ports tree with the most recent information from the FreeBSD project’s site. To do this, we will use a tool called .

If you do not have any information in the directory (if you encountered the error we mentioned in the last section), you can download and extract the entire ports tree to that directory with . This process can take quite a long time, but it is only necessary if your directory is empty, a situation that should only happen once. If your FreeBSD server is on DigitalOcean, your ports tree should already be initialized:

This will download and extract the entire ports tree to the directory.

If you already have a ports tree built in the directory (if you were able to record the timestamps in the last section), you can update the files to their most recent versions with this command:

This command will only extract those files which differ from the ones within the structure, so it will take significantly less time than the variant of the command. This is the format that should be used in day-to-day updates of the ports tree.

Once your ports tree is built or updated, you can begin to manage and work with ports on your system.

Установка Midnight Commander

Следующим шагом я всегда устанавливаю MC и делаю редактором по-умолчанию mcedit. Мне так удобно и проще делать дальнейшие настройки сервера. Установить можно как из портов, так и из пакетов. На вопрос, как лучше, однозначного ответа нет, каждый решает для себя сам. Я обычно MC ставлю из пакетов, а все остальное уже из портов. Почему именно так, да потому, что Midnight Commander ставится очень долго из портов, тянет кучу зависимостей, а у нас в настоящий момент порты даже не обновлены. На все про все уйдет минут 15-20. Так что я предпочитаю поставить сразу из пакетов. Делаем это командой:

# pkg install mc

Так как у нас система голая, увидим сообщение:

The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]:

Соглашаемся. После установки pkg начнется установка MC. Перед этим будет выведен список зависимостей, отмечено, сколько места все это займет. Со всем соглашаемся и начинаем установку. После окончания запускаем файловый менеджер:

# mc

Если у вас вместо прямых линий крякозябры, то закрываем putty и в ее настройках меняем кодировку. Идем в Windows -> Translation и выбираем KOI8-U, сохраняем и заходим снова. Теперь все должно быть в порядке.

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

setenv  EDITOR  vi

меняем vi на mcedit, сохраняем, закрываем.

Настройка SSH сервера

Перво наперво нужно настроить sshd для удаленного подключения. Если сейчас попробовать подключиться к серверу, то ничего не выйдет. Мы увидим окно приветствия, но залогиниться не получится. Это из-за того, что в системе у нас нет ни одного пользователя, кроме root. А этому пользователю по-умолчанию запрещено подключаться через ssh. Соответственно, у нас два пути, либо разрешить подключаться руту, либо добавить других пользователей. Сделаем и то, и другое. Сначала разрешаем пользователю root подключаться по ssh. Для этого редактируем файл /etc/ssh/sshd_config. Пока у нас голая система, воспользуемся для этого редактором ee. Открываем файл на редактирование:

# ee /etc/ssh/sshd_config

Находим строчку PermitRootLogin, раскомментируем ее и ставим напротив yes. По-умолчанию там стоит no.

Здесь же я рекомендую изменить стандартный порт ssh 22 на что-то более экзотическое. Делается это для того, чтобы роботы, которые постоянно сканируют интернет и пытаются залогиниться на серваки, остались не у дел. На 22 порт постоянно кто-то ломится с несуществующими учетками и подбирает пароли. Все это отражается в логах и может мешать. Сменив порт на нестандартный, мы частично избавляемся от этой проблемы. Ищем строчку со словом Port и меняем значение с 22, например, на 11222.

Сохраняем изменения и выходим из редактора. Теперь нам необходимо перезапустить sshd для принятия изменений. Делаем это командой:

# service sshd restart

Демон sshd перезапустится. Можно пробовать подключаться по ssh, должно получиться зайти под root.

Многие считают небезопасным подключаться удаленно под учетной записью рута. Это вопрос неоднозначный, все зависит от конкретной ситуации. Добавим одного пользователя для удаленного подключения. Воспользуемся командой:

# adduser

Заполняем необходимые данные пользователя. Обязательно в качестве добавочной группы укажите wheel. Если пользователя не добавить в эту группу, то он не сможет зайти потом рутом. После добавления пользователя, подключаемся им по ssh. После логина используем команду:

# su -l

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

Как подключаться и работать решайте для себя сами.

Обновление портов

Основные настройки сделали. Теперь подготовим нашу систему к установке софта. обновим дерево портов с помощью утилиты portsnap. При первом запуске используем команду:

# portsnap fetch extract

Утилита скачает и распакует порты в папку /usr/ports. Последующее обновление будет производиться командой:

# portsnap fetch update

Добавим ее в cron для регулярного обновления портов раз в сутки. Для этого идем в /var/cron/tabs и создаем там файл root.

# touch /var/cron/tabs/root

Файл должен быть следующего содержания:

SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
0 3 * * * portsnap cron

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

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

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

Дополнительные материалы по Freebsd

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Что даст вам этот курс:

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

Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Рекомендую полезные материалы по Freebsd:
  • Установка
  • Настройка
  • Обновление
  • Шлюз
  • Прокси сервер
  • Веб сервер NGINX
  • Веб сервер Apache

Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.

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

Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.

Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.

Подробная настройка на Freebsd прокси сервера squid + sams2 — панели управления для удобного администрирования.

Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache.

Настройка web сервера на Freebsd в связке с apache, nginx, php и mysql. Пошаговая установка и настройка каждого компонента.

Использование wget Linux

Команда wget linux, обычно поставляется по умолчанию в большинстве дистрибутивов, но если нет, ее можно очень просто установить. Например установка с помощью yum будет выглядеть следующим образом:

А в дистрибутивах основанных на Debian:

Теперь перейдем непосредственно к примерам:

1. Загрузка файла

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

Опция -О позволяет задать имя сохраняемому файлу, например, скачать файл wget с именем wget.zip:

Вы можете скачать несколько файлов одной командой даже по разным протоколам, просто указав их URL:

4. Взять URL из файла

Вы можете сохранить несколько URL в файл, а затем загрузить их все, передав файл опции -i. Например создадим файл tmp.txt, со ссылками для загрузки wget, а затем скачаем его:

5. Продолжить загрузку

Утилита wget linux рассчитана на работу в медленных и нестабильных сетях. Поэтому если вы загружали большой файл, и во время загрузки было потеряно соединение, то вы можете скачать файл wget с помощью опции -c.

6. Загрузка файлов в фоне

Опция -b заставляет программу работать в фоновом режиме, весь вывод будет записан в лог файл, для настройки лог файла используются специальные ключи wget:

7. Ограничение скорости загрузки

Команда wget linux позволяет не только продолжать загрузку файлов, но и ограничивать скорость загрузки. Для этого есть опция —limit-rate. Например ограничим скорость до 100 килобит:

Здесь доступны, как и в других подобных командах индексы для указания скорости — k — килобит, m — мегабит, g — гигабит, и так далее.

8. Подключение по логину и паролю

Некоторые ресурсы требуют аутентификации, для загрузки их файлов. С помощью опций —http-user=username, –http-password=password и —ftp-user=username, —ftp-password=password вы можете задать имя пользователя и пароль для HTTP или FTP ресурсов.

Или:

9. Загрузить и выполнить

Вы, наверное, уже видели такие команды. wget позволяет сразу же выполнять скачанные скрипты:

Если опции -O не передать аргументов, то скачанный файл будет выведен в стандартный вывод, затем мы его можем перенаправить с интерпретатор bash, как показано выше.

По умолчанию wget сохраняет файл в текущую папку, но это поведение очень легко изменить с помощью опции -P:

11. Передать информацию о браузере

Некоторые сайты фильтруют ботов, но мы можем передать фальшивую информацию о нашем браузере (user-agent) и страницу с которой мы пришли (http-referer).

12. Количество попыток загрузки

По умолчанию wget пытается повторить загрузку 20 раз, перед тем как завершить работу с ошибкой. Количество раз можно изменить с помощью опции —tries:

13. Квота загрузки

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

Здесь работают те же индексы для указания размера — k, m, g, и т д.

14. Скачать сайт

Wget позволяет не только скачивать одиночные файлы, но и целые сайты, чтобы вы могли их потом просматривать в офлайне. Использование wget, чтобы скачать сайт в linux выглядит вот так:

Настройка ntp для синхронизации времени

Минимально необходимый инструментарий для настройки мы получили, продолжаем работу. Чтобы время на сервере всегда было актуальным, его надо регулярно синхронизировать. Можно пойти двумя путями. Либо запускать через определенные промежутки времени утилиту ntpdate с ключами, либо настроить и запустить службу ntpd, которая будет постоянно работать и синхронизировать время. Более правильный вариант, использовать службу, но он чуть сложнее в настройке. Чтобы синхронизировать время через ntpdate, достаточно просто ввести команду:

# ntpdate -b europe.pool.ntp.org

и время будет синхронизировано. Можно запускать эту команду через cron с определенной периодичностью. Если у вас уже запущена служба ntpd, то ntpdate не сработает, выдаст ошибку:

the NTP socket is in use, exiting

Настроим в таком случае ntpd. Если она у вас уже запущена, то в файле /etc/rc.conf уже есть строчка

ntpd_enable="YES"

если ее нет, добавьте.

Дальше отредактируем файл /etc/ntp.conf В качестве серверов синхронизации укажем:

server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org

и добавим две строчки в конец:

driftfile /var/db/ntpd.drift
logfile /var/log/ntpd.log

Сохраняем, перезапускаем ntpd командой:

# killall ntpd && ntpd

Теперь наш сервер будет автоматически синхронизировать свое время.

Опции

Синтаксис опций очень свободный. У каждой опции, как правило есть как длинное, так и короткое имя. Их можно записывать как до URL, так и после. Между опцией и ее значением не обязательно ставить пробел, например вы можете написать -o log или -olog. Эти значения эквивалентны. Также если у опций нет параметров, не обязательно начинать каждую с дефиса, можно записать их все вместе: -drc и -d -r -c. Эти параметры wget тоже эквивалентны.

А теперь давайте перейдем к списку опций. У wget слишком много опций, мы разберем только основные.

  • -V (—version) — вывести версию программы
  • -h (—help) — вывести справку
  • -b (—background) — работать в фоновом режиме
  • -o файл (—out-file) — указать лог файл
  • -d (—debug) — включить режим отладки
  • -v (—verbose) — выводить максимум информации о работе утилиты
  • -q (—quiet) — выводить минимум информации о работе
  • -i файл (—input-file) — прочитать URL из файла
  • —force-html — читать файл указанный в предыдущем параметре как html
  • -t (—tries) — количество попыток подключения к серверу
  • -O файл (—output-document) — файл в который будут сохранены полученные данные
  • -с (—continue) — продолжить ранее прерванную загрузку
  • -S (—server-response) — вывести ответ сервера
  • —spider — проверить работоспособность URL
  • -T время (—timeout) — таймаут подключения к серверу
  • —limit-rate — ограничить скорость загрузки
  • -w (—wait) — интервал между запросами
  • -Q (—quota) — максимальный размер загрузки
  • -4 (—inet4only) — использовать протокол ipv4
  • -6 (—inet6only) — использовать протокол ipv6
  • -U (—user-agent)- строка USER AGENT отправляемая серверу
  • -r (—recursive)- рекурсивная работа утилиты
  • -l (—level) — глубина при рекурсивном сканировании
  • -k (—convert-links) — конвертировать ссылки в локальные при загрузке страниц
  • -P (—directory-prefix) — каталог, в который будут загружаться файлы
  • -m (—mirror) — скачать сайт на локальную машину
  • -p (—page-requisites) — во время загрузки сайта скачивать все необходимые ресурсы

Кончено это не все ключи wget, но здесь и так слишком много теории, теперь давайте перейдем к практике. Примеры wget намного интереснее.

Managing Different Types of FreeBSD Software

The FreeBSD team maintains the base FreeBSD operating system as a coherent unit. Its components are updated using a tool called and their behavior is controlled primarily through configuration files located within the directory. While you can install and use alternatives to the bundled software, you cannot easily or safely remove the ones that are included in the base system as these are considered functionally essential parts of the operating system.

In contrast, optional software is managed using different processes, tools, and locations within the filesystem. Unlike software from the base system, optional software is configured within the directory. FreeBSD provides two sanctioned methods for downloading and installing additional software onto the system.

The ports system, which we will be describing in this guide, is managed through a filesystem hierarchy located at that categorizes each available piece of software that FreeBSD knows how to build. Within this directory, the first level subdirectory categorizes software primarily according to function or language. Within these directories, folders exist for each individual piece of software. Software can be downloaded, configured, compiled, and installed either through simple commands or through available helper utilities. The software in the ports collection includes all patches necessary to build and run the application on a FreeBSD system.

The other type of installation supported by the system is packages, which are software binaries compiled from the ports collection using reasonable defaults. This is a good method of quickly acquiring software, but it forfeits the level of customization provided by the ports system. You can learn more about how to manage software packages in this guide.

Установка и настройка ipfw

Настройка фаервола сервера это тема отдельной статьи, тут я подробно останавливаться на этом не буду. Мы просто запустим фаервол на нашей freebsd 10, установим скрипт для безопасного редактирования правил. А дальше каждый уже сам по своему желанию сможет безопасно настраивать удаленно фаервол, не боясь потерять доступ к серверу.

Для работы ipfw необходимо либо пересобрать ядро с нужными функциями, любо подгружать модуль во время загрузки. Второй вариант проще и быстрее, воспользуемся им. Добавим в /etc/rc.conf строку:

firewall_enable="YES"

Если нам не нужен NAT, forward портов, то больше ничего делать не нужно, ipfw подключится во время загрузки сервера. Если мы оставим только эту строку и перезагрузим сервер, то удаленно мы к нему больше не подключимся, фаервол заблокирует все соединения. Чтобы того не произошло, указываем путь к файлу с правилами:

firewall_script="/usr/local/etc/ipfw/rc.firewall"

Идем в указанную папку и создаем файл следующего содержания:

#!/bin/sh -

fwcmd="/sbin/ipfw"
${fwcmd} -f flush
${fwcmd} -f queue flush
${fwcmd} -f pipe flush

${fwcmd} add allow ip from any to any

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

# ipfw show

В ответ получаем:

00100 115 15052 allow ip from any to any
65535 0 0 deny ip from any to any

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

Копируем себе скрипт:

# cp /usr/share/examples/ipfw/change_rules.sh /usr/local/etc/ipfw_change_rules

и делаем его исполняемым:

# chmod 0700 ipfw_change_rules

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

Removing an Installed Port

If you have installed a port that you no longer need, you can remove the application from your system using a similar but more straight-forward process.

We can use the target to remove an application from our system. Again, change to the directory within the ports tree associated with the application you wish to remove:

You can remove the application from your system by typing:

If you would also like to delete the options you configured for this port, you can do so by typing:

To delete the configuration options for this port and all of its dependencies, type:

If you removed using the above commands, reinstall it by typing:

Стандартная установка

Начнем с нуля установку Freebsd 11 на одиночный жесткий диск. Вставляем iso образ в автозагрузку и загружаемся с диска. Нас встречает традиционное окно приветствия с тремя вариантами продолжения:

  1. Install — начать установку системы.
  2. Shell — перейти в консоль.
  3. Live CD — загрузиться в режиме Live CD.

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

Дальше нужно будет указать имя новой freebsd системы. Назвать можете как угодно, это не принципиально. В случае необходимости, это имя можно будет сменить после установки.

Теперь выбираем компоненты, которые будут установлены. Я обычно ничего не ставлю, кроме lib32. Все, что нужно, можно потом установить последней версии из интернета.

На следующем этапе выбираем разбивку жесткого диска. Можно вручную указать все необходимые разделы, выбрать размер и т.д. Я обычно этого не делаю и все устанавливаю на одном корневом разделе. Давно уже так поступаю на всех системах и не вижу в этом никаких проблем. Наиболее частая рекомендация — вынести в отдельный раздел все логи, чтобы случайно заполнив все свободное место они не повесили сервер. На практике у меня такого ни разу не было, поэтому считаю лишним каждый раз возиться с разделами ради очень условного удобства. Правда есть нюанс — у меня на всех серверах всегда настроен мониторинг свободного места на жестком диске. Так что я успеваю оперативно среагировать на проблемы со свободным местом. Ну и слежу за ротацией логов само собой, не оставляю их расти до больших размеров.

Так что выбираем первый пункт — Auto (UFS). Установку freebsd 11 на zfs мы рассмотрим позже.

Дальше у вас спросят, хотите ли вы занять все свободное место жесткого диска под систему. Если это так, а обычно это так, то соглашайтесь. На следующем этапе указываем таблицу разделов. Я выбираю GPT:

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

Длится она буквально несколько минут. Чистая система ставится очень быстро. По ходу дела будет предложено указать пароль для root. Сделайте это. Далее нужно будет выбрать сетевой интерфейс для настройки.

Если у вас их несколько, то выберите тот, который вы хотите настроить для доступа к сети. После выбора интерфейса нужно будет согласиться с настройкой ip адреса на нем. Дальше я выбираю получить настройки по DHCP. Так проще всего. Если вам нужно вручную указать ip адрес, то откажитесь от dhcp и введите сетевые параметры вручную.

После этого нужно будет указать адрес dns сервера, предварительно отказавшись от ipv6. Если вы получили настройки по dhcp, то адрес уже будет заполнен, нужно будет только подтвердить его. Если настройки вручную указывали, введи сами dns сервер.

Теперь выбираем часовой пояс, дату и время. Ничего сложного нет, скриншоты приводить не буду. Если дата и время указаны верно, то просто выбирайте Skip, если есть расхождения, вручную укажите правильные. Это, кстати, нововведение в 11-й версии. Раньше такого календаря и часов не было.

Установка движется к завершению. Нужно указать, какие службы вы хотите запускать автоматически при загрузке системы. Обязательно укажите sshd, чтобы подключаться к серверу удаленно, еще ntpd не помешает. Остальное на ваше усмотрение, я больше ничего не указываю. dumped стоит по-умолчанию, пусть останется.

На следующем этапе нам предлагается выбрать некоторые параметры безопасности. Я не знаком подробно с этой темой, не разбирался, но по названиям вижу, что вещи весьма полезные. Можно и включить. Тут на ваше усмотрение. Хуже не будет, но и чего-то особенно тоже не ждите. Все эти настройки можно и позже сделать.

На заключительном этапе вам будет предложено добавить пользователей в систему. Если вы этого не сделаете, то не сможете подключиться по ssh к серверу. По-умолчанию в freebsd пользователю root запрещено подключаться по ssh. Это можно исправить только зайдя локально рутом и отредактировав настройки ssh. Так что создайте хотя бы одного пользователя и добавьте его в группу wheel, чтобы можно было подключиться по ssh и сделать su для получения root доступа.

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

Вы должны загрузиться в свежеустановленной системе Freebsd 11. На этом базовая установка закончена.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

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