LINUX.ORG.RU
ФорумTalks

gentoo-cleaner v 0.0.1

 ,


3

6

Пруф. Написано с коллективным разумом ЛОРа. Принимаются замечания по улучшению, в планах дописать поиск мусора в /var, и со временем добавить необходимые исключения в /etc.

Сразу скажу - скрипт _НЕ_УДАЛЯЕТ_ найденные неиспользуемые файлы, он рапортует о найденых в /var/log/garbage.log.

GitHub

UPD: Обновлено до 0.0.1.2-r2

★★★★★

Последнее исправление: leg0las (всего исправлений: 6)

Ответ на: комментарий от leg0las

Я уже посмотрел и чуть ниже отписался, что нужно добавить в скрипт, чтобы таких вопросов не было =)

Но вообще, затея так себе. Список очень длинный - 3778 (без /opt 1442). Беглый взгляд говорит, что вроде все норм, но изучать эту простыню тупо лень. Например, есть куча симлинков (/bin/awk, /etc/bashcompletion.d/*, /usr/bin/gcc etc), которые либо eselect'ом ставятся, либо прям в ебилде создаются. Список mime-типов откуда береться - я хз, но в нем файлов 800. Это то, что нужно в первую очередь понять, как анализировать на мусор.

kulti ★★
()
Ответ на: комментарий от amorpher

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

при чем тут она - спроси у себя, до твоего первого ответа все обсуждение было по теме топика, после - появилась и убунта и апт

menefis
()
Ответ на: комментарий от leg0las

Давай ты не будешь утверждать, что в твоей убунте совсем не накапливается мусор.

Что ты подразумеваешь под мусором?

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Остатки в /etc после например нескольких обновлений, остатки в /var. Хотя в apt есть purge, там немного проще.

leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

Там даже без purge всё проще. В /etc не принадлежащих пакетам файлов практически нет, в /var если и есть что-то окромя всяких баз и кешей, то это никому не интересно, килобайт-другой никому не впёрся, а человек заходит туда разве что один раз после установки постгреса.

redgremlin ★★★★★
()

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

Rubystar ★★
()
Последнее исправление: Rubystar (всего исправлений: 1)
Ответ на: комментарий от Rubystar

Будет. Для начала разберусь с тем, что просачивается, например /usr/bin/gcc и подобное. Потом надо исключить живые симлинки, доработать обработку в /var. А там да, исключения.

leg0las ★★★★★
() автор топика
Ответ на: комментарий от madcore

Вот теперь имеешь возможность почистить:) Кстати, те, кто пользовались - отпишите, много ли нашло, и что попало из «полезного».

leg0las ★★★★★
() автор топика
if [ "$(uname -m)" != "x86_64" ]
then
EXCLUDE_PATH="
/etc/local.d/
/etc/portage/
/etc/runlevels/
/lib/modules/
/usr/local/
/usr/portage/
/usr/src/
"
else
EXCLUDE_PATH="
/etc/local.d/
/etc/portage/
/etc/runlevels/
/lib64/modules/
/usr/local/
/usr/portage/
/usr/src/
"
fi

Только за эти строчки я бы прописал PHP и работу на доширак пожизненно. If и else ветки идентичны, вы упоролись?!!!

iVS ★★★★★
()
Ответ на: комментарий от iVS

Предложи как исключить lib|lib64. Костыль, безусловно, скорее всего перепишу, будет переменная и дополнительаня переменная, которая платформозависима. Щас пишу user excludes.

leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

Предложи как исключить lib|lib64.

Легко:

EXCLUDE_PATH="
/etc/local.d/
/etc/portage/
/etc/runlevels/
/usr/local/
/usr/portage/
/usr/src/
"
if [[ "$(uname -m)" != "x86_64" ]];then
    EXCLUDE_PATH+="/lib/modules/"
else
    EXCLUDE_PATH+="/lib64/modules/"
fi
Будь тернарные операторы в баше, эти условия писались бы в одну строчку.

iVS ★★★★★
()
Последнее исправление: iVS (всего исправлений: 1)

Еще замечание: отступы не ставишь из-за ненависти к питону что ли? Может я тупой, но зачем делать так:

mkdir "${TMP_DIR}" 2> /dev/null
Если прога работает с ошибками, то это надо видеть, а не класть на них болт, посылая в /dev/null.

iVS ★★★★★
()
Последнее исправление: iVS (всего исправлений: 1)
Ответ на: комментарий от iVS

И вообще для создания временных файлов освойте уже mktemp. В общем, у вас такой там быдлокод, что я бы ни за что на свете не запускал бы ваш костыль на моей системе. Это ж ппц.

iVS ★★★★★
()
Ответ на: комментарий от leg0las

Еще замечания?

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

iVS ★★★★★
()
Ответ на: комментарий от iVS

Я допилю каменты к каждому куску, работаю над 0.0.1.1 пока с user excludes. По mktemp не совсем понял, как скрипт узнает про новую директорию.

leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

По mktemp не совсем понял, как скрипт узнает про новую директорию.

mktemp возвращает ее имя:

desktop ~ # mktemp -dt garbageXXX
/tmp/garbage3Lf
desktop ~ # ls /tmp/ | grep garbage
garbage3Lf

iVS ★★★★★
()
Последнее исправление: iVS (всего исправлений: 1)
Ответ на: комментарий от iVS

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

iVS ★★★★★
()
Ответ на: комментарий от iVS

Ок, замечания приняты, user excludes по факту уже запилены, буду обновлять тот топик, ну если что-то крупное, то да, писать сюда.

leg0las ★★★★★
() автор топика

gentoo-cleaner v 0.0.1

Есть же dd.

thesis ★★★★★
()
Ответ на: комментарий от iVS

Будь тернарные операторы в баше, эти условия писались бы в одну строчку.

Тоже мне бином ньютона.

EXCLUDE_PATH+="/lib`uname -m | sed -n s/x86_64/64/p`/modules/"

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Фактически, ты озвучил идею сделать переменную, которую потом подставлять везде вместо lib|lib64, а то там в коде какая-то каша из-за этого.

iVS ★★★★★
()
Ответ на: комментарий от iVS

iVS > По стилю видно, что писал Kroz, хех.
Там от меня лишь пару кусков.

leg0la>> Предложи как исключить lib|lib64.
iVS > Легко:
iVS > ...
iVS > EXCLUDE_PATH+=«/lib/modules/»
iVS > ...
iVS > EXCLUDE_PATH+=«/lib64/modules/»
Только пробел нужен. В данном случае он не сыграет роли (так как EXCLUDE_PATH заканчивается переводом строки), но в случае чего может обеспечить лишние минут 15-30 дебаггинга.
EXCLUDE_PATH+=" /lib/modules/"
EXCLUDE_PATH+=" /lib64/modules/"

iVS> отступы не ставишь
Плюсую. Форматирование кода нужно.

iVS> Может я тупой, но зачем делать так: mkdir «${TMP_DIR}» 2> /dev/null
Это ленивая версия такого варианта: [[ ! -d «${TMP_DIR}» ]] && mkdir «${TMP_DIR}» . В релизе, конечно, да , нужно поменять.

В качестве общей рекомендации: определись, пишешь ли ты на bash или на sh. Если на bash, то рекомендую использовать [[ вместо [ . Кратко: позволяет избежать некоторых (логических) ошибок; детальней вот: http://mywiki.wooledge.org/BashFAQ/031

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Обновил до 0.0.1.2.

Добавлено:

  • Пользовательские исключения
  • Из списка удалены рабочие симлинки
  • Пишется 3 лога: поломаные симлинки; файлы, про которые не знает portage; общий лог
leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las
# gentoo-cleaner-0.0.1.2-r1
PWD_DIR="$(whereis gentoo-cleaner.sh | awk '{print $2}' | sed "s/\/gentoo-cleaner.sh//g")"

# User exceptions:
EXCLUDE_CONF="$PWD_DIR/user-excludes.conf"

То есть, если gentoo-cleaner.sh находится в /usr/local/bin/ , то и user-excludes.conf должен там находиться? Ты уверен? Оставь просто текущий каталог: EXCLUDE_CONF=«user-excludes.conf».

Я уже не говорю о том, что вместо имени программы лучше использовать $0 или ${0##*/} . И «user-excludes.conf» -> «user-exeptions.conf» (сам же знаешь это слово по-английски).

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Я уже думал на счет названия файла и местоположения, пока такое решение

leg0las ★★★★★
() автор топика

прочитав заголовок - чуть не подавился пловом.

dikiy ★★☆☆☆
()
...
cat: write error: No space left on device
cat: write error: No space left on device
cat: write error: No space left on device
sort: write failed: /tmp/sortsVGWSY: No space left on device
sort: write failed: standard output: No space left on device
sort: write error
funeralismatic ★★★
()
Ответ на: комментарий от Kroz
# gentoo-cleaner-0.0.1.2-r1
PWD_DIR="$(whereis gentoo-cleaner.sh | awk '{print $2}' | sed "s/\/gentoo-cleaner.sh//g")"

# User exceptions:
EXCLUDE_CONF="$PWD_DIR/user-excludes.conf"

Я и говорю, что код непонятный!

EXCLUDE_CONF="${0%/*}/user-excludes.conf"
Не говоря уже о том, что пихать конфиг в bin - изврат, как сказали выше.

iVS ★★★★★
()
Последнее исправление: iVS (всего исправлений: 1)
Ответ на: комментарий от iVS

Подразумевается, что оно лежит где-то в /opt, но да, дорабатывать еще надо.

И да, уже есть r2 с несколькими правками.

leg0las ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.