1

И надо ли после смены ядра снова запускать prelink - получается для текущего ядра?

2

Нет.

3

Battle Coder пишет:

Нет.

Хоть бы коменты какие-нить что-ли написали.

Ведь prelink снова надо было бы запускать при смене ядра, например, если бы он и модули модифицировал. Ну, вроде бы этого нет....
Нет, - так нет.

4 (08.11.2011 03:14:04 отредактировано Battle Coder)

Ну я и не запускал и всё у меня работало =)

Думаю, если от чего и могут зависить, то скорее от glibc или чего-то подобного.

Кроме того, у меня при установке prelink сам создался файлик /etc/cron.daily/prelink с вот таким содержимым:

#!/bin/sh

. /etc/conf.d/prelink
log="/var/log/prelink.log"

case $PRELINKING in
  yes|no);;
  *) exit 0;;
esac

ionice -c3 -p $$ >/dev/null 2>&1
renice +19 -p $$ >/dev/null 2>&1

if [ "$PRELINKING" != yes ]; then
  sed -ri '/^[[:space:]]*#?[[:space:]]*KDE_IS_PRELINKED=/s:.*:#KDE_IS_PRELINKED=1:' /etc/env.d/*kde* 2>/dev/null
  if [ -f /etc/prelink.cache ]; then
    echo /usr/sbin/prelink -uav > ${log}
    /usr/sbin/prelink -uav >> ${log} 2>&1 \
      || echo Prelink failed with return value $? >> ${log}
    rm -f /etc/prelink.cache
    # Restart init if needed
    [ -n "$(find `ldd /sbin/init | awk 'NF == 4 { print $3 }'` /sbin/init -ctime -1 2>/dev/null )" ] && /sbin/telinit u
  fi
  exit 0
fi

sed -ri '/^[[:space:]]*#?[[:space:]]*KDE_IS_PRELINKED=/s:.*:KDE_IS_PRELINKED=1:' /etc/env.d/*kde* 2>/dev/null

if [ ! -f /etc/prelink.cache -o -f /var/lib/misc/prelink.force ] \
   || grep -q '^prelink-ELF0.[0-2]' /etc/prelink.cache; then
  # If cache does not exist or is from older prelink versions or
  # if we were asked to explicitely, force full prelinking
  rm -f /etc/prelink.cache /var/lib/misc/prelink.force
  PRELINK_OPTS="$PRELINK_OPTS -f"
  date > /var/lib/misc/prelink.full
  cp -a /var/lib/misc/prelink.full /var/lib/misc/prelink.quick
elif [ -n "$PRELINK_FULL_TIME_INTERVAL" \
       -a "`find /var/lib/misc/prelink.full -mtime -${PRELINK_FULL_TIME_INTERVAL} 2>/dev/null`" \
          = /var/lib/misc/prelink.full ]; then
  # If no more than PRELINK_NOEMER_CHECK_INTERVAL days elapsed from last prelink
  # (be it full or quick) and no packages have been upgraded via rpm since then,
  # don't do anything.
  [ "`find /var/lib/misc/prelink.quick -mtime -${PRELINK_NOEMER_CHECK_INTERVAL:-7} 2>/dev/null`" \
    -a -f /var/cache/edb/counter \
    -a /var/cache/edb/counter -ot /var/lib/misc/prelink.quick ] && exit 0
  date > /var/lib/misc/prelink.quick
  # If prelink without -q has been run in the last
  # PRELINK_FULL_TIME_INTERVAL days, just use quick mode
  PRELINK_OPTS="$PRELINK_OPTS -q"
else
  date > /var/lib/misc/prelink.full
  cp -a /var/lib/misc/prelink.full /var/lib/misc/prelink.quick
fi

echo /usr/sbin/prelink -av $PRELINK_OPTS > ${log}
/usr/sbin/prelink -av $PRELINK_OPTS >> ${log} 2>&1 \
  || echo Prelink failed with return value $? >> ${log}
# Restart init if needed
[ -n "$(find `ldd /sbin/init | awk 'NF == 4 { print $3 }'` /sbin/init -ctime -1 2>/dev/null )" ] && /sbin/telinit u

exit 0

В подробности не вдавался... не вчитывался =) даже не знаю, запускается или нет... я вообще prelink запускал сто лет назад... не знаю, реально нужен он мне или нет.


Если бы модули ядра модифицировал... логично. может быть надо было запускать. Но зачем ему их модифицировать? ab Если я не ошибаюсь, модули ни от каких сторонних библиотек не зависят...

Почитайте, что такое предварительное связывание... и для чего оно нужно. Модули ядра (как и само ядро) компилится статически, насколько я понимаю... ибо если бы оно зависело от какой-то библиотеки... не грузилось бы c /boot-раздела само. без доступа к /usr/lib
То же и модулей касается.

5

Спасибо за развернутый ответ. ab