Веб-сервер за два вечера

Многие из вас наверняка все еще помнят те времена, когда компьютерная техника находилась лишь на ранней стадии своего развития. Позволить себе иметь в личном распоряжении персональный компьютер мог далеко не каждый, а о серверном оборудовании и вовсе не могло быть и речи.
Но, к счастью, времена меняются, и на сегодняшний день покупка даже серверного оборудования связана с достаточно скромными затратами, сопоставимыми с бюджетом покупки настольного компьютера или ноутбука. Но возникает другой вопрос — а что же с этим оборудованием делать? Вполне логичным ответом было бы: «использовать по прямому назначению», о чем мы с Вами сегодня и поговорим в компании с замечательным персонажем по имени Beastie и операционной системой FreeBSD, с которой он частенько ассоциируется.
Под «использованием по прямому назначению» конечно же можно было подразумевать множество разных применений, но я хотел все-таки остановиться на варианте использования в роли веб-сервера, как альтернативу многочисленным услугам по предоставлению shared и VPS хостинга.
Предистория
Некоторое время назад ко мне в руки попал простенький сервер, который как раз предполагалось использовать как хостинг для одного из проектов. Оставалось лишь сделать его пригодным для выполнения этой задачи. Казалось бы дело это как минимум не тривиальное, но буквально через пару дней мне довелось убедиться в обратном.
Ассортимент оборудования, спрятанного внутри 1U корпуса, был вполне стандартным, ничего особенного: процессор Intel Xeon 5335, оперативная память Kingston 2х2 GB ECC Full-buffered, жесткий диск изначально только один — WD 150 GB 10000rpm SATA, а вот модель материнской платы, к сожалению, на память назвать не могу, вроде что-то от SuperMicro, с простенькой встроенной видеокартой, сетевой картой с двумя гигабитными Ethernet портами и встроенным же видимо software RAID-контроллером. Опытный глаз наверняка заметил бы в этом списке сильную недоукомплектацию, особенно проявляющуюся при упоминании процессора в единственном числе, отсутствии RAID, и скромным объемам оперативной памяти. Объясняется это достаточно просто — проект еще предстоит тестировать перед запуском, а этой платформы для этого будет более чем достаточно.
Перед запуском проекта в открытое плавание естественно предстоит upgrade оборудования.
День первый
Подготовка
Если верить бумажкам, идущим в комплекте с сервером, на единственный жестком диск в магазине установили демо-версию одной из серверных операционных систем от одной мало кому известной корпорации. Смотреть что это за зверь такой у меня особого желания не было, по-этому я не долго думая пошел искать среди своей коллекции дистрибутивов болванку с заранее выбранным opensource решением вопроса об операционной системе — FreeBSD 6.2.
Почему выбор пал именно на эту ОС объяснить не так уж и просто, но я все же попробую. Выбор был достаточно классический: Unix vs Linux, возникали еще некоторые сомнения насчет решений от Sun в виде Solaris и OpenSolaris, но от них я отказался достаточно быстро в основном из-за более чем скромной документации и проприетарного происхождения, попутно закрыв глаза на все положительные отзывы, которые я видел в Сети.
Так как мне хотелось иметь иметь перед собой конструктор для сбора системы именно таким образом, как было бы удобно мне, а не разработчикам дистрибутива, то список вариантов, выступавших на стороне Linux быстро начал сокращаться, начиная с CentOS. Предпоследним вычеркнутым из списка дистрибутивов Linux был Debian, что оставило в нем лишь Gentoo Linux. Финальный выбор между FreeBSD и Gentoo был сделан уже легче: во-первых, по своему опыту с ноутбуком я уже понял, что с Gentoo предстояло бы немало хлопот, а, во-вторых, в новый конструктор, как ни крути, «играть» намного интереснее, чем в старый, так что долго думать не пришлось
Установка
Найдя наконец диск с FreeBSD, я попытался решить следующий возникший вопрос: а как же установить операционную систему с компакт-диска на компьютер, не имеющий соответствующего привода? Так как сервер был запломбирован и находился на гарантии, вариант частично разобрать и подключить обычный привод отпал сразу же, ровно как и вариант с подключением внешнего привода по причине его отсутствия. Подходящее решение было найдено практически сразу же, благо жесткие диски подключались по принципу hotswap: вытащив жесткий диск без развинчивания корпуса, я подключил его к подвернувшемуся под руку настольному компьютеру, обладающему DVD-приводом. Загрузка прошла успешно и я приступил к установке, руководствуясь FreeBSD Handbook, пересказывать его особого желания у меня нет, остановлюсь лишь на некоторых особенностях этого процесса.
Первым этапом установки, где пришлось задуматься, был fdisk (разбиение диска на так называемые slice). Для избежания путаницы для самого себя, я решил, что размещу рабочие директории http-сервера и базы данных в /var, которую и выделил в отдельный slice, занимающий большую часть доступного дискового пространства. В ассортимент доступного при установке программного обеспечения я особо вникать не стал, так как знал, что у меня всегда будет возможность заняться им позже, и как следствие этого выбрал что-то очень близкое к стандартному набору ПО.
Подтвердив установку и подождав достаточно непродолжительный период времени, я перезагрузил систему, вытащив установочный диск в процессе. Установка оказалась на удивление элементарной, что привело к полученной с первой попытки работоспособной системе. Увидев долгожданное приглашение к вводу логина и пароля я убедился, что могу беспрепятственно получить доступ к консоли и сразу же выключил систему, чтобы перенести жесткий диск обратно на сервер.
Так как сетевое подключение еще только предстояло настроить, то на сервер переносить пришлось не только жесткий диск, но и монитор с клавиатурой. На новом оборудовании все так же прекрасно запустилось, и я принялся за настройку подключения. Особых проблем не возникло — в Handbook‘е все более чем качественно задокументировано, самым сложным был процесс выбора драйвера, вернее осознавание того, что он изначально правильно сам установился. Следующей маленькой проблемой было угадывание какой же из Ethernet-портов был только что настроен, и, соответственно, подключение кабеля именно в него, а не в его соседа. После завершения всех манипуляций я с радостью обнаружил, что ping от сервера до gateway’а успешно проходит, что по сути и означало окончание настройки сетевого подключения.
Следущей целью было избавить себя от необходимости пользоваться позаимствованными у другого компьютера клавиатурой и монитором. Дело тоже оказалось достаточно нехитрым, sshd установился и настроился вполне самостоятельно где-то в процессе установки, от меня потребовалось лишь создать дополнительного пользователя, написать нехитрую строчку в rc.conf: sshd_enable=»YES» и собственно запустить daemon’а. Этого было вполне достаточно, чтобы набрав на своем ноутбуке ssh в консоли, с указанием необходимых параметров, получить удаленный доступ к серверу по протоколу SSH.
Решив, что для начала этого будет вполне достаточно, я отправился по другим делам, так как тот вечер еще даже не успел подойти к своему завершению.
День второй
Программное обеспечение
Хорошо, вполне работоспособную операционную систему мы получили. Осталось снабдить ее необходимым программным обеспечением для выполнения своих обязанностей, определенных нами заранее.
Прежде чем что-либо устанавливать, очень не пожалел, что ознакомился как с соответствующим разделом handbook’a, так и с доступным ассортиментом ПО. После этого я перешел-таки собственно к выбору и установке ПО:
- Так как одной из основных составных частей практически любого веб-сервера является http-daemon, именно с его выбора я и решил начать. Причем начал еще задолго до описываемых событий, вся многофункциональность Apache мне была не нужна, а аналоги mod_auth и mod_rewrite есть и в более легких http-серверах. Cамо веб-приложение, которое там предполагалось располагать, работает по большей части на PHP, так что ничего особенного от httpd совсем не требовалось. В итоге финальный выбор был между быстрыми и легкими вариантами: nginx и lighttpd, какой-либо весомой причины по которой я выбрал lighttpd с mod_fastcgi привести не могу, основным фактором был мой некоторый опыт работы с ним в прошлом, и отсутствие такового в отношении nginx. Установка прошла легко и непринужденно с помощью в сжатые сроки найденного в Google мануала.
- Другим немаловажным компонентом сервера является ftpd, как известно используемый для передачи файлов. Собственно говоря, если активное его использование не планируется, то особого значения какой именно сервер будет использоваться значения не имеет: любой из доступных устанавливается настраивается в пару простых шагов без каких-либо проблем (если это имеет значение — я выбрал vsftpd, так как мне уже далеко не один раз доводилось его настраивать на домашних компьютерах, и, как следствие, даже инструкция не понадобилась). Но при потенциальной возможности работы через Интернет, этот протокол является достаточно уязвимым, так как не использует никакого шифрования. Эта проблема решается с помощью механизма FTP over SSH, который представляет собой использование SSH в роли туннеля для передачи файлов по FTP. О том, как воспользоваться этим механизмом вам подскажет man ssh, какой-либо дополнительной конфигурации он не требует, разве что настройки соответствующим образом firewall’а, но об этом я расскажу позже.
- Сам PHP установлен последней доступной в ports версии и , как уже упоминалось, был подключен к lighttpd с помощью mod_fastcgi, какой-либо дополнительной конфигурации с моей стороны не потребовалось, я разве что выбрал список модулей (в общем-то тоже занятие не сложное, достаточно лишь осознавать какие именно используются, плюс я еще решил Suhosin установить) и просто просмотрел по диагонали все конфиги (в основном сам php.ini и lighttpd.conf) на предмет их соответствия потребностям моего приложения. Отдельная история возникла с лишь одним модулем — Blitz, который на данный момент все еще отсутствует в репозиториях как FreeBSD, так и подавляющего большинства (если не всех) дистрибутивов Linux. Его пришлось устанавливать вручную из исходников по соответствующему мануалу, что правда тоже дело не хитрое и заняло всего несколько минут.
- СУБД особо выбирать не пришлось — приложение написано было с расчетом на PostrgeSQL, ее соответственно и прикручивал к PHP. Этот этап был пожалуй одним из самых проблематичных, так как сразу после классического make install clean соответствующий daemon запускаться отказался. Какого-либо осознанного сообщения об ошибке /usr/local/etc/rc.d/postgresqld start не выводило как в консоль, так и в логи, но тем не менее консольный клиент psql и само веб-приложение жаловались на отсутствие запущенной СУБД. Этот факт сильно затруднял поиск возможных вариантов решения на просторах Сети, так что не найдя ничего полезного я решил заняться диагностикой проблемы и поиском решения для нее самостоятельно. Методом проб и ошибок, перебрав множество возможных вариантов запуска daemon’а, я пришел к выводу, что у пользователя от имени которого он должен был запускаться явно проблемы с доступом к файловой системе. Видимо так получилось из-за нестандартного расположения самой базы данных — в директории /var. Не смотря на тот факт, что chown и chmod были использованы по прямому назначению в отношении соответствующих директорий для установления прав доступа. В итоге оказалось, что директория указанная для этого пользователя как домашняя (по памяти пишу, могу ошибиться, но вроде /usr/local/pgsql) по каким-то причинам не создалась и соответственно именно этот факт и мешал запуску daemon’а. Восстановив справедливость в отношении этого пользователя, я обнаружил, что PostrgeSQL успешно запустился-таки, а мое приложение тоже стало функционировать именно так, как ему было положено. Проверив содержимое соответствующего конфига, я решил его больше не трогать, а то как говорится «premature optimization is the root of all evil»©right;. За компанию решил установить веб-интерфейс к PostrgeSQL — phppgadmin. Собравшись из портов, он повел себя как-то не очень адекватно, совсем не так каким я привык его видеть у себя на ноутбуке, разбираться в причинах было не охота — простое копирование и замена соответствующей директории по ftp буквально за минуту решило проблему.
- Вариантов фильтров сетевого трафика в FreeBSD имеется предостаточно: pf, ipf, ipfw. Опыта работы ни с одним из них у меня не было, так что выбор происходил из достаточно субъективных критериев — очевидности принципов работы правил и достаточности документации. Так как я был уверен, что каждый из них сможет обеспечить достаточный уровень безопасности, основываясь на указанных выше критериях в итоге я выбрал ipf. Документация позволила легко и непринужденно все установить и настроить, правда за компанию пришлось разбираться и с пересборкой ядра. В качестве базы для построения собственного списка правил я использовал приведенный все там же, в документации, пример. Само собой пришлось доработать его под конкретную систему, но методом проб и ошибок эта задача выполняется достаточно быстро (будте осторожны с 22 портом, используемым для SSH — очень легко на этом этапе случайно заблокировать самому себе доступ к серверу). Получившийся в итоге список правил приводить не буду, так как его еще предстоит довести до ума на активно работающей системе.
Заключение
Не прошло и двух дней, как из простого набора оборудования получился вполне готовый к работе веб-сервер, конечно же доводить до ума его придется еще достаточно долго, но просто стабильно работать он был в состоянии уже тогда. Дальше его отвезли в место постоянного его прибывания, подключили к более-менее приличному интернет-каналу, с моей стороны при этом потребовалось лишь слегка поменять настройки сетевого подключения, и вот — он уже доступен из Сети. Практически сразу же обнаружился один мой недочет в плане выбора ПО — буквально в первую же ночь после открытия публичного доступа к серверу нашлась масса желающих попытаться подобрать по словарю логин и пароль для доступа к серверу по SSH, но он был открыт лишь для одной учетной записи, у которой было мягко говоря нестандартное имя пользователя, даже его никто за ночь не смог угадать, а до более чем 20-символьного пароля дело так и не дошло. На следующее утро я, не долго думая, установил программу под названием sshguard, которая сразу же предотвратила все последующие попытки подобным образом издеваться над сервером. Дальше надо было настроить запись на DNS-сервере для ассоциации домена с IP нашего сервера, настроить почту, закончить работу над самим веб-приложением и много чего еще, но это уже совсем другая история.
13 comments
Супер! Записи в Вашем блоге с каждым разом все интересней и интересней! Спасибо
Прикольно. Тоже ща думаю заняться таким же делом. Вот сразу и вопрос: где если не секрет сервак держишь и что за канал и главное почем? Смотрел цены на установку своего сервера на паркинг но чот дороговато.
[quote comment="168"]где если не секрет сервак держишь и что за канал и главное почем? Смотрел цены на установку своего сервера на паркинг но чот дороговато.[/quote]Мое дело маленькое — настроить и впоследствии держать в работающем состоянии, ну и собственно разработка веб-приложения, а остальными организационными вопросами заказчик занимается. Хоть я и в курсе ответов на эти вопросы — это не в моей компетенции открыто приводить названия и цифры.
А насчет цен на colocation — в большинстве случаев они вполне оправданны, так как своими силами подобные условия организовывать обойдется в большие суммы (в большинстве случаев).
По поводу выбора ОС и ПО — достаточно спорная аргументация, если чесно:
-Solaris отнюдь не отличается скромной документацией,
-»конструктор для сбора системы именно таким образом, как было бы удобно мне, а не разработчикам дистрибутива» — не очень понятно что имелось ввиду, т.к. есть «голые» дистрибутивы Linux, в том числе большинство серверных.
Так же непонятно какое именно «конструирование» системы было проведено, если это только установка указанного в статье ПО, то тем более странная аргументация.
В статье упущена так же такая важная и интересная часть установки, как Security Tuning
В ее свете, к стати, установка ПО из пакетов смотрится не очень, т.к. в готовых сборках чаще всего присутствует не нужный и/или небезопасный функционал, который часто можно убрать при ручной сборке.
Хотя все эти замечания, в общем, не принципиальны.
И, к стати, вопрос: у имеющейся конфигурации 2 сетевых адаптера, а описано использование только одного — настраивать второй адаптер на балансировку нагрузки/резервирование планируется к запуску? Тот же вопрос по средствам мониторинга, бэкапу, настройке обновлений и т.д.
[quote comment="170"]-Solaris отнюдь не отличается скромной документацией[/quote]
Значит видимо я плохо искал, по крайней мере детального мануала, сравнимого с Gentoo или FreeBSD Handbook’ами или хотябы wiki приличной я не нашел, что правда не говорит о том, что эта документация не существует.
[quote comment="170"]-»конструктор для сбора системы именно таким образом, как было бы удобно мне, а не разработчикам дистрибутива» — не очень понятно что имелось ввиду, т.к. есть «голые» дистрибутивы Linux, в том числе большинство серверных.
Так же непонятно какое именно «конструирование» системы было проведено, если это только установка указанного в статье ПО, то тем более странная аргументация.
В статье упущена так же такая важная и интересная часть установки, как Security Tuning
В ее свете, к стати, установка ПО из пакетов смотрится не очень, т.к. в готовых сборках чаще всего присутствует не нужный и/или небезопасный функционал, который часто можно убрать при ручной сборке.
[/quote]
Ну собственно говоря примерно то, что Вы описываете во втором процитированном мной абзаце, я и подразумевал под «конструированием»: иметь возможность контролировать процесс сборки и установки ПО, в свете добавления и исключения того или иного функционала, при этом пользуясь все же штатными средствами системы, а не ручной сборкой из исходников.
[quote comment="170"]И, к стати, вопрос: у имеющейся конфигурации 2 сетевых адаптера, а описано использование только одного — настраивать второй адаптер на балансировку нагрузки/резервирование планируется к запуску? Тот же вопрос по средствам мониторинга, бэкапу, настройке обновлений и т.д.[/quote]
Тут на самом деле все упирается в финансирование, в любом случае планируется, вопрос только в том — к запуску ли это будет или позже?…
Как до этого дело дойдет — будет хороший повод написать еще один подобный пост
> Но при потенциальной возможности работы через Интернет, этот протокол
> является достаточно уязвимым, так как не использует никакого шифрования.
> Эта проблема решается с помощью механизма FTP over SSH, который
> представляет собой использование SSH в роли туннеля для передачи
> файлов по FTP.
Этот путь смахивает на извращение %) Для безопасной передачи файлов есть scp и sftp, встроенные в ssh, исключающие всякую необходимость устанавливать дополнительные потенциально дырявые сервисы. Клиентов, не считая нативного scp, существует довольно много, а если какая-нибудь программа разработки этот scp не поддерживает, то можно смонтировать каталог на сервере как раздел своей ФС. Единственный минус, на мой взгляд — ограничить пользователя его личным каталогом несколько нетривиально, но все-таки возможно. А уж если ты сам — единственный пользователь своего сервера, то никаких ftp и не надо.
[quote comment="228"]Этот путь смахивает на извращение %)[/quote]Возможно конечно, но не так уж это и много лишних телодвижений надо для прочтения man ssh для обнаружения параметров, необходимых для открытия туннеля для ftp.
[quote comment="228"]А уж если ты сам — единственный пользователь своего сервера, то никаких ftp и не надо.[/quote]Во-первых там нету ни слова о том, что я являюсь его владельцем, но эт неважно. А тот факт, что пароли знаю только я, чисто теоретически может в перспективе и измениться, так что спорный это все вопрос…
интересный пост.правда не написано про пересборку ядра и мира, про обновление портов…
а на счет безопасного фтп, в самом деле, scp, рулит в этом плане.
и еще, переход на freebsd 7.0 планируется? и каким образом, если планируется.
[quote comment="308"]интересный пост.правда не написано про пересборку ядра и мира, про обновление портов…
.
[/quote]Пересборка ядра там вкратце упоминалась, дело тривиальное, не стал на этом останавливаться, а «мира» там вообще нет, это вам не Gentoo
А вообще при установке системы обычно обновление некритично: впервые скачав порты, можно быть уверенным, что они «свежие».
[quote comment="308"]и еще, переход на freebsd 7.0 планируется? и каким образом, если планируется.[/quote]Нельзя назвать этот процесс крайне необходимым, какой-либо причины срочно это делать пока не вижу. Заняться нечем будет — может быть обновлю, а так скорее всего до каких-либо кардинальных изменений, связанных, например, с переходом на кластер не буду саму ОС трогать.
От Debian зря отказались. Видмо не выросли ещё из возраста, когда хочется компилировать.
Несмотря на то, что полгода назад был ярым приверженцем FreeBSD, заставил себя попробовать Debian. Заставил меня это сделать простой вопрос: «А не игнорирую ли я сознательно, возможно более лучшую систему, зацикливаясь только на FreeBSD?» И действительно, оказалось, что я её игнорировал.
Сейчас на новой работе с тоской смотрю на FreeBSD, настроенные год назад другим человеком. Много чего не хватает, хотелось бы доустановить, но нельзя. Новых программ на них не поставить — нет ни пакетов ни портов для той версии. Обновлять саму систему боязно — ядро собиралось с нестандартными опциями и со сторонними патчами. Это в принципе не сложно, но вдруг что-то не склеится, а система в постоянном использовании, огребу я по самую макушку за свою инициативу. Поэтому серверы не обновляю, хоть понимаю, что это не правильно. Руководство развивать систему не желает, собирается всё переводить на CISCO и Windows.
Могу сказать Debian — это надёжная система ПРОМЫШЛЕННОГО уровня, постоянно обновляющаяся без риска что-то поломать. При обновлениях обеспечивается минимальное время отсутствия сервиса — несколько секунд для демонов, минута-две на обновление ядра. При обновлении ничего не компилируется, а значит не тормозит и поэтому обновление не мешает клиентам. Установка новых демонов и программ тоже простая и очень быстрая. Пока у Вас один сервер, разница во времени обслуживания не существенная, но если у Вас будет серверов 20 — на FreeBSD Вы будете тратить всё доступное время, а с Debian у Вас всё будет работать, планово обновляться, установка новой программы не потребует больших временнЫх ресурсов.
А просто описываемая в посте ситуация абсолютно не соответствует описываемой Вами; этот сервер предназначен для частного проекта, который как организовывается так и реализуется очень небольшой группой физических лиц, с промышленным масштабом никак даже приблизительно не связанных. В будущем возможно будет переход на кластер, если проект удастся, но сомневаюсь, что FreeBSD этому сможет хоть как-то помешать, разворачивать ее не сильно сложнее того же Debian, было бы желание…
Вы ничего не поняли
Тезис: Публично доступные сервисы обновлять надо, т.к. в них периодически находят новые дыры и уязвимости.
Те системы, где:
1. для установки или обновления компонента требуется компиляция,
2. где при обновлении нужно подправлять какой-то конфиг, потому что поменялась версия пакета,
3. где можно собирать что-то с собственными опциями или патчами.
Приводят соответственно к:
1. высокой загрузке сервера, что негативно отражается на качестве обслуживания клиентов, или к извращениям с монтированием удалённых каталогов по NFS и компиляции по сети,
2. приводят к более длительному отсутствию сервиса и к лишней головной боли при разбирательствах, какие-же строчки надо исправить в конфиге, чтобы сервис наконец-то заработал,
3. приводит к невозможности обойтись без компиляции и к лишней головной боли при попытках вспомнить, с какими же опциями и патчами собирался этот пакет/система/ядро.
Зачем кластер небольшой группе лиц, догадаться не могу. Судя по веб-серверу, для публичного предоставления какого-либо сервиса, где основную нагрузку создаёт именно «публика». Стало быть в системе есть публичные сервисы, стало быть её нужно обновлять. Или мои предположения не верны?
[quote comment="498"]Вы ничего не поняли
Тезис: Публично доступные сервисы обновлять надо, т.к. в них периодически находят новые дыры и уязвимости.
Те системы, где:
1. для установки или обновления компонента требуется компиляция,
2. где при обновлении нужно подправлять какой-то конфиг, потому что поменялась версия пакета,
3. где можно собирать что-то с собственными опциями или патчами.
Приводят соответственно к:
1. высокой загрузке сервера, что негативно отражается на качестве обслуживания клиентов, или к извращениям с монтированием удалённых каталогов по NFS и компиляции по сети,
2. приводят к более длительному отсутствию сервиса и к лишней головной боли при разбирательствах, какие-же строчки надо исправить в конфиге, чтобы сервис наконец-то заработал,
3. приводит к невозможности обойтись без компиляции и к лишней головной боли при попытках вспомнить, с какими же опциями и патчами собирался этот пакет/система/ядро.
Зачем кластер небольшой группе лиц, догадаться не могу. Судя по веб-серверу, для публичного предоставления какого-либо сервиса, где основную нагрузку создаёт именно «публика». Стало быть в системе есть публичные сервисы, стало быть её нужно обновлять. Или мои предположения не верны?[/quote]
Предположения отчасти верны, но меня, как единственного человека, отвечающего за техническую часть проекта, этот небольшой список негативных моментов вполне устраивает, я знал на что шел. Когда сервер единственный и незаменимый, то да, срочная компиляция новой версии чего-либо приведет к излишней нагрузке на сервер, а значит и замедлению функционирования сервися (что тоже не очень смертельно, так как можно это и ночью сделать, когда нагрузка минимальна), но если проект уже вырос до хотябы трех серверов, то обновление можно произвести существенно легче, просто сделав шаг «назад» в развитии.
Конечно в любом бинарном Linux-дистрибутиве этот процесс проходил бы на порядок проще, но я видимо слишком привык к гибкости скомпилированного программного обеспечения.