LinuxForum.Fans
Тема

Патч пакета Perl-5.16.2 для LFS

Автор: Parmaster 10 сообщений 4247 просмотров
#314717

Не могу пропатчить Perl-5.16.2, приложенным к нему патчем perl-5.16.2-libc-1.patch. Помогите пожалуйста! Выдает ошибку :
lfs@ubuntu:/mnt/lfs/sources/perl-5.16.2$ patch -Np1 -i ../perl-5.16.2-libc-1.patch

text
can't find file to patch at input line 12
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Submitted By: DJ Lucas <dj at linuxfromscratch dot org>
|Date: 2012-06-04
|Initial Package Version: 5.16.0
|Origin: Previous Perl-libc patch
|Status: Not Submitted - LFS Specific
|Description: This patch adapts some hard-wired paths to the C library and gcc.
|             It uses the $prefix variable to locate the correct libc.
|
|diff -Naurp perl-5.16.0-orig/hints/linux.sh perl-5.16.0/hints/linux.sh
|--- perl-5.16.0-orig/hints/linux.sh    2012-06-04 19:23:04.000000000 +0000
|+++ perl-5.16.0/hints/linux.sh    2012-06-04 19:23:56.000000000 +0000
--------------------------
File to patch:
#314718
"Parmaster" написал:
can't find file to patch at input line 12

Вроде бы недвусмысленно.

#314725
text
Submitted By: DJ Lucas <dj at linuxfromscratch dot org>
Date: 2012-06-04
Initial Package Version: 5.16.0
Origin: Previous Perl-libc patch
Status: Not Submitted - LFS Specific
Description: This patch adapts some hard-wired paths to the C library and gcc.
             It uses the $prefix variable to locate the correct libc.

diff -Naurp perl-5.16.0-orig/hints/linux.sh perl-5.16.0/hints/linux.sh --- perl-5.16.0-orig/hints/linux.sh 2012-06-04 19:23:04.000000000 +0000 +++ perl-5.16.0/hints/linux.sh 2012-06-04 19:23:56.000000000 +0000 @@ -66,9 +66,9 @@ libswanted="$libswanted gdbm_compat" # We don't use __GLIBC__ and __GLIBC_MINOR__ because they # are insufficiently precise to distinguish things like # libc-2.0.6 and libc-2.0.7. -if test -L /lib/libc.so.6; then +if test -L ${prefix}/lib/libc.so.6; then libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` - libc=/lib/$libc + libc=${prefix}/lib/$libc fi # Configure may fail to find lstat() since it's a static/inline @@ -167,11 +167,11 @@ esac # we don't want its libraries. So we try to prefer the system gcc # Still, as an escape hatch, allow Configure command line overrides to # plibpth to bypass this check. -if [ -x /usr/bin/gcc ] ; then - gcc=/usr/bin/gcc -else +#if [ -x /usr/bin/gcc ] ; then +# gcc=/usr/bin/gcc +#else gcc=gcc -fi +#fi case "$plibpth" in '') plibpth=`LANG=C LC_ALL=C $gcc -print-search-dirs | grep libraries | @@ -466,3 +466,8 @@ case "$libdb_needs_pthread" in libswanted="$libswanted pthread" ;; esac + +locincpth="" +loclibpth="" +glibpth="${prefix}/lib" +usrinc="${prefix}/include"

Вот патч. Делал всё по книге. Не пойму что за 12 линия?

#314726

У меня не инициализирована $prefix в этой строке?
+ libc=${prefix}/lib/$libc
Если я правильно понял сначала надо обозначить export prefix=/tools чтобы патч нашел библиотеку libc?

#314731

Каким способом накладываете патч? Существует ли файл, который нужно пропатчить? Смысл сообщения об ошибке в том, что утилита patch не может найти файл, который указан этой строкой:

text
+++ perl-5.16.0/hints/linux.sh    2012-06-04 19:23:56.000000000 +0000

И на версии вашего исходника и того, для которого написан патч посмотрите: perl-5.16.0 vs perl-5.16.2 ;)

#314733

Всё было скачано из папки стабильной версии на сайте linuxfromscratch.org с помощью ихнего же файла wget )))). И именно патч назвается той же версией что и сам пакет, почему в патче написано 5.16.0 я не знаю :-( В книге написано что перед сборкой пакета надо его пропатчить, правда на английском но вроде понятно )

5.28.1. Installation of Perl
First apply the following patch to adapt some hard-wired paths to the C library:
patch -Np1 -i ../perl-5.16.2-libc-1.patch

И да, файл linux.sh Который он не может найти есть, но не в папке perl-5.16.0 А естественно в папке perl-5.16.2

#314739

Откройте файл с патчем, измените оба пути:

text
--- perl-5.16.2-orig/hints/linux.sh    2012-06-04 19:23:04.000000000 +0000
+++ perl-5.16.2/hints/linux.sh    2012-06-04 19:23:56.000000000 +0000

И проследите, чтобы текущим каталогом на момент наложения патча был каталог с исходниками.
P.S. Я не уверен в том, что новая версия нуждается в наложении этого патча, но, поскольку я не пользую LFS, врать не буду :)

#314741

Да я что то тоже сомневаюсь, что 2 версия требует патч с 0 версии :-) Пропатчу, если выдаст ошибку удалю и заново распакую исходники :-) Спасибо за помощь! :-)

#314749

Как я и полагал, архив был извлечен с ошибкой, потому что после ошибки патча, решил продолжить сборку, и получил ошибку наличия файла config :) Что мне показалось странным. Извлёк заново, и поглядите!

text
lfs@ubuntu:/mnt/lfs/sources/perl-5.16.2$ patch -Np1 -i ../perl-5.16.2-libc-1.patch
File hints/linux.sh is read-only; trying to patch anyway
patching file hints/linux.sh

Поставил права чтения/записи:

text
lfs@ubuntu:/mnt/lfs/sources/perl-5.16.2$ patch -Np1 -i ../perl-5.16.2-libc-1.patch
patching file hints/linux.sh
Reversed (or previously applied) patch detected!  Skipping patch.
3 out of 3 hunks ignored -- saving rejects to file hints/linux.sh.rej

Вы были правы :) Патч уже применён :)

#314751

После извлечения исходников нужно сбросить права:

text
# chown -R root:root perl-5.16.2
# find perl-5.16.2 -type f -exec chmod ug+rw,o+r
# find perl-5.16.2 -type f -a -executable -exec chmod ug+rwx,o+r

UPD: Как вижу, вы опередили меня :)

Войдите или зарегистрируйтесь, чтобы ответить.