Автор Тема: Отказ запуска spectrum-fuse  (Прочитано 19606 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Отказ запуска spectrum-fuse
« : 26.04.2020 06:40:57 »
В репозиторий p9 положили неработающий пакет spectrum-fuse
Перед отправкой в стабильный репозиторий, rpm пакет не был проверен.
Эмулятор не запустится за отсутствием exec-бита на ELF файле:
$ rpm -qpvl spectrum-fuse-1.5.7-alt1.x86_64.rpm | grep bin/
-rw-r--r--    1 root    root                  1177296 апр  2  2019 /usr/bin/spectrum-fuse

Сложность поиска в том, что сборка плодит каталоги, потом грохает их и файлы бесследно исчезают.
Ошибка была найдена принудительным остановом сборки по ошибке с подменой кода spec-скриптов, то того, как эти файлы исчезнут.

В процессе сборки пакета, исполняемый ELF файл существует в двух ипостасях, в ~/RPM/BUILD/ и в
# ll /tmp/.private/builder/spectrum-fuse-buildroot/tmp/.private/builder/spectrum-fuse-buildroot/usr/bin/spectrum-fuse
-rwxr-xr-x 1 builder builder 1181392 апр 26 04:23 /tmp/.private/builder/spectrum-fuse-buildroot/tmp/.private/builder/spectrum-fuse-buildroot/usr/bin/spectrum-fuse

Но в процессе сборки пакета, именно этот файл без exec бита попал в rpm пакет репозитория p9/branch
# ll /tmp/.private/builder/spectrum-fuse-buildroot/usr/bin/spectrum-fuse
-rw-r--r-- 1 builder builder 1181392 апр 26 04:23 /tmp/.private/builder/spectrum-fuse-buildroot/usr/bin/spectrum-fuse


fix:
возможно он некрасивый, костыльный, а возможно он совсем, ну вы поняли, но по крайней мере он исправляет ошибку отказа запуска
(исправление в spectrum-fuse.bak1.spec)
$ diff ~/RPM/SPECS/spectrum-fuse.spec ~/RPM/SPECS/spectrum-fuse.bak1.spec
58c58
< find %buildroot%buildroot -type f | while read f; do nf=$(sed "s|%buildroot||" <<< "$f"); echo "== $nf"; install -D -m 644 "$f" "$nf"; rm -f "$f"; done
---
> find %buildroot%buildroot -type f | while read f; do nf=$(sed "s|%buildroot||" <<< "$f"); echo "== $nf"; install -D -m 644 "$f" "$nf"; install -pm0755 %buildroot/%buildroot/%_bindir/%name %buildroot/%_bindir/%name; rm -f "$f"; done

Мысль состояла в том, чтобы проинсталлировать ELF из %buildroot/%buildroot/%_bindir/%name в каталог сборки с уже установленным битом выполнения на ELF, до того как файл исчезнет
# ll /tmp/.private/builder/spectrum-fuse-buildroot/tmp/.private/builder/spectrum-fuse-buildroot/usr/bin/
итого 0
drwxr-xr-x 2 builder builder 40 апр 26 06:35 ./
drwxr-xr-x 4 builder builder 80 апр 26 06:35 ../
Чтобы исполняемый ELF попал в rpm пакет.

Но в этом фиксе ест крупный недостаток:
Здесь не отслежено и не устранено то, что заставляло другой невыполняемый ELF попасть в rpm пакет.


После этого исправления, rpm пакет собирается уже с exec битом на файле
$ rpm -qpvl ./RPM/RPMS/x86_64/spectrum-fuse-1.5.7-alt1.x86_64.rpm | grep bin/
-rwxr-xr-x    1 root    root                  1181392 апр 26 05:34 /usr/bin/spectrum-fuse

и ручного подпирания костылём через chmod не требует.

Фикс исправляет ошибку #38352
« Последнее редактирование: 26.04.2020 09:20:40 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #1 : 26.04.2020 09:16:17 »
Всё запускается и работает:
$ rpm -q spectrum-fuse
spectrum-fuse-1.5.7-alt2.x86_64
$ rpm -qvl spectrum-fuse | grep bin/
-rwxr-xr-x    1 root    root                  1181392 апр 26 08:00 /usr/bin/spectrum-fuse


Требуется запуск через aoss
$ cat ~/.local/share/applications/localmenu-spectrum-fuse.desktop
[Desktop Entry]
Version=1.1
Type=Application
Name=Spectrum-fuse
Comment=ZX Spectrum emulator
Icon=/usr/share/icons/hicolor/16x16/apps/spectrum-fuse.png
Exec=aoss /usr/bin/spectrum-fuse
Actions=
Categories=Game;

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #2 : 26.04.2020 23:49:38 »
В принципе, фикс можно делать не через install, а через chmod:
Секция %makeinstall отличается от оригиального спэка, только строкой 'chmod 755 %buildroot/%_bindir/%name'
$ sed -n '49,64p' ~/RPM/SPECS/spectrum-fuse.bak3.spec

%install
export DESTDIR=%buildroot
%makeinstall
install -D -m 0644 %buildroot/%buildroot/%_man1dir/fuse.1 %buildroot/%_man1dir/spectrum-fuse.1
rm %buildroot/%buildroot/%_man1dir/fuse.1
cp -ra %buildroot/%buildroot/%_bindir %buildroot/usr/
mv %buildroot/%_desktopdir/%oname.desktop  %buildroot%_desktopdir/%name.desktop
mv %buildroot/usr/share/mime/packages/fuse.xml %buildroot/usr/share/mime/packages/spectrum-fuse.xml
find %buildroot%buildroot -type f | while read f; do nf=$(sed "s|%buildroot||" <<< "$f"); echo "== $nf"; install -D -m 644 "$f" "$nf"; rm -f "$f"; done
find %buildroot -name 'fuse.png' -type f | while read f; do nf=$(sed "s|fuse.png|spectrum-fuse.png|" <<< "$f"); echo "== $nf"; install -D -m 644 "$f" "$nf"; rm -f "$f"; done

chmod 755 %buildroot/%_bindir/%name

install -pm0644 %{SOURCE3} .


chmod вернёт spectrum-fuse права на запуск и rpm пакет станет корректным
$ rpm -qpvl ~/RPM/RPMS/x86_64/spectrum-fuse-1.5.7-alt4.x86_64.rpm | grep bin/
-rwxr-xr-x    1 root    root                  1181392 апр 26 23:33 /usr/bin/spectrum-fuse


Суть ошибки в оригинальном спэке:
Из %buildroot%buildroot файлы поиском через цикл загонятся в список. Затем из списка файлы инсталлируются с правами 644. Само-собой и исполняемый ELF spectrum-fuse в оригинальном пакете стал неисполняемым. chmod фиксом отдельной строкой, вернёт spectrum-fuse права на запуск.


Локально пересобрать пакет spectrum-fuse можно так:
https://www.altlinux.org/Инструкция_по_сборке_пакетов_с_помощью_rpm
Сборку выполнять пользователем builder, у которого права ограничены до предела.
Перед сборкой пакета, повысить номер релиза в spec-файле, чтобы пакет своей сборки с исправлением ошибки, на 'apt-get install путь_к_пакету' стал более приоритетным чем пакет репозитория. Лог сборки rpm пакетов, завершается выводом полных путей к собранным rpm пакетам. Также перед сборкой rpm пакета можно временно сменить и hostname, чтобы оно не светилось в Build Host rpm пакета.
« Последнее редактирование: 27.04.2020 00:53:06 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #3 : 29.04.2020 11:34:19 »
На багтрекер отправлен метод быстрого исправления:
https://bugzilla.altlinux.org/show_bug.cgi?id=38352#c1
Цитировать
Эта часть строки

install -D -m 644 "$f" "$nf"

в цикле while read f; ...; done, строки 58 в spectrum-fuse.spec

# sed -n '58p' /home/builder/RPM/SPECS/spectrum-fuse.spec
find %buildroot%buildroot -type f | while read f; do nf=$(sed "s|%buildroot||" <<< "$f"); echo "== $nf"; install -D -m 644 "$f" "$nf"; rm -f "$f"; done

ломает у ELF -а spectrum-fuse права на запуск.


Быстрое исправление отказа запуска spectrum-fuse:

В spectrum-fuse.spec пакета spectrum-fuse-1.5.7-alt1, в секции %makeinstall после строки 58 спэка, добавить строку:

chmod 755 %buildroot/%_bindir/%name

Пересобрать пакет spectrum-fuse.
Или добавть строку с chmod в конец секции %makeinstall спэка spectrum-fuse.spec.

Строка вернёт исполняемому ELF -у права на запуск.

Ждём реакции и результатов.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #4 : 30.04.2020 17:24:03 »
Исправленные пакеты:
(exec на месте, changelog не правился)
$ rpm -qpivl ~/RPM/RPMS/x86_64/spectrum-fuse-1.5.7-alt2.x86_64.rpm | head -n 22
Name        : spectrum-fuse
Version     : 1.5.7
Release     : alt2
Architecture: x86_64
Install Date: (not installed)
Group       : Emulators
Size        : 1816750
License     : GPLv2
Signature   : (none)
Source RPM  : spectrum-fuse-1.5.7-alt2.src.rpm
Build Date  : Пн 27 апр 2020 00:45:05
Build Host  : blackhole
Relocations : (not relocatable)
Packager    : ZX Spectrum Development Team <spectrum@packages.altlinux.org>
Vendor      : ALT Linux Team
URL         : http://fuse-emulator.sourceforge.net/
Summary     : The Free Unix Spectrum Emulator
Description :
Fuse is a Sinclair ZX Spectrum emulator. It supports several models
(including the 128), with quite faithful emulation of the display
and sound.
-rwxr-xr-x    1 root    root                  1181392 апр 27 00:44 /usr/bin/spectrum-fuse

md5sum
90ced08c47e65b2737b6e184ff2ddd43  spectrum-fuse-1.5.7-alt2.src.rpm
4b81da1de06c3c68800d11c366688ee1  spectrum-fuse-1.5.7-alt2.x86_64.rpm

Оффлайн kostyalamer

  • Мастер
  • ***
  • Сообщений: 432
    • Сайт клуба активных пользователей ALT Linux
Re: Отказ запуска spectrum-fuse
« Ответ #5 : 30.04.2020 18:56:09 »
Юра , может в клубные репы отправить ?
Archlinux  / Altlinux Free Mate p8

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #6 : 02.05.2020 08:15:44 »
Юра , может в клубные репы отправить ?

Спасибо,  Костя. Спектрумист спектрумисту всегда поможет. И извини за запоздалый ответ.

У меня тут такие мысли витают:
- spectrum-fuse без trdos.rom почти бесполезная вещь, а на virtual trdos навалом scl и trdos образов. Их никто никогда не считал и их точно несколько тысяч. Вроде бы было когда-то тысяч шесть, но это было давно и их количество продолжает расти. Ложить в пакет только trdos.rom не вариант: линуксоиды выбросы терминала в картинках выбрасывают, а про адреса инициализации тут вообще никто не слышал. Как частность команда с адресом инициализации trdos. Для спектрмиста это нормально, но тут это начнёт выносить мозг.

- Насчёт rom-ов под Scorpion ZS-256 я в сомнении: rom-ы ZS-256, это разработка питерской компании Scorpion Сергея Зонова (ZS - Зонов Сергей). И как там на предмет легальности, кто его знает. Я не в курсе. Но у федороделов это когда-то лежало полным комплектом в одном пакете:
https://forum.altlinux.org/index.php?topic=36337.msg305985#msg305985
Но вообще федоровый пакет со всеми ROM-ами под spectrum-fuse идёт под лицензией Distributable. Т.е. если считать все ROM-ы, то не хватает восемь ROM-ов.
В сам spectrum-fuse ROM-ы Скорпа и Пента не входят. Но и на западе Beta Disk Interface большого распространения не получил.

- gluck.rom, это разработка MrGluck. Он нужен под Pentagon-512 и Pentagon-1024. Но в Спэке память выше 256 кило нужно скорее под RAM-диск и RAM-диск iS-DOS (с RAM-диска iS-DOS будет работать быстрее, чем Core-i9 с hdd).

- Pentagon-128. Под демопати это классика. У пентагона короткие INT-ы. Под него надо только три ROM-а: 128p-0.rom 128p-1.rom trdos.rom.

Лирический эпилог:
   Без trdos.rom, это только эмуляция загрузки с магнитофона. И даже для Спектрума, это "позапрошлый век". К тому же весь продвинутый софт на Спэке под trdos. Для эмуляторов в scl и trd образах. Включая такую крутую вещь как ADS. Аналогов которой, я для PC-юка никогда не видел. Под ADS головки юстировал по эталону. Ладно, проехали, это уже совсем лирика.
   Последний spectrum-fuse в котором были ROM-ы trdos Пентагона и Скорпион, был в p6/branch. В последующих версиях начиная с p7/branch эти rom-ы исчезли из эмулятора. В исходниках, версия 1.0.0.1 была последней в которой эти rom-ы были. Начиная с 1.0.0.1a их уже не было. Нет, я понимаю конечно, опенсорс, прогресс, всё такое, но зачем делать хуже? Этим "убиранием" из эмулятора как минимум rom-а trdos.rom, линуксоиды безнадёжно испортили эмулятор.
   Единственное объяснение у меня этому:
На западе популярны были Timex. К ним можно было подключить внешнюю периферию, - например Timex FDD 3000. Софтово поддерживались Timex Operation System (TOS A.2) и CP/M 2.2. Но Timex FDD это как второй компьютер. На всей территории x-ussr был популярен Beta Disk Interface Beta 128. Из-за своей простоты и дешевизны изготовления. Ценовая разница более чем 10-тикратная. TOS в x-ussr была неизвестна, CP/M малопопулярна с мизерным количеством ПО.
   В сам текущий spectrum-fuse ROM-ы TR DOS, Скорпа и Пента не входят. На западе Beta Disk Interface большого распространения не получил. В x-ussr всё качественное ПО было написано или адаптировано под TR DOS. И количество его столь огромно, что даже приблизительно этого не знает никто.


Вердикт как ИМХО:
В текущей комплектации, spectrum-fuse пригоден разве что для загрузки образов с WoS (World of Spectrum) и для загрузки образов дискет в *.trd совершенно непригоден. Для полного функционала его нужно добивать rom-ами 128p-0.rom, 128p-1.rom, gluck.rom, trdos.rom (Pentagon 128/512/1024), 256s-0.rom, 256s-1.rom, 256s-2.rom, 256s-3.rom (Scorpion ZS-256). Или минимально trdos.rom (потребуется вручную командой инициализация TR DOS). Или при опциональном выборе через меню, для поддержки Pentagon 128: 128p-0.rom, 128p-1.rom, trdos.rom.
   Предварительной сборкой можно в клубную репу собрать этот пакет spectrum-fuse-1.5.7-alt2.src.rpm. По крайней мере он хотя бы запускается без подпирания chmod-овым костылём. Ждать же багфикса на трекере, бесполезно. Там в багрепорте и ошибка указана, и фикс по-быстрому, но всё глухо и движухи никакой. Здесь нужно смотреть на вещи реально: альты эту ошибку отказа запуска программы чинить не будут. Ни в сизифе, ни в бранче. Так что надо отправлять в клубную, а там видно будет.

Оффлайн kostyalamer

  • Мастер
  • ***
  • Сообщений: 432
    • Сайт клуба активных пользователей ALT Linux
Re: Отказ запуска spectrum-fuse
« Ответ #7 : 02.05.2020 09:31:40 »
Юра , завтра вечером сделаю ( сейчас не дома )  . По поводу rom , может быть взять твой пакет с ними, выкинуть оттуда rom-ы от Scorpion-а ( все равно чисто под них программ не очень много ) и собрать его в таком виде ? Можно прописать зависимость на него в spectrum-fuse и тогда пользователь сразу получит готовый к употреблению эмулятор. Ну и версию на фузю сделать не убиваемую альтовскими обновлениями, как я в свое время сделал с испорченным товарищем Карлосом WindowMaker - ом.
Archlinux  / Altlinux Free Mate p8

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #8 : 02.05.2020 10:24:46 »
Да, подходяще.

Достоинство Скорпа, это GMX и SMUC-контроллер. Под GMX софта копейки. А HDD и не нужен. К тому же если мне не изменяет память, На HDD Скорпа хранились образы дискет.
Не вижу большого смысла и в gluck.rom (Pentagon 512, Pentagon 1024). RAM-диск-то нам зачем? Дискету Double Dencity в него грузить?
На мой сугубо личный взгляд, трёх rom-ов 128p-0.rom 128p-1.rom trdos.rom для поддержки Pentagon 128 вполне достаточно:
На Спектруме было негласное правило: софт обязан работать на 128 килобайт памяти. Нехватка памяти для программы, это проблема не пользователя, а программиста, сделай код виртуозным. Поэтому почти всё ПО под TR DOS работало на Pentagon 128. Да и вообще на любом Spectrum 128 с Beta 128 диск интерфейсом и в довесок с AY чипом под многоканальный звук. Поэтому на мой взгляд, Pentagon 128, в подавляющем большинстве случаев, это самодостаточная машинка.

Оффлайн kostyalamer

  • Мастер
  • ***
  • Сообщений: 432
    • Сайт клуба активных пользователей ALT Linux
Re: Отказ запуска spectrum-fuse
« Ответ #9 : 02.05.2020 12:43:25 »
Поставил из aur-а прямо в ледяной. В арче есть скорпионовский rom никого эта проблема не волнует.
скрин в прицепе. Но как сделаешь так и будет . Завтра вечером займемся .
Archlinux  / Altlinux Free Mate p8

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #10 : 02.05.2020 15:17:13 »
Поставил из aur-а прямо в ледяной. В арче есть скорпионовский rom никого эта проблема не волнует.
скрин в прицепе.

OK. Тогда и париться не стоит. Все их как-нибудь потом назад в эмулятор затолкать.

Потенциально можно ещё поискать rom NeOS. Автор его свободно распространял всем желающим. Навёрнутая ОСь. Ничего подобного раньше не было на спэке. Про неё когда-то писали в спектрумовских электронных журналах. Что-то в архивах можно найти на zxpress.ru про NeOS.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #11 : 03.05.2020 16:06:47 »
Но как сделаешь так и будет . Завтра вечером займемся .

Сделал:
- Релиз остался тот же, - alt2.
- Исправлена ошибка отказа запуска.
- В пакет добавлены rom-ы Пента и Скорпа.
- Ченджлог не правился.

Всё работает из коробки.

Оффлайн kostyalamer

  • Мастер
  • ***
  • Сообщений: 432
    • Сайт клуба активных пользователей ALT Linux
Re: Отказ запуска spectrum-fuse
« Ответ #12 : 03.05.2020 17:20:58 »
Юра, залил в p9 32 бита , проверил все работает !
Кстати в Арче хоть и есть соответствующие пункты загрузки но скорпионовских и пентагоновских ромов в пакете нет( и соответственно TR-DOS а ). Забыл вчера написать так как пока разбирался со всем этим завел потестировать старый добрый Boulder Dash и скоротал вечерок за этим делом.
Так что у нас в клубной репе фузя круче  ;-) . Если будут вопросы можно задать встречные сколько товарищи заплатили сэру Клайву за его прошивку ПЗУ  ;-D
Попросил Ивана собрать в p9 64.
PS В fbzx из коробки есть 128 rom с TR-DOS так что с этим тоже проблем не вижу.
 
Archlinux  / Altlinux Free Mate p8

Оффлайн kostyalamer

  • Мастер
  • ***
  • Сообщений: 432
    • Сайт клуба активных пользователей ALT Linux
Re: Отказ запуска spectrum-fuse
« Ответ #13 : 03.05.2020 18:39:18 »
Юра , вот еще очень интересный эмулятор Спектрума :
https://aur.archlinux.org/packages/unreal-speccy-portable
Может быть тебе пригодится для портирования под Альт.
Работает как под X-сами так и в чистой консоли ( через фреймбуффер ) , 128 с TR-DOS - ом из коробки , встроенная возможность грузить программы из сети. Если будешь смотреть то все настройки вызываются по Esc ( особенно полноэкранка без сглаживания радует ).
Однозначно пойдет в Ледяной , но может и тебя заинтересует  :-)
Archlinux  / Altlinux Free Mate p8

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #14 : 03.05.2020 18:55:57 »
можно задать встречные сколько товарищи заплатили сэру Клайву за его прошивку ПЗУ  ;-D

Не стану рассуждать про тех товарищей, зато порассуждаю про Amstrad:
Amstrad уроды и их надо повесить за то место, которое у них болтается в штанах. Именно Amstrad и убила Спектрум. Треть всех домашних компьютеров, которые были на рынке, это ZX Spectrum, а Amstrad прекращает их выпуск, надеясь перетащить спектрумистов на CPC. В 1984-ом выходит Beta Interface (Beta 128 в 87-ом), но в 87-ом Amstrad выпускает ZX Spectrum +2A с лентотягой в корпусе (я такой могу в руках подержать). Но только дебил мог додуматься до лентотяги, которая умирала (в 92-ом, когда Спектрумы только-только поднимались в x-ussr, у меня уже стоял чистокровный японец Teac 5.25" за 42 бакса. Их тогда выпускали японцы, а не китайцы. Дисковод абсолютно тихий, не то что другие "тракторы".). А на Спектрум Amstrad-у было насрать. В результате она похоронила и Спектрум и себя.
Эти дебилы из Amstrad, до самого своего конца так и не смогли понять, что Спектрум, это не просто компьютер, это платформа для творчества. А не по клавишам потыцькать и спрайты по экрану погонять.

Но Спектрум всё ещё жив:
В Британии небольшими партиями выходит ZX Spectrum Next на современных комплектующих. В зависимости от комплектации, цена доходит до 275 фунтов в полной комплектации и народ берёт, - в комплекте поддержка HDMI, флеш-карт, wifi и всё такое. Разработчики деньги собрали ещё до выпуска. Дизайн классный. Дизайн от Рика Дикинсона, - оригинального разработчика Sinclair Research. Писали, пару лет назад он умер. Рак. Очень жаль.
« Последнее редактирование: 03.05.2020 19:12:28 от Speccyfighter »