Q2W 23.07.2010 22:52

How-to`sУстановка apache 1.3.42 + mod_perl на Ubuntu 10.04

Вобщем возникла задача поиметь машину для разработки с мод_перлом и первым апачом.
Обычно я это делал на специально выделенной под это дело тестовой машине с Фрёй, где для этого дела есть отдельный порт и никаких проблем, но на этот раз я решил, что пора на своей машине это организовать.

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

Тут написано, что всё просто и делается парой команд, но я бы не писал этот пост, если бы оно действительно было так.

И вот вам моё прохождение сего квеста.


Скачиваем-распаковываем исходники:
1
2
3
4
5
6
cd /usr/src
lwp-download http://www.apache.org/dist/httpd/apache_1.3.42.tar.gz
lwp-download http://perl.apache.org/dist/mod_perl-1.31.tar.gz
tar xzvf apache_1.3.42.tar.gz
tar xzvf mod_perl-1.31.tar.gz
cd mod_perl-1.31



Далее начинается:
1
perl Makefile.PL APACHE_SRC=../apache_1.3.42/src DO_HTTPD=1 USE_APACI=1 EVERYTHING=1


Первое сообщение об ошибке говорит, что у меня сломана команда "echo".
Решается подменой того, что щас выполняет роль sh (dash) на bash.
Т.е. переименовываем во что-нибудь симлинк /bin/sh и делаем новый на bash:
1
ln -s /bin/bash /bin/sh


Bash'евская реализация команды echo прокатывает и мы идём дальше.

А дальше оно говорит, что у меня плохой компилятор и ему нужен gcc. Тот факт, что он у меня уже установлен, ничего не меняет =).
На самом деле просто не хватает пакета libperl-dev

Но самое интересное происходит потом:
1
2
htpasswd.c:101: error: conflicting types for ‘getline’
/usr/include/stdio.h:651: note: previous declaration of ‘getline’ was here


Т.е. в апачевская функция getline плохо названа, ибо в stdio уже есть такая.
Придётся переименовать её во всём апаче, благо не много:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Index: src/support/htdigest.c
===================================================================
--- src/support/htdigest.c (revision 897307)
+++ src/support/htdigest.c (working copy)
@@ -71,7 +71,7 @@
while ((line<y> = line<x>));
}

-static int getline(char *s, int n, FILE *f)
+static int ap_getline(char *s, int n, FILE *f)
{
register int i = 0;

@@ -158,7 +158,7 @@
{
static char line<max_string_len>;

- while (!(getline(line, MAX_STRING_LEN, source))) {
+ while (!(ap_getline(line, MAX_STRING_LEN, source))) {
putline(target, line);
}
}
@@ -216,7 +216,7 @@
ap_cpystrn(realm, argv<2>, sizeof(realm));

found = 0;
- while (!(getline(line, MAX_STRING_LEN, f))) {
+ while (!(ap_getline(line, MAX_STRING_LEN, f))) {
if (found || (line<0> == '#') || (!line<0>)) {
putline(tfp, line);
continue;
Index: src/support/logresolve.c
===================================================================
--- src/support/logresolve.c (revision 897307)
+++ src/support/logresolve.c (working copy)
@@ -71,7 +71,7 @@
#endif /* !MPE && !WIN32*/

static void cgethost(struct in_addr ipnum, char *string, int check);
-static int getline(char *s, int n);
+static int ap_getline(char *s, int n);
static void stats(FILE *output);


@@ -278,7 +278,7 @@
* gets a line from stdin
*/

-static int getline (char *s, int n)
+static int ap_getline (char *s, int n)
{
char *cp;

@@ -326,7 +326,7 @@
for (i = 0; i < MAX_ERR + 2; i++)
errors<i> = 0;

- while (getline(line, MAXLINE)) {
+ while (ap_getline(line, MAXLINE)) {
if (line<0> == '\0')
continue;
entries++;
Index: src/support/htpasswd.c
===================================================================
--- src/support/htpasswd.c (revision 897307)
+++ src/support/htpasswd.c (working copy)
@@ -98,7 +98,7 @@
* Get a line of input from the user, not including any terminating
* newline.
*/
-static int getline(char *s, int n, FILE *f)
+static int ap_getline(char *s, int n, FILE *f)
{
register int i = 0;

@@ -547,7 +547,7 @@
char scratch</i></max_string_len><max_string_len>;

fpw = fopen(pwfilename, "r");
- while (! (getline(line, sizeof(line), fpw))) {
+ while (! (ap_getline(line, sizeof(line), fpw))) {
char *colon;

if ((line<0> == '#') || (line<0> == '\0')) {</max_string_len></x></y>



И доустанавливаем:
1
2
3
make && make test && make install
cd ../apache_1.3.42
make install



Тэги: apache apache 1.3 mod_perl perl ubuntu
+ 2 -
Похожие Поделиться

alff31 23.07.2010 23:19 #
А можно объяснить для непросвященных для чего ставить первый апач, вместо второго? Он стабильнее, для тестов на совместимость или как?
Q2W 23.07.2010 23:37 #
Есть несколько проектов, которые работают под первым апачём и не работают во втором.
И даже не собираются.
А разрабатывать и поддерживать их надо.
solomenikm 24.07.2010 12:41 #
Я не в курсе есть ли такая возможность, но может быть имеет смысл найти старый дистрибутив ubuntu в котором в репах первый apache и поставить его на виртуальную машину?
Например я ставил ubuntu 9.04 чтобы была старая версия php.
Q2W 24.07.2010 15:10 #
Ну виртуалка - это далеко не всегда удобно.
philosoft 24.07.2010 13:01 #
Минус за make install
Q2W 24.07.2010 15:11 #
Спасибо, конечно, но что в нём плохого-то?
kstep 24.07.2010 22:33 #
Под debian-based простой make install неправославен, ибо не создаёт деб-пакет, который потом можно легко найти/удалить/обновить. Хотя бы checkinstall нужен — уже правильнее.
Q2W 24.07.2010 22:54 #
О, deb-пакет это мысль.
По сути ведь поскольку в нём бинарики, всех вышеописанных проблем он позволит избежать, правильно?
Всем, кроме меня уже правда, но тоже полезно. =)
mult 27.01.2013 17:17 #
что-то последнее время ставлю apache только при острой необходимости (типа разработчики просят именно апач). обычно хватает lighttpd. а там все через fastcgi. ну и все из коробки.