LINUX.ORG.RU

[Gentoo]Как уменьшить размер системы?

 


0

1

Понадобилось мне собрать для своих нужд маленький live-дистрибутив, причём настолько маленький, что есть смысл запихать его целиком в initramfs.

Придя к выводу, что наиболее удобным buildroot можно считать gentoo stage3, я им воспользовался:

wget -cO./download/stage3-latest.tbz $(wget -qO- "http://gentoo.bloodhost.ru/releases/x86/autobuilds/current-stage3-i686/" | sed -rn '/i686-[0-9]+.tar.bz2"/{s#.*href="([^"]+)".*#http://gentoo.bloodhost.ru/releases/x86/autobuilds/current-stage3-i686/\1#p;q}')
tar xvf ./download/stage3-latest.tbz -C ./stage3/
wget -cO./download/portage-latest.txz http://gentoo.bloodhost.ru/releases/snapshots/current/portage-latest.tar.xz
tar xvf ./download/portage-latest.txz -C ./stage3//usr

Написал такие конфиги:

# make.conf
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O2 -march=i686 -pipe"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="i686-pc-linux-gnu"

USE="-* minimal"
VIDEO_CARDS="vesa"
# package.use
sys-apps/busybox savedconfig static
sys-block/gparted dmraid fat hfs jfs mdadm ntfs reiser4 reiserfs xfs

#required by x11-libs/gtk+-2.24.5-r1, required by dev-cpp/gtkmm-2.24.2, required by sys-block/gparted-0.9.1, required by gparted (argument)
x11-libs/cairo X svg
#required by app-text/gnome-doc-utils-0.20.6, required by sys-block/gparted-0.9.1, required by gparted (argument)
dev-libs/libxml2 python
#required by x11-libs/gtk+-2.24.5-r1, required by dev-cpp/gtkmm-2.24.2, required by sys-block/gparted-0.9.1, required by gparted (argument)
x11-libs/gdk-pixbuf X

x11-base/xorg-server kdrive

#required by dev-libs/libxml2-2.7.8-r3[python], required by x11-misc/shared-mime-info-0.90, required by x11-libs/gtk+-2.24.5-r1, required by dev-cpp/gtkmm-2.24.2, required by sys-block/gparted-0.9.1, required by gparted (argument)
dev-lang/python xml

И попытался собрать систему:

chroot ./stage3 env ROOT=/target emerge busybox xorg-server gparted

А emerge сначала потребовал изменить USE-флаги (см. выше), а потом поставил аж на 363M всяких программ.

Что можно сделать, чтобы ещё уменьшить размер системы? Сменить профиль?

Tarkus / # eselect profile list
Available profile symlink targets:
  [1]   default/linux/x86/10.0 *
  [2]   default/linux/x86/10.0/selinux
  [3]   default/linux/x86/10.0/desktop
  [4]   default/linux/x86/10.0/desktop/gnome
  [5]   default/linux/x86/10.0/desktop/kde
  [6]   default/linux/x86/10.0/developer
  [7]   default/linux/x86/10.0/server
  [8]   hardened/linux/x86
  [9]   hardened/linux/x86/selinux

★★★★★

Снести пакеты, необходимые для сборки
emerge -c --with-bdeps=n

Включить оптимизацию по размеру
CFLAGS="-Os ..."

На самом деле, стандартными средствами настолько компактную систему не сделать, я пробовал.

uzbl
()

AITap ты ж туда x11-base/xorg-server запихнул. Чего ж ты еще хочешь? Оно закономерно будет толстым. У меня busybox и несколько чисто консольных прожек в 68Мб помещается.

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

ты ж туда x11-base/xorg-server запихнул.

Я ж с kdrive! Неужели это не поможет его уменьшить?

Что можно использовать в качестве альтернативы?

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

Ещё можно повыкидывать не нужное из профиля:
portage/profiles/{base,default/linux}/packages

uzbl
()
Ответ на: комментарий от AITap

Я ж с kdrive! Неужели это не поможет его уменьшить?

Когда то kdrive был отдельным проектом и он был действительно крошечным… но потом если я правильно понял он слился с иксами. И особо оно там уже ничего не уменьшает.

Что можно использовать в качестве альтернативы?

Ну вот pentoo в 500-600Мб довольно приличное кол-во софта запихнули. А вообще… можно же делать несколько initramfs! В один самый мелкий запихнуть чисто базибокс а в другой вообще все что угодно огромное и неповоротливое… :)

init_6 ★★★★★
()

После сборки системы удалите не нужные вам пакеты emerge -C <package_name>, но на всякий случай лучше оставить где-нибудь пакет для того, что бы его развернуть и изменить / доставить что-либо в систему. Тоже самое с dev пакетами, удалить gcc, но здесь нужно аккуратно с частью пакета gcc слинкованы все бинарники системы, удалить /usr/lib/include, php, python. Установить ядро, наложить на него aufs патч, зажать систему в squashfs и каскадно монтировать с gnome-light можно в мегабайт 150-170 поместить.

kostik87 ★★★★★
()

Спасибо, попробую почистить builddeps и поудалять ненужные вещи вручную. Если не поможет, попробую избавиться от xorg-server.

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

Для начала обозначь предел. Если нужна минимальная система, stage3 определённо не подойдёт, собирай тулчейн(должен быть в портейдже) и далее систему. Если нужны X'ы, но не хочешь использовать Xorg, посмотри в сторону Xvfs, XVesa, MicroXwin, Xfbdev, smallX. А можешь просто собрать busybox.

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

У меня busybox и несколько чисто консольных прожек в 68Мб помещается.

У меня когда-то была дискета на 1.44 MiB, на которую помещалось ядро 2.6.32 и busybox. 68 метров — это много.

2ТС: а зачем иксы, gparted и gtk, если вместо всего этого есть parted?

И да, на основе Генты такие вещи сложно сделать, она по дефолту слишком толстая, и надо всё выпиливать и извращаться с неудаляемыми пакетами, package.provided и т.п., когда проще собрать руками, даже не запиливая лишнее.

gentoo_root ★★★★★
()

Когда я игрался с Gentoo, я был неприятно удивлён огромным количеством устанавливаемых dev-пакетов, особенно со словами python и perl в названиях. Если ты хочешь максимально урезать систему, тебе нужно отказаться от возможности ставить в ней новые программы.

fragment
()
Ответ на: комментарий от gentoo_root

68 метров — это много.

68Мб это замечательно. И да читай внимательно

У меня busybox и несколько чисто консольных прожек в 68Мб помещается.

А вообще см. на gentoo minimall install cd ага а потом рассуждай.

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

2ТС: а зачем иксы, gparted и gtk, если вместо всего этого есть parted?

Читал недавно про удаление в libparted возможности ресайзить файловые системы и про то, что в gparted она останется, т.к. реализована по-своему. Или я ошибся? Кроме того, gparted показался мне подходящим компромиссом между удобством и минимальностью.

Вот бы сделали нормальную ncurses-морду к libparted, цены бы ей не было.

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

Для начала обозначь предел.

busybox, графическая подсистема, gparted.

Xvfs

http://www.google.ru/search?hl=ru&q=xvfs
Имеете в виду Xvfb?

XVesa, Xfbdev, smallX

Разве сейчас это всё не является Xorg kdrive?

MicroXwin

Спасибо, находил его, но не нашёл в дереве portage.

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

А вообще см. на gentoo minimall install cd ага а потом рассуждай.

Он около 120 MiB, ЕМНИП. И там зачем-то ещё установлен gcc, но удалён /usr/include, так что liveCD Генты — то ещё нелогичное дерьмо. И там не busybox, а все обычные программы, поэтому его ещё уменьшать и уменьшать можно, если захотеть.

И да читай внимательно

Видел это, но всё равно как-то много 60 метров на несколько программ, если они, конечно, не дублируют то, что есть в busybox. Хотя, конечно, программы разные есть — если они нужны и весят 60 метров, на здоровье, пусть будут.

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

busybox, графическая подсистема, gparted.

Диск для разметки? Ну так возьми SysRescueCD. Или выбрось иксы с GParted(всё равно это всего лишь графическая морда) и используй cfdisk.

Имеете в виду Xvfb?

Точно.

Разве сейчас это всё не является Xorg kdrive?

По-моему, это подпроекты, не? Ну, кроме smallX.

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

Читал недавно про удаление в libparted возможности ресайзить файловые системы и про то, что в gparted она останется, т.к. реализована по-своему. Или я ошибся?

Я последний раз пользовался parted давно, но и тогда ресайзил ФС с помощью resize2fs. parted не предназначен для ресайза ФС, он управляет разделами. Скорее всего, gparted для этого использует программы типа resize2fs, а не реализует эту возможность своим велосипедом.

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

parted не предназначен для ресайза ФС
Скорее всего, gparted для этого использует программы типа resize2fs

Так и есть. И мне часто нужно именно ресайзить разделы.

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

Диск для разметки? Ну так возьми SysRescueCD.

Он грузится слишком медленно. Хотелось бы запускать только gparted, чтобы занимать как можно меньше места в ОЗУ и процессорного времени (например, на «старом» компьютере с 1GHz Pentium и 128M ОЗУ графика ощутимо подтормаживала).

Или выбрось иксы с GParted(всё равно это всего лишь графическая морда) и используй cfdisk.

Ресайзить файловые системы удобнее, имея хоть какое-то подобие GUI.

Имеете в виду Xvfb?

Точно.

Это же Virtual Framebuffer 'fake' X server, он ничего не рисует.

Попробую начать с microXwin.

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

Ресайзить файловые системы удобнее, имея хоть какое-то подобие GUI.

У cfdisk нормальный псевдографический интерфейс.

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

cfdisk - это инструмент для редактирования таблицы разделов.

ТС придётся вручную сначала изменить размер файловой системы, затем изменить запись в таблице разделов с помощью cfdisk/fdisk.

А parted/gparted - это комбайн, который делает всё сам и не нужно высчитывать.

ЗЫЖ я не говорю что это сложно и не возможно, но использовать автоматическое решение удобнее.

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

Как ни странно, cfdisk (который GNU cfdisk) умеет ресайзить ФС. Я тоже об этом не знал.

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

Если вам требуется небольшой набор программ, почему не попробовать lfs, получится очень компактно; заодно поделитесь скриптом сборки.

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

Мне хотелось избежать сборки своего toolchain'а.

Скрипт сборки я пишу и сейчас, это Makefile, и он умеет скачивать stage3-latest, portage-latest, копировать конфиги и делать chroot stage3 emerge ..., но вот результат мне не нравится.

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

В LFS нужно будет также устанавливать необходимые для сборки компоненты, кучу библиотек, программ, include файлы, прочее, что в принципе в повседневной работе не нужно.

То же самое и в gentoo ставится всё, что нужно для сборки, в бинарных дистрибутивах эта часть вынесена в пакеты с индексом 'dev-', в gentoo хотя также присутствует python, к примеру, на базе которого написан portage (emerge).

Я это к тому, что LFS тоже растолстеет и его придётся чистить, хотя не так сильно.

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

На самом деле, стандартными средствами настолько компактную систему не сделать, я пробовал.

Угу, если без извращений, просто сносом явно ненужного, я только до ~700Мб урезал (на винте на 850Мб, т.е. ~800Миб свободно было 100..150Миб)

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

Чистить всё рано придётся, так же возможно стоит попробовать создать свой оверлэй и в нём править ebuild`ы, убирая из них лишние зависимости и тем самым минимализируя размер получаемой системы.

Я вам уже написал про aufs+squashfs, я собирал систему с полновесным gnome`ом, libreoffice`ом, videolan`ом, там же openarena и поддержка всех видеокарт с открытыми драйверами (intel, nvidia, ati), разумеется xorg-server`ом, прочее, зажимал её в образ squashfs, он кстати получался не большого размера, всего 1 Гб.

Система после загрузки с графикой, запущенной сессией gnome и открытым firefox занимала в памяти 82 мегабайта.

Не так уже много. Образ я положил на usb-hdd, грузил ядро со своим initrd и init сценарием, который находил раздел на usb-hdd и монтировал сжатый образ корневого раздела squashfs.

Так что смотрите, что вам нужно, если хотите всё поместить в initrd то посмотрите как сделано в Ping Is not Ghost.

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

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

И оставить копию системы не обрезанную, в которой проводить обновления для последующей пересборки live системы.

Так что ни каких отличий.

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

Так что смотрите, что вам нужно,

busybox, графическая подсистема, gparted. 300M для такой системы будет очень, очень много. Если сравнивать размер и способ запуска, то должно получиться что-то вроде tinycorelinux.

если хотите всё поместить в initrd то посмотрите как сделано в Ping Is not Ghost.

PING is a live Linux ISO, based on the excellent Linux From Scratch (LFS) documentation. :)

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

Я же вам сколько раз уже сказал использовать squahfs, он зажмёт примено в 2 раза при xz методе сжатия, если удалите лишнее, необходимое для сборки получите все 100 мегабайт.

Я вам привёл пример Ping Is Not Ghost, что бы посмотреть как там устроена загрузка, но там нет графической оболочки, если её поставить то это тоже будет уже мегабайт 100 с учётом, что это будет зажато в squashfs.

Скачайте drweb livecd, он собран на базе gentoo, его размер с учётом вирусной базы 176 мегабайт, из них 78 мегабайт занимает файл с сжатым squsdhfs образом вирусных баз, 'drweb_bases.dwm', остальное полноценное графическая оболочка и набор утилит, думаю можно ещё обрезать.

$ file *
drweb_bases.dwm: Squashfs filesystem, little endian, version 4.0, 81241795 bytes, 186 inodes, blocksize: 131072 bytes, created: Sat Dec 17 22:07:47 2011
flash.dwm:       Squashfs filesystem, little endian, version 4.0, 5072785 bytes, 61 inodes, blocksize: 131072 bytes, created: Thu Jun 24 17:34:31 2010
initrd:          Squashfs filesystem, little endian, version 4.0, 3324962 bytes, 250 inodes, blocksize: 131072 bytes, created: Fri Jan 14 15:52:15 2011
vmlinuz:         Linux kernel x86 boot executable bzImage, version 2.6.30-drweb-6.0.0 (root@drweb.com) #5 SMP Fri Jan 14 12:40:55 , RO-rootFS, root_dev 0x9F, swap_dev 0x2, Normal VGA
_white.dwm:      Squashfs filesystem, little endian, version 4.0, 98481167 bytes, 13699 inodes, blocksize: 131072 bytes, created: Fri Sep  9 19:14:52 2011
$ ls -sh *
 78M drweb_bases.dwm
4.9M flash.dwm
3.2M initrd
2.7M vmlinuz
 94M _white.dwm
kostik87 ★★★★★
()
Ответ на: комментарий от uzbl

В LFS вам тоже придётся собирать кучу библиотек, необходимых только для сборки всего остального и не нужных в работе.

Так же я ТС посоветовал создать свой оверлэй и убрать из ebuild`ов не нужное. После чего ставить.

kostik87 ★★★★★
()

Прежде чем создавать ramfs-образ, удали /usr/share/doc, /usr/include, /usr/src, find /lib /usr/lib -name \*.a -delete. Это сделает систему немодифицируемой, но поможет существенно уменьшить объем. Также неплохо было бы снести и gcc за компанию.

red_eyed_peguin
()
Ответ на: комментарий от uzbl

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

Как минимум можно сравнить depend и rdepend и удалить пакеты, встречающиеся только в dpend и не встречающиеся одновременно в rdepend., это можно сделать скриптом.

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

А iso-образ tinycore весит 12 мегабайт, и там есть Xvesa, набор утилит и немного программ на FLTK.

Вот только репозиторий у них очень весёлый и любит выдавать без причины HTTP 403.

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

Да я не против, но вы попробуйте так собрать сейчас с современным версиями софта и их зависимостями. Если я не ошибаюсь там ещё ядро версии 2.4, по крайней мере относительно не давно было так, а с ядром 2.6 уже больше 12 метров весит.

Если вы хотите пошутить, шутите дальше.

Я вам посоветовал что сделать.

Кстати можете попробовать сделать тоже самое в Debian/Ubuntu, ведь у вас эта система стоит на вашем ПК.

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

Если я не ошибаюсь там ещё ядро версии 2.4

Ошибаетесь, это было в DamnSmallLinux, а в TinyCore ядро 3.0: http://ompldr.org/vYndjNg

Я вам посоветовал что сделать.

Спасибо, я обязательно воспользуюсь squashfs со сжатием xz. В данный момент мне нужно собрать систему, и измеряю я объём несжатой корневой директории.
Система загрузки будет очень примитивной: ядро -> initramfs -> busybox init -> (скрипт, запускающий mdev и gparted; /bin/sh ещё на нескольких tty). aufs при таком подходе не понадобится.

Кстати можете попробовать сделать тоже самое в Debian/Ubuntu

Имеете ввиду, собрать такую же систему на базе Debian? Попробовал, сделал debootstrap, по зависимостям вытянулась куча мусора, и получились те же 300 мегабайт.

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

Именно gparted, вы по зависимостям притяните gtk и прочее от gnome?

AITap

Попробовал, сделал debootstrap, по зависимостям вытянулась куча мусора, и получились те же 300 мегабайт.

Попробуйте удалить пакеты встречающиеся только в секции depend ebuild`ов устанавливаемых пакетов и не встречающиеся в секции rdepend.

depend - пакеты, нужные для сборки.
rdepend - пакеты, нужные для запуска.

Насчёт xvesa, можно собрать из исходников., но я не уверено что у вас встанут обычные пакеты, они скорее всего требуют библиотек от полновесного xorg-server`а.

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

Как?!

Очень просто. Ядро и busybox собрал руками. Сконфигурировал монолитное ядро очень минимально, выпилив почти всё, даже сетевой стек, получилось около 650 килобайт. busybox тоже сконфигурировал по минимуму, собрал статически, получилось тоже около 700 килобайт. Всю ФС завернул в initramfs. Положил ядро и initramfs на дискету, установил на неё syslinux. Естественно, никаких плюшек типа udev там не было, также из устройств поддерживались только клавиатуры PS/2, дисководы и USB-флешки. Фреймбуфера не было.

Конечно, можно было бы заюзать ядро 2.4, оно гораздо компактнее, даже TCP/IP-стек поместился бы. Ещё можно было бы сделать суперформат дискеты, тогда на неё ещё можно было бы поместить +400 KiB, так что место для полёта фантазии есть.

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

Именно gparted, вы по зависимостям притяните gtk и прочее от gnome?

От gnome - нет, от gtk - да.
debootstrap --variant=minbase --include=xserver-xfbdev,busybox,gparted --exclude=apt stable debian/
rm debian/var/cache/apt/archives/*.deb
du -sh debian/
215M debian/

Попробуйте удалить пакеты встречающиеся только в секции depend ebuild`ов устанавливаемых пакетов и не встречающиеся в секции rdepend.

Попробую, как только они соберутся в саму по себе stage3.

Насчёт xvesa, можно собрать из исходников., но я не уверено что у вас встанут обычные пакеты, они скорее всего требуют библиотек от полновесного xorg-server`а.

В данный момент Xvesa - это Xorg, собранный с флагом kdrive, насколько мне известно.

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

AITap

debootstrap --variant=minbase --include=xserver-xfbdev,busybox,gparted --exclude=apt stable debian/

В Gentoo тоже есть bootstrao.sh в /usr/portage, но я его ни разу не использовал, если интересно посмотрите.

Хотя вам наверно будет ближе и удобнее Debian.

AITap

В данный момент Xvesa - это Xorg, собранный с флагом kdrive, насколько мне известно.

Да, я уже посмотрел., но похоже именно xvesa в текущем xorg-server нет, есть только xfbdev, fbdev, xwin и просто fbdev. Хотя возможно я ошибаюсь.

Собственно удачи и если что получится интересного напишите о результате.

kostik87 ★★★★★
()

Что, в Gentoo до сих пор нет pkg_cutleaves(1) и опций сборки пакетов с последующей деинсталляцией пакетов, которые нужны только на этапе сборки (по типу: «portmaster --delete-build-only packagename»)?

Кстати, вместо всего Xorg в некоторых системах можно установить урезанную версию xorg-minimal и выбрать только нужные драйверы.

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

iZEN

то, в Gentoo до сих пор нет pkg_cutleaves(1) и опций сборки пакетов с последующей деинсталляцией пакетов, которые нужны только на этапе сборки (по типу: «portmaster --delete-build-only packagename»)?

Может быть и есть, но я не настолько хорошо знаю Gentoo, так что дать более точный совет ТС не смог, кроме как отфильтровать depend и rdepend. Но по большому счёты это не столь важно, т.к. вся система собирается из исходных кодов и в случае пересборки пакета с другими параметрами не придётся заного собирать необходимые для его пересборки зависимости.

Нужно спросить megabaks`а.

iZEN

Кстати, вместо всего Xorg в некоторых системах можно установить урезанную версию xorg-minimal и выбрать только нужные драйверы.

Всё это в Gentoo есть и флаг minimal и возможность установить только нужные драйверы как устройств ввода так и видео драйверы.

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

Что, в Gentoo до сих пор нет pkg_cutleaves(1) и опций сборки пакетов с последующей деинсталляцией пакетов, которые нужны только на этапе сборки (по типу: «portmaster --delete-build-only packagename»)?

А первый коммент прочитать не судьба?

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

Да уже ответили по поводу вашего первого упрёка. Я кстати не знал ...

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

Со сборкой видеодрайверов проблем нет: я указал VIDEO_CARDS=vesa и USE=kdrive, и ненужные драйвера меня не беспокоят.

Ставить в ROOT=/target/ нужные только на этапе запуска пакеты emerge, кажется, тоже умеет. БОльшая часть проблем была вызвана директивой inherit python в ebuild'ах, которая вызывала зависимость от eselect-что-либо в месте установки.

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

Как?!

Посмотри в сторону openwrt, там ядро + системные библиотеки + сетевые тулзы + веб сервер + веб морда влазят в прошивку 2.5 мб (если не ошибаюсь)

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