Как я компилирую последний apache2 на человечности с помощью первоначального макета, конфигурации и настраиваю опции

[1130319] Если вам нужна Linux, вам нужна файловая система.

(Здесь я имею в виду операционную систему Linux, а не ядро ОС Linux. К этому более узкому толкованию я приведу ниже.)

Ваше наблюдение о загрузке драйверов устройств при загрузке до того, как файловая система существует, - это красная сельдь. Вы можете загрузить драйвер без файловой системы. Что вы [1130690]не можете [1130691] сделать, так это [1130692]fd = open("/dev/foo", O_RDONLY)[1130693] без файловой системы.

Это не значит, что вам нужен постоянный перезаписываемый носитель, отформатированный с традиционной файловой системой, как в примере с JFFS2. Все, что вам нужно для поддержки традиционного дерева [1130694]/dev[1130695] - это структура данных [1130696], которая [1130698]ведет себя как файловая система на диске. Современные Linux используют [1130700]udev[1130701] на файловой системе внутренней памяти для доступа к узлам [1130702]/dev[1130703] без необходимости постоянного хранения для узлов [1130704]/dev[1130705], например.

Файловая система также нужна для использования некоторых других возможностей Linux-OS:

Нужны разделяемые библиотеки или модули скриптового языка? Вам нужна файловая система для хранения [1130863]/lib/libfoo.*[1130864], [1130865]/usr/lib/perl5/*[1130866], [1130867]/lib/ld.so[1130868], [1130869]/etc/ld.so.cache[1130870] и т.д.

Нужны загружаемые модули ядра? Вам нужна файловая система для [1130871]/lib/modules/$(uname -r)/*

Нужно более одного исполняемого файла, например, оболочка или текстовый редактор? Им нужна файловая система для жизни.Нужно ядро для усиления контроля доступа? Большая часть этого делается с помощью [1130873]битов разрешения[1130874], [1130875]ACL[1130876] и [1130877]SELinux меток[1130878] где-нибудь в файле или каталоге. Возможно, я мог бы придумать и другие примеры, но это сойдет.

Можно загрузить все ресурсы, которые нужны вашей системе из постоянного хранилища в оперативную память, чтобы после загрузки система вообще не использовала постоянное хранилище. [1130714]Живые дистрибутивы Linux[1130715] делают это. Встроенные ОС Linux также обычно собирают всю свою файловую систему в оперативной памяти при загрузке, так что после загрузки они больше не будут ссылаться на постоянное хранилище, такое как [1130716]флэш-накопитель[1130717].

Если вы собираете узконаправленную однозадачную встроенную систему, вам, вероятно, не понадобится Linux-OS. Возможно, вам понадобится только маленькая, менее функциональная [1130718]встроенная операционная система [1130719], или же вы сможете написать [1130720] прямо на металле[1130721].

Некоторые из других ответов здесь говорят о разделении Linux до такой степени, что у вас останется только Linux-ядро, либо в паре с одним исполняемым файлом - вашей программой, запущенной под ядром, либо запущенной как монолитная программа, код которой статически встроен в нее. В любом случае, Вы можете полностью избавиться от необходимости в файловой системе, но то, что Вы в итоге получите - это больше не Linux-the-OS.[1130338].

2
01.01.2015, 11:06
1 ответ

Преамбула

Это работало для меня. Если есть проще, я уверен, что вы дадите мне знать.

Теоретически Эти шаги должны работать на любое управление Linux, вам просто нужно найти оригинальные параметры настройки, которые используются для компиляции Apache для вашего дистрибутива. Возможно, вы можете добавить комментарии к этому ответу, где вы нашли варианты.

Важный вариант:

--enable-layout=Debian

Debian можно изменить на любой из поддерживаемых макетов в файле config.layout в каталоге сборки Apache, параметры определяются как:

<Layout x>
...
</Layout>

, где x будет вариант макета. Попробуйте Googling «Tenable-layout = x», где X - ваше распределение, чтобы найти ваши варианты. Попробуйте найти оригинальные параметры, используемые вашим дистрибутивом, а не каким-либо случайным предложениям.

Редактировать: Как упомянуто устойчивость к проблеме с этим, когда вы обновляете использование APT, и есть новая версия Apache2, компилированная версия будет перезаписана. Его предложение о строительстве Новый Деб - хороший. К сожалению, из-за различных вопросов deb зависимости, которые слишком много работы, чтобы обойти, я не смог сделать это. Однако я бы предположил, что вы попробуете этот маршрут сначала, это должно помочь вам:

http://blog.wpkg.org/2014/06/29/building-apache--4-x-deb-packages-for -Дебин-эвизы-7-х /

Я решил сохранить его как есть, однако я установил удержание на Apache2, чтобы он не модернизирован, пока я не готов выпустить удержание. В качестве альтернативы вы можете просто удалить Apache с машины и добавить его снова, когда вы будете готовы.

Для удержания:

sudo apt-mark hold apache2

для выпуска удержания:

sudo apt-mark unhold apache2

Я также предположил бы, чтобы вы делали клон сервера, который вы хотите изменить, работать через процесс на клоне и заставить его работать, прежде чем пробовать его на производстве env. Разбиение Apache на день или дольше на средней среде, не является стрессом, который вам нужен в вашей жизни. Именно здесь виртуальные машины отличные, сделайте снимок и создайте новый экземпляр с моментального снижения. Или повторить среду, которую вы хотите изменить и внести изменения там.

Я использую цифровой океан, они рок, используйте эту ссылку, чтобы получить 10 долларов с вашей подписки. Отказ от ответственности я получаю 25 долларов с моего мона:

https://www.digitalocean.com/?refcode=9287fc77c7ae

Вот как это сделать на Ubuntu, как было обещано

Это предполагает, что у вас уже есть версия Apache по умолчанию Установлено в вашей системе, ранее запустив:

sudo apt-get install apache2

, и вы запустите

sudo apt-get upgrade

, чтобы обновить все пакеты до последних, включая Apache.

Если в конфиге есть серьезные изменения в конфигурации к последней версии Apache, вам нужно было бы сделать эти изменения самостоятельно. Это может занять некоторое время, поэтому предложение попробовать это на сервере клона, как упомянуто в преамбуле.

Вам необходимо установить зависимости, чтобы сделать сборку

sudo apt-get build-dep apache2

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

Резервное копирование текущей конфигурации: не пропустите этот шаг

sudo cp -r /etc/apache2 ~/apache2_conf_back

, вам нужно установить, какое имя вашего выпуска есть:

sudo cat /etc/lsb-release

мой доверие

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

, вы должны иметь возможность заменить 2 вхождения слова «Доворный» в следующем URL-адресе, чтобы получить варианты, используемые для создания версии вашего релиза APache

Bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/apache2/trusty/view/head:/debian/rules

Я использовал параметры, определенные для переменных «ap2_common_confargs» и "ap2_worker_confargs". Кроме того, я добавил опции:

--with-pcre=/usr \
--enable-mpms-shared=all \
--enable-unixd=static \

, когда я закончил несколько раз, чтобы получить это право, я создал следующий файл в каталоге сборки Apache, который я запускал каждый раз. Вызовите это myconfig.sh

#!/bin/bash
./configure \
--with-pcre=/usr \
--enable-mpms-shared=all \
--enable-unixd=static \
--enable-layout=Debian --enable-so \
--with-program-name=apache2  \
--with-ldap=yes --with-ldap-include=/usr/include \
--with-ldap-lib=/usr/lib \
--with-suexec-caller=www-data \
--with-suexec-bin=/usr/lib/apache2/suexec \
--with-suexec-docroot=/var/www \
--with-suexec-userdir=public_html \
--with-suexec-logfile=/var/log/apache2/suexec.log \
--with-suexec-uidmin=100 \
--enable-suexec=shared \
--enable-log-config=static --enable-logio=static \
--enable-version=static \
--with-apr=/usr/bin/apr-1-config \
--with-apr-util=/usr/bin/apu-1-config \
--with-pcre=yes \
--enable-pie \
--enable-authn-alias=shared --enable-authnz-ldap=shared  \
--enable-disk-cache=shared --enable-cache=shared \
--enable-mem-cache=shared --enable-file-cache=shared \
--enable-cern-meta=shared --enable-dumpio=shared --enable-ext-filter=shared \
--enable-charset-lite=shared --enable-cgi=shared \
--enable-dav-lock=shared --enable-log-forensic=shared \
--enable-ldap=shared --enable-proxy=shared \
--enable-proxy-connect=shared --enable-proxy-ftp=shared \
--enable-proxy-http=shared --enable-proxy-ajp=shared \
--enable-proxy-scgi=shared \
--enable-proxy-balancer=shared --enable-ssl=shared \
--enable-authn-dbm=shared --enable-authn-anon=shared \
--enable-authn-dbd=shared --enable-authn-file=shared \
--enable-authn-default=shared --enable-authz-host=shared \
--enable-authz-groupfile=shared --enable-authz-user=shared \
--enable-authz-dbm=shared --enable-authz-owner=shared \
--enable-authnz-ldap=shared --enable-authz-default=shared \
--enable-auth-basic=shared --enable-auth-digest=shared \
--enable-dbd=shared --enable-deflate=shared \
--enable-include=shared --enable-filter=shared \
--enable-env=shared --enable-mime-magic=shared \
--enable-expires=shared --enable-headers=shared \
--enable-ident=shared --enable-usertrack=shared \
--enable-unique-id=shared --enable-setenvif=shared \
--enable-status=shared \
--enable-autoindex=shared --enable-asis=shared \
--enable-info=shared --enable-cgid=shared \
--enable-dav=shared --enable-dav-fs=shared \
--enable-vhost-alias=shared --enable-negotiation=shared \
--enable-dir=shared --enable-imagemap=shared \
--enable-actions=shared --enable-speling=shared \
--enable-userdir=shared --enable-alias=shared \
--enable-rewrite=shared --enable-mime=shared \
--enable-substitute=shared  --enable-reqtimeout=shared;

Остановите нынешний Apache

/etc/init.d/apache2 stop

, чтобы создать и установить Apache, выполните следующие команды в каталоге сборки

./myconfig.sh
make
make install

Восстановите ваш конфигурацию Apache. Я надеюсь, что вы поддержали конфигурацию, как описано ранее

sudo rm -rf /etc/apache2
sudo cp -r ~/apache2_conf_back /etc/apache2

, мне нужно было сделать Alloe Paths Absalute в /etc/apache2/apache2.conf, следующие команды делают это в vim

:%s/^IncludeOptional /IncludeOptional \/etc\/apache2\//
:%s/^Include /Include \/etc\/apache2\// /

, мне также нужно было изменить путь к Envvars в / usr / sbin / apache2ctl to / etc / apache2 / envvars

Затем перезапустите Apache

/etc/init.d/apache2 start

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

Удачи!

Особые благодаря Jrwren за его пост, который был недостающим произведением на мою головоломку:

, как-настроен на конфигурацию настроившихся настроек - Apache-on-ubuntu

1
27.01.2020, 22:21

Теги

Похожие вопросы