Собираем файловый менеджер Midnight Commander 4.6.1
michael_s 4 декабря, 2009 - 04:49.- Любой билд Haiku (кроме чистого GCC4, я использовал R34190 2/4)
- Исходные коды Midnight Commander–а
- Пакеты gettext, libiconv, glib, и pkg–config
Далее открываем файл /mc–4.6.1/config/config.guess и добавляем в него следующее после 1189 строки:
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
echo i586-pc–beos
exit 0 ;;
Затем открываем configure файл, находим строку for lib in bsd socket inet; do и добавляем в неё параметр network до точки с запятой для обеспечения работы с сетью (типа ftp), сохранив, выполняем конфигурирование (должен быть активен GCC2) со следующими параметрами: «configure -–prefix=/boot/common --with–screen=ncurses, запускаем сборку make и установку make install.
Запускать рекомедуется со следующим ключом: mc -a или добавить в файл /boot/home/.profile строку alias mc="mc -a (с кавычками) из–за некорректной псевдографики, а чтобы mc стал цветным, в том же файле прописываем строчку «export TERM=xtermcolor.
UPD. Все изменения в файлах можно проще и быстрее сделать с помощью этого патча, применять также как для Psi.
Написано с непосредственной помощью Сяржука Жарского.

Патчик бы под
Патчик бы под эти хаки в конфигуре сделать. Вечером соображу. ;–)
«патчик
«патчик к конфигуре» ?? лучше нормально autotools допилить, чтобы ./configure с дефолтными ключами без патчиков выдавал не ересь, а рабочую конфигурацию. А то приходится то с --build=i586-pc–haiku / i586-pc–beos /i586–pc играться, то в libtool хаки править, чтобы компилировал/собирал без -lm -lc
Нормально работающие autotools — это когда конфигура «из коробки» выдаёт разумно настроенный config.sub
Может кому
Может кому и лучше автотулзы попилить, но в данном случае задействован старый армейский принцип -"нужно, чтобы работало, вперёд — рожай!" «Взял сорцы там–то, приложил патч такой, задал команду такую–то. Пользуйся.» Всё чётко и ясно.
А на m4 учиться разговаривать честно говоря лень. И за всё «человечество» впрягаться тоже лень. Мы уж по–стариковски в кернел дебаггере на дампы, под чаёк подивимся вместо этого. ;–)
А не проходит
А не проходит ли этот фокус с пререлизами mc 4.7?
Если да — возможно, есть смысл переслать патч нынешним разработчикам?
он даже с 4.6.2
он даже с 4.6.2 не проходит, и с 4.6.1 пропатченым на утф–8 не проходит. Не собирается что–то из slang функций. Хотя кое–кто и собирал 4.7. ;–)
Проходит, даже
Проходит, даже очень. На неделе собрал mc 4.7 pre4. Результаты считаю неплохие если учесть, что работает отображение рамок как положено, работает ftp, повозился с subshell'ом — тоже заработал.
Перекодировка тоже работает, скины работают. На пока меня все устраивает. Собирал: slang–2.2.2 с terminfo database ( немного пропатчил ), glib–2.22.2 (haiku ports), pkg–config (haiku ports).
Haiku скомпилена самостоятельно trunk GCC4 only.
Ждём патчик
Ждём патчик с «инструкциями» если не жалко отдавать. :–) Можно на мыло: zharik-хрю-gmx–li. Ну фтп и в нашем работает, а что с саб-шеллом–то? А по зип–файлам он ходит? ;–)
По
По зип–файлам ходит (править в extention file). Все выложу на след неделе если интересно. Теперь о том, что работает. Не работает интернализация, меню на английском, не срабатывают некоторые сочетания клавиш.
Да, Дмитрий,
Да, Дмитрий, конечно–же интересует! Я думаю вообще имеет смысл отправить патчи разработчикам. Или хотя–бы на ports.haiku–files.org закоммитить. А интернационализация там через gettext идёт? Что по поводу рамок — мы вообще считали, что это недоделка в гаечном терминале. Очень интересно посмотреть на вашу работу и убедиться, что мы ошибались. :–D А сочетания клавиш нужно по месту смотреть — возможно гаечный инпут–сервер что–то перехватывает на свои нужды?
http://bebits.com/app/810 А
http://bebits.com/app/810
А вы случайно не «однофамилец» автора того самого порта? ;–)
Нет
Нет не однофамилец. А с тем портом получилось все очень печально — исходники были утеряны в связи с поломкой ЖД, сделать все снова на тот момент времени не было возможности. Про рамки — гаечный терминал, как я понимаю, не держит эту фичу. В мс поддержка скинов позволяет отображать что угодно — хоть одинарные, хоть двойные рамки. Со временем я думаю доработают и терминал.
Да, гаечный
Да, гаечный терминал ещё далёк от совершенства. :–\
Патчи выслал
Патчи выслал на мыло. Если не трудно выложи здесь. Спасибо
export
export LANG=ru_RU.UTF–8 и в MC все по–русски :)
>Да, гаечный
>Да, гаечный терминал ещё далёк от совершенства. :\
а какой–либо другой есть? А то надоело в vim Ctrl–L нажимать, перерисовывается какая–то ересь при пролистывании
Есть MuTerminal,
Есть MuTerminal, должен работать в Haiku. Ну и XTerm, конечно, но не уверен, что X11 заработает в Haiku.
А что за порт
А что за порт вим–а? Из пакажей? В гуишном из принципа не сидим? :–)
гуишного
гуишного седьмого ЕМНИП, нет. Вот допилить бы порт GTK2..
Уууу Ваша
Уууу Ваша «информированность» поражает. :–D Дело в том, что вы сейчас общаетесь с человеком, который вернул седьмому виму гуй под гайкой. И порт этот уж как полгода доступен в составе опциональных пакажей т.е. вполне официально. :–)
А ваше намерение насчет ГТК2 серьезное?
вот спасибо,
вот спасибо, добрый человек. А то я гайкой интересуюсь эпизодически, и сложно бывает отследить текущее «состояние дел», и официальную «линию партии» :–)
> А ваше намерение насчет ГТК2 серьезное?
надо же чем–то себя занять на новый год. Посмотрю, пособираю — вдруг что из этого получится. Насколько я понимаю, достаточно портировать gdk и gdk–pixmap.
хм парни
хм парни с портом qt себя уже целый год «занимают» в много–подходном режиме. :–) Кстати один из них занимался портом ГТК2 до того, как решил помочь с QT. По хорошему с ним бы переговорить для начала. Зачем с нуля–то начинать? Да и вряд–ли с наскока у вас что выйдет — и как всегда весь пар уйдёт в свисток. :–(
ПС: Зарегистрировался–бы ты, ёжик. ;–)
Патчик получен?
Патчик получен?
Да,
Да, на следующий день. Как я уже косвенно описывал эту опопею — он хочет slang, slang хочет libtool — гайкопортер пыхтел три часа, загадил мне полраздела и потом банально обкакался — не смог собрать. На том мой лимит времени и терпения на всё это барахло и закончился. :–\
да ещё, если
да ещё, если прописать в .profile команду
export TERM=xterm–color
то этот командир будет в цвете.
Забыл про это
Забыл про это совсем, добавлю сейчас.
както
както правильно и сложно описано
=)
проще както собирал, ей ей)
не, рука и школа чувствуется, ничо против не имею, так держать )
а если просто
а если просто выложить готовый пак с бинарниками? распаковал и пользуй
До появления
До появления полнофункциональной системы пакажей/портов в Гайке подобная сборка из исходников мне видится наиболее оптимальным вариантом по следующим причинам:
1) Вероятная несовместимость с библиотеками уже установленными в системе и с косяками в самом системе.
2) Желающих работать в «службе поддержки» и выяснять вариации пункта 1) на постоянной основе как правило нет. Времени и желания на такое бесполезное (для разработчика) занятие не предвидится.
3) Опубликовал — отвечай. Способность собрать программу самому по чёткой инструкции есть своего рода «вступительный ценз» — если кто–то не способен даже на это — время потраченное на консультирование его определенно уйдёт впустую. Пусть ждет систему пакажей.
4) Система динамично изменяется — несовместимость из пункта 1) может возникнуть уже завтра. Да, мы не даем вам «рыбу», но мы даем вам удочку, чтобы ловить эту «рыбу» тогда когда она вам потребуется.
Так что без обид, парни, хотите плюшек — придется потрудиться.
это понятно.
это понятно. просто лень, да и некогда особо самому собирать ;)
а что, систему пакаджей уже начали писать? вот было бы круто, если бы оно было по типу линуксовых реп (с метапакетами и прочими прелестями). отметил галочкой нужные проги и жмякай «хочу». пакеты сами высосутся и поставятся и за обновлениями и конфликтами софта система будет следить, а не юзер. я из–за этого на линух и ушел с мастдая.
Некогда? Да,
Некогда? Да, времени это отнимет невероятно много — аж цельных 5–10 минут! :)
Пролетало
Пролетало в листах, что кто–то изъявлял желание. Так что может кто–то и пишет.
>1) Вероятная
>1) Вероятная несовместимость с библиотеками уже установленными в системе и с косяками в самом системе.
несовместимость чего с чем? Софта, поставленного из бинарников между собой? Нормальный пакетный менеджер должен это всё разруливать
>2) Желающих работать в «службе поддержки» и выяснять вариации пункта 1) на постоянной основе как правило нет. Времени и желания на такое бесполезное (для разработчика) занятие не предвидится.
возьмём к примеру, Gentoo. «конфигурация системы сборки» = cat /etc/{make.conf,/portage/package.{use,mask,keywords,unmak}} или emerge -–info. Можно поставить «слотовый» ебилд — рядом gcc 4.4.2 и 4.3.4, например, binutils с gold linker и с обычным ld, php4 и php5 и переключаться между ними через gcc–config, binutils–config, и т.п.
Хотя более правильный подход — это система вроде Nix OS, nixpkgs. Пакетный менеджер на функциональном языке программирования, без побочных эффектов — то есть, все конфликты автоматически не допускаются, на уровне дизайна пакетного менеджера. А конфиги, изменяемое состояние, настройки «пакетов» являются логическими-формулами–предикатами в пакетном менеджере, то есть перегенерируются из функциональных программ. То есть, всегда можно откатиться на предыдущее состояние.
Вариант «для бедных», с «палками и верёвками» — поставил хайку из флешки, сделал в корне git init/git add ./ git commit -m initial nightly SVN r /git tag initial — и имеем «версионированную ФС». Я так сделал на чистом разделе — 600М система, 200М папка .git в корне раздела.
Очень пригодилась, когда наткнулся на глюк с шрифтами — копируем папку с .ttf фонтами из винды, потом выбираем красивые и на некоторых шрифтах терминал сворачивается в кучку — неправильно читаются метрики шрифтов. В меню приложений не прорисовывается ни одна надпись, в файрфоксе тоже не видно ни одного шрифта. Соответственно, не можем сменить назад на дефотлные в окошке preferences/fonts — кнопки, меню и комбобоксы не прорисовываются.
фигня вопрос — удаляем /home/ /font settings, и шрифты через git reset HEAD -r initial — и имеем нормальную, «чистую» систему.
>3) Опубликовал отвечай. Способность собрать программу самому по чёткой инструкции есть своего рода «вступительный ценз» если ктото не способен даже на это время потраченное на консультирование его определенно уйдёт впустую. Пусть ждет систему пакажей.
Просьба указывать в таких инструкциях всю информацию, нужную нормальному пакетному менеджеру — версию nightly сборки/gcc/autotools/пакетов/ключей ./configure и CFLAGS, c которыми точно собираются пакеты. Чтобы облегчить пункт 1).
То есть да, инструкция нужна *чёткая*, *конкретная* — что качать, как ставить, каких версий, или не нужна никакая вообще.
>4) Система динамично изменяется несовместимость из пункта 1) может возникнуть уже завтра. Да, мы не даем вам «рыбу», но мы даем вам удочку, чтобы ловить эту «рыбу» тогда когда она вам потребуется.
Ах, как это напоминает грабли в Gentoo при обновлении профиля/тулчейна/мажорных версий софта и замаскированных пакетов. Тоже случаются грабли, тоже время от времени «портедж» ломается в основной ветке. Но, благодаря пониманию и гуглению и общей понятности пакетного менеджера/системы сборки понятно, где сломалось и как починить. Поэтому, когда ломается — не смертельно.
То есть, мне кажется в Хайку имеет смысл портировать нормальный source–based пакетный менеджер вроде emerge/paludis/nixpkgs/pkgbuild из арча и собирать уже им, а не изобретать велосипед.
>1) Вероятная
>1) Вероятная несовместимость с библиотеками уже установленными в системе и с косяками в самом системе.
несовместимость чего с чем? Софта, поставленного из бинарников между собой? Нормальный пакетный менеджер должен это всё разруливать
Так я о том же и говорю. Зачем мне тратить время на разгадывание того, почему у очередного несчастного мой билд не запускается? Мне это занятие совершенно не интересно. ;–) А менеджера пакетов — как я уже несколько раз говорил — в гайке пока нет. В силу этого факта — остается наиболее экономичный (для разработчика) вариант — самосбор.
То есть, мне кажется в Хайку имеет смысл портировать нормальный sourcebased пакетный менеджер вроде emerge/paludis/nixpkgs/pkgbuild из арча и собирать уже им, а не изобретать велосипед.
Возникает резонный вопрос — если их так много, следовательно значительная масса народу каждым из них в отдельности недовольна. Зачем гайке несовершенные решения? Нужно взять все лучшее от каждого и сделать что–то одно. К черту такое «разнообразие» — менеджер пакетов будет работать стабильно лишь тогда когда он будет единственной сущностью обеспечивающей целостность взаимосвязей шареных компонентов.
>Зачем гайке
>Зачем гайке несовершенные решения? Нужно взять все лучшее от каждого и сделать чтото одно
Здесь хотелось бы определить, что значит «несовершенное» решение, и какой в чём лучше. Единообразность полезна, да — но она должна быть правильной, расширяемой. А то можно и SRPM/debsrc притащить, но это ведь полная ерунда по сравнению с вышеупомянутыми, с точки зрения функциональности. Она годится когда процесс уже налажен, но когда идёт самосбор нужно что–то более умелое.
> менеджер пакетов будет работать стабильно лишь тогда когда он будет единственной сущностью обеспечивающей целостность взаимосвязей шареных компонентов.
необязательно. В Paludis, к примеру, есть утилита importare и понятие foreign installed packages. Когда можно взять тот же RPM, или zip, распаковать бинарники и сказать пакетному менеджеру «эти файлы образуют пакет версии x.xx категории yyy-zzz/www–vvv»
В exherbo есть понятие «виртуальный не написанный ещё пакет» — пакета нет, а зависимости отслеживать надо.
То есть, paludis в этом смысле выше на полголовы остальных source–based пакетных менеджеров, — им можно описать зависимости во внешней системе, которых нет среди пакетов. Ну и обычные плюшки source–based — автоматически выкачивать исходники, распаковывать, накладывать патчики, конфигурять с нужными ключами USE–флагами, и т.п.
Да я и имел
Да я и имел ввиду, что нужно взять всё самое лучшее из существующих на данный момент систем. ;–) А смысл моего тезиса о несовершенстве таков — если существует множество вариантов пакет–менеджеров, значит ни один из них не идеален настолько, чтобы занять всю нишу целиком. Специфика решаемой задачи ИМХО позоволяет создать универсальный инструмент для решения этой задачи. Если никто из перечисленного вами зоопарка не съел остальных — значот они все в равной мере слабы. А нам нужен такой «зверь», который пожрёт всех — только и всего. Без вариантов.
Кстати, по поводу портирования линуксятины на гайку можете ещё глянуть на TiltOS — http://tiltos.com/drupal/. Проект ведомый очень самостоятельным польским товарищем. Думаю вам будет с ним о чём поговорить. ;–)
> А смысл моего
> А смысл моего тезиса о несовершенстве таков если существует множество вариантов пакетменеджеров, значит ни один из них не идеален настолько, чтобы занять всю нишу целиком.
ой ли. А с чего бы вдруг решение из одной ниши захотело и осилило забороть решение из другой ниши? На эту тему есть хорошая книжка «Дилемма инноватора», которая объясняет, почему самые лучшие технологии не всегда просто могут выжить и уж совсем необязательно «всех победят». Просто есть disruptive innovation и supportive innovation — одна хочет всех победить и изобретает велосипед, вторая стоит «на плечах гигантов».
вопрос тут не в идеальности какой–то отдельной технологии, а в том, приемлема ли она для этого проекта или нет, и почему, критерии выбора.
> Специфика решаемой задачи ИМХО позоволяет создать универсальный инструмент для решения этой задачи.
можно, согласен. Тысячи их, и каждый по–своему идеален. Вопрос о критериях выбора.
> Если никто из перечисленного вами зоопарка не съел остальных значот они все в равной мере слабы. А нам нужен такой «зверь», который пожрёт всех только и всего. Без вариантов.
такого идеала ждать можно бесконечно долго и ещё дольше, а хочется уже сейчас «вступать & компелировать», и делать это не мучительно больно ручками, а автоматизированно как в той же генте с source–based пакетными менеджерами.
У гайки своя
У гайки своя ниша (пока что) — десктоп. Это уже накладывает ограничения на «размеры» ниши для её пакет–менеджера.
Да и вообще, я не та персона с которой обсуждают такие вопросы. ;–)
> Зачем
> Зачем мне тратить время на разгадывание того, почему у очередного несчастного мой билд не запускается?
потому что если несчастный не накосячил с конфигурацией системы сборки/пакетного менеджера кривыми ручками, а пользуется «официальным» пакетным менеджером/тулчейном/настройками, то у него должен билд запускаться «из коробки». Если не запускается — это косяки тулчейна.
Например, почему не линкуется хелловорд, собранный DMD компилятором, собранном в соседнем топике — ругается на _d_throw@4 символ? Где–то косяк в скриптах линкера.
Когда хайка стала self–hosted, получилось это благодоря портированию кучки софта, определению и исправлению косяков в тулчейне. Сразу получилась отдача — уже можно «вступать & компелировать» .
Если что–то где–то не собирается — значит косяки с системой сборки.
Если есть что–то вроде emerge -–info == конфигурацию системы сборки можно определить автоматически, запостить на pastebin, сравнить с рабочей конфигурацией у другого пользователя, у которого «всё работает», и сделать всё это в полуавтоматическом режиме, с минимальным гаданием — диагностика соберётся автоматически. При этом тебе самому и время–то на гадание не нужно тратить — нужно просто обеспечить чтобы диагностика собиралась автоматом по глючной системе, по рабочей, и дальше сообщество само разрулит, если осилит.
Товарищ!
Товарищ! Вы меня за порты не агитируйте. :–) Я сам тут за них уже десятилетие всех агитирую. :–) И вы вообще читаете что вам пишу или как и я ваши только по первым строчкам? :–D Нету менеджера, а нету менеджера — не будет и скомпиленых моей рукой пакетов. Ждём менеджера.
> Ждём
> Ждём менеджера.
прям как народ ждал доброго царя, барина. Вот придёт барин и всех рассудит :))
А что пробовали из пакетных менеджеров–то, что подошло, что не подошло, и самое главное, почему? Официальным деревом портов пользоваться–то можно/сложно/невозможно? Почему оно не подходит? Какими фичами должен обладать «идеальный менеджер–гайковёрт» с точки зрения простого девелопера с портянками? Почему мы тут ручками компелируем, когда где–то есть пакетные менеджеры, порты и прочие блага цивилизации? :))
Хм. А с какой
Хм. А с какой целью интересуетесь?
А насчёт барина — это вы напрасно, у меня есть список задач и пакетного менеджера в нем нет. Во первых задача объемная и пожрет имеющееся время на многие месяцы вперёд. Во вторых мне эта тема не интересна в силу тривиальности. Я положил, что делать кое что более сложное будет поэффективнее для меня, системы и комьюнити. В третьих некоторое копошение на гайко–портах идёт и приходить туда со своим топором и махать, считаю не совсем корректным. Так что менеджер пакетов я оставляю тем, кто боится драйвера писать. :–)
Менеджер
Менеджер пакетов на Гайке не нужен. Даёшь нормальные либы! Даёшь нормальные проги! Даёшь нормалную Гайку!Вон чего нибудь типа БеОСового SoftwareValet это другое дело.
Стихни!
Стихни! Без пакаж–менеджера не будет тебе нормальных либ. Ибо пакаж–менеджер как раз и призван чтобы пасти эти либы и не давать кривым апликациям обсирать жизнь нормальным программам. А твою возлюбленный Валет и есть зародыш пакаж менеджера.
Этот Валет
Этот Валет красивый и стильный. А зафинтилят какую нибудь скучную аля терминал на двух листах текста зачем ещё один юникс? В Гайке надо найти свой путь гайкувей, и всё же под носом: lib папки разного уровня остаётся только признать, что это есть и применять, а не всё с никсов копировать без разбору. Просто нехочется ещё одной бубунты с совсем этим мусором, где чтоб какую фигню установить
Красивый
Красивый и Стильный, только не умеет ничего, кроме как прогу поставить и записать у себя что она поставлена. А вот элементарно снести её — это уже «не царское дело» для этого Стильного. Повторяю — линукс не в программах — линукс в головах.
Вон такая идея,
Вон такая идея, а не научить Гайку самoй находить нужную версию либы для изпользования? вон как она находит либы собраны с GCC4? a все эти версии (не системные) размещать в common/lib/
И весь пакадж менеджер тогда заключался бы, при отсутствии какой нибудь либы: Гайка отсылала бы на спец сайт, или прямо предлагала скачать и установить оттуда этакую либу (как счас это иногда делается wgetом, при установке некоторых программ). И скажем в common/lib/ ложились только либы с этого официального сайта. Далее, если какому девелоперу нажна какая новая или особеная либа, и он нехочет её добавлять на этот официальный сайт, он её может установить в папку lib своего приложения. Правда, при таком положении становится неясным, зачем нужна папка /home/config/lib для экспериментальных пользовательских либок?
Вы чъи друзья?
Вы чъи друзья? Мои или медведя? (с) Зачем затруднять использование общечеловеческого достояния без особой на то нужды? Ты в курсе, что с винды что–то портировать практически невозможно? Ты хочешь чтобы и на гайку портировать что–то стало невозможно? А ты осознаешь тот факт, что без портированного gcc Гайка даже в том виде в котором она есть сейчас попросту не существовала бы? А вообще, по моему мнению, для всякого рода изобретателей велосипедов, в Аду имеется свой круг для экзекуций. Где–то между обжорами, блядунами и прочими гордецами. За растрату бесценного времени и ресурсов. Так что поосторожнее с идейками.
Непонимаю
Непонимаю в чём проблеммы, что с того плохого, что Гайка умела бы подбирать нужную версию либы? А ресурсы и время по любому будут истрачены. Зачем накладывать лишнюю работу на пользователя? Которая будет ещё и многоразовой.
Ты для начала
Ты для начала свою «рацуху» в мозгу оформи, чтобы её понять можно было — потом обсудим. Есть четкий алгоритм поиска модулей, какая директория просматривается первой, какая второй и т.д. Проблема [потенциальная] в том, что под именем libexpat.so может лежать разное — в т.ч. и линк на либу. А никак не в том, что система не может найти собственно libexpat. Грамотный пакет–менеджер контролирует ситуацию в целом и не допускает до подобных ситуаций. Правда махновщину в стиле drop and run таки придется забыть. И это zaebiste! :–)
Подумай
Подумай сначала, как ты будешь реализовать выбор нужной либы из десяти тысяч, лежащих рядышком в папке common/lib/. Я вот о чём: там (или в подпапках, неважно) будут свалены в кучу сто версий библиотеки SDL, 30 версий библиотеки jpeg, ещё 40 версий библиотеки PNG, восемь версий ещё какой–нибудь библиотеки И у всех разные имена, чтобы их можно было держать в одной папке. Но программам–то на это наплевать, верно? Они ищут библиотеку по имени, а даже не по версии. На основании каких данных ОС должна предоставить программе библиотеку версии А, а не версии Б?
Иногда это можно выяснить на основании косвенных данных: программа обращается к функции, добавленной только в версии 0.3 библиотеки. Тогда понятно, что версии с 0.0.1 до 0.2.9 не нужны. Но как выбрать нужную версию из промежутка 0.3.0 до 1.3.5? А программа использовала какой–то workaround, который работает только в версии 0.4.2, — и, скажем, уничтожает все данные с жёсткого диска в других версиях библиотеки. (Оставим на секунду личность программиста, написавшего такой код). Ещё раз: на основании чего ОС должна решать, какую библиотеку предоставлять программе, если единственное, что знает программа, — это имя библиотеки?
С gcc всё же было проще. ОС знает, в какой версии компилятора была скомпилирована библиотека, и в какой версии компилятора скомпилирована программа, исходя, ЕМНИП, из анализа схемы бинарника.
Отправить комментарий