<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>41509</bug_id>
          
          <creation_ts>2021-12-06 13:41:54 +0300</creation_ts>
          <short_desc>gnupg2: restore setting GPG_TTY in profile.d</short_desc>
          <delta_ts>2021-12-09 02:42:48 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>gnupg2</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="viy">viy</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>legion</cc>
    
    <cc>manowar</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>205763</commentid>
    <comment_count>0</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 13:41:54 +0300</bug_when>
    <thetext>gpg-agent-info и seahorse-agent протухли, поэтому в 2.2.26-alt1 были удалены gnupg-agent.sh и gnupg-agent-wrapper. С gnupg-agent-wrapper все понятно, но у gnupg-agent.sh была еще одна полезная функция, которая, к сожалению, была утеряна с его удалением - установка GPG_TTY.
gpg-agent(1):
...
 You should always add the following lines to your .bashrc  or  whatever
 initialization file is used for all shell invocations:

   GPG_TTY=$(tty)
   export GPG_TTY
...
Поскольку я часто подписываю пакеты на удаленной машине, хотел бы вернуть
автоустановку GPG_TTY

Для этого подготовил патч в 
/people/viy/packages/gnupg2.git

commit db6f87051fe790714cac6806ebda96a9313f6306 (HEAD -&gt; sisyphus, tag: 2.2.32-&gt;
Author: Igor Vlasenko &lt;viy@altlinux.org&gt;
Date:   Mon Dec 6 12:02:27 2021 +0200

    set GPG_TTY in profile.d for gpg-agent

также доступно как task
#291478 FAILED #1 [test-only] sisyphus gnupg2.git=2.2.32-alt1.gnupg-agent
собралось (build Ok), но FAILED sisyphus-check, так как я не менял Release, просто патч к текущему)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205770</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-06 15:02:23 +0300</bug_when>
    <thetext>+if [ -z &quot;${GPG_TTY-}&quot; -a -d &quot;$GNUPGHOME&quot; ]; then
+       GPG_TTY=&quot;$(tty)&quot;; export GPG_TTY
+fi

И после этого gpg-agent будет выводить диалог на этом tty даже если запрос придёт с другого tty.

На мой взгляд гораздо правильнее использовать pinentry, который при запуске бы вычислил активный tty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205771</commentid>
    <comment_count>2</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 15:16:25 +0300</bug_when>
    <thetext>а в консоли на удаленной машине будет работать?

а то я только что обновился на p10, все выглядит сломанным и непривычным,
старые скрипты и привычки с gpg надо закапывать и переходить на gpg2,
пытаюсь разобраться, что теперь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205775</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-06 16:49:01 +0300</bug_when>
    <thetext>(Ответ для viy на комментарий #2)
&gt; а в консоли на удаленной машине будет работать?

Честно сказать не пробовал.

&gt; а то я только что обновился на p10, все выглядит сломанным и непривычным,
&gt; старые скрипты и привычки с gpg надо закапывать и переходить на gpg2,
&gt; пытаюсь разобраться, что теперь.

Давай попробуем придумать способ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205777</commentid>
    <comment_count>4</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 18:00:13 +0300</bug_when>
    <thetext>(Ответ для Alexey Gladkov на комментарий #3)
&gt; &gt; а в консоли на удаленной машине будет работать?
&gt; Честно сказать не пробовал.
&gt; Давай попробуем придумать способ.

Попробовал, действительно не работает. 
Итак, я захожу на удаленную машину. Работаю под tmux.
Есть нюанс, удаленная машина под p9 и там все работает, подписывается, и т.д.
там gnupg2-2.2.19-alt2.x86_64
но думаю, это не принципиально.

Моделирую указанную ситуацию.
1) Сделал
git config --global gpg.program gpg2
теперь
git config --global gpg.program     
gpg2
чтобы исключить gnupg v1.

2)gpgconf --kill gpg-agent
проверил, что
в ps -fu больше нет gpg-agent
убил выставленные старым кривым скриптом переменные
export GPG_AGENT_INFO=
export GPG_TTY=

3)
git tag -s -m 0.027-alt1 0.027-alt1
error: gpg failed to sign the data
error: unable to sign the tag

поймал проблему.

если же делаю 
export GPG_TTY=`tty`
git tag -s -m 0.027-alt1 0.027-alt1
то тут же вылезает ncurses pinentry и все подписывается.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205779</commentid>
    <comment_count>5</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 18:37:26 +0300</bug_when>
    <thetext>Это воспроизвелось и на p10 c gnupg2-2.2.29-alt1.x86_64

Как воспроизвести:
1)
git config --global gpg.program gpg2

иначе git вызовет не gpg2, а gpg из gnupg-1.4.23-alt4.x86_64, 
а gpg умеет в таком случае просто спросить в консоли.

2) CTRL+ALT+3,
залогиниться в текстовую консоль.

3)
unset GPG_TTY
на всякий, если оно было выставлено ранее 

4)
git tag -s -m test test1
error: gpg failed to sign the data
error: unable to sign the tag

если же делаю 
export GPG_TTY=`tty`
то работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205780</commentid>
    <comment_count>6</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 18:41:20 +0300</bug_when>
    <thetext>вместо
git config --global gpg.program gpg2
можно указывать в опции git:

git tag -c gpg.program=gpg2 -s -m test test1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205783</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-06 19:21:59 +0300</bug_when>
    <thetext>Правильно ли я понимаю, что gpg-agent запускается на удалённой машине так же как и сам gpg2 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205784</commentid>
    <comment_count>8</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 20:35:32 +0300</bug_when>
    <thetext>(Ответ для Alexey Gladkov на комментарий #7)
&gt; Правильно ли я понимаю, что gpg-agent запускается на удалённой машине так же
&gt; как и сам gpg2 ?

В комментарии 4
https://bugzilla.altlinux.org/show_bug.cgi?id=41509#c4
там да, там я привел пример с работой на удаленной машине.

В комментариях 5-6 я привел пример на локальной машине, на которой сейчас работаю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205785</commentid>
    <comment_count>9</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 20:37:15 +0300</bug_when>
    <thetext>(Ответ для viy на комментарий #8)
&gt; 
&gt; В комментарии 4
&gt; https://bugzilla.altlinux.org/show_bug.cgi?id=41509#c4
&gt; там да, там я привел пример с работой на удаленной машине.
и там да, gpg-agent запускается на удалённой машине так же как и сам gpg2.

&gt; В комментариях 5-6 я привел пример на локальной машине, на которой сейчас
&gt; работаю.

В них, естественно, gpg-agent и gpg2 работают на локальной машине.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205787</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-06 21:51:36 +0300</bug_when>
    <thetext>А запуск агента на удалённой машине это принципиальное решение ?
Не пробовал прокидывать сокет агента на удалённую машину прокидывать ?

https://wiki.gnupg.org/AgentForwarding

Спрашиваю потому что на локальной машине можно использовать не только ncurses и tty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205788</commentid>
    <comment_count>11</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-06 22:25:18 +0300</bug_when>
    <thetext>(Ответ для Alexey Gladkov на комментарий #10)
&gt; Спрашиваю потому что на локальной машине можно использовать не только
&gt; ncurses и tty.

Мне это нужно не только для себя, но и для работы girar-tools.
Я сидел на p9, и тут мне внезапно начали поступать сообщения, что
в сизифе girar-tools сломаны и не запускают агента как раньше,
автоматически. Задним числом понятно, что это вышел 2.2.26-alt1.

Т.е таких как я не один, и для этого неустановленного числа лиц надо бы
добавить поддержку консоли. 

По поводу прокидывать сокет агента на удалённую машину тема хорошая, я и сам попробую, и потестирую girar-tools. 
Но она не отменяет проблемы с консолью в gpg2. 
К примеру, вряд ли буду прокидывать сокет агента на удалённую машину везде, кроме разве своих домашних машин. Ведь у меня много контейнеров с роботами, в которых свои имена пользователя и свои независимые ключи, и их работу надо подписывать их ключами, не моим.

В принципе, я в основном пользуюсь girar-tools, и могу их захакать, добавив export GPG_TTY внутрь соответствующих утилит.
Это будет работающее для меня решение, но странное.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205789</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-07 00:03:28 +0300</bug_when>
    <thetext>Если вы запускаешь агента там, то даже если экспортировать GPG_TTY как у тебя работает ssh, logout, ssh обратно на эту же машину ?

Агент будет запущен с одним значением GPG_TTY, во второй сессии будет другое значение.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205790</commentid>
    <comment_count>13</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2021-12-07 00:06:10 +0300</bug_when>
    <thetext>(Ответ для Alexey Gladkov на комментарий #10)
&gt; А запуск агента на удалённой машине это принципиальное решение ?
&gt; Не пробовал прокидывать сокет агента на удалённую машину прокидывать ?
&gt; 
&gt; https://wiki.gnupg.org/AgentForwarding

Я так делал, и у меня получалось. Правда, это было на p9.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205791</commentid>
    <comment_count>14</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-07 00:41:59 +0300</bug_when>
    <thetext>(Ответ для Alexey Gladkov на комментарий #12)
&gt; Если вы запускаешь агента там, то даже если экспортировать GPG_TTY как у
&gt; тебя работает ssh, logout, ssh обратно на эту же машину ?
&gt; Агент будет запущен с одним значением GPG_TTY, во второй сессии будет другое
&gt; значение.

Над этим моментом не задумывался.
Действительно, у меня работает. Не знаю почему, возможно, потому что pinentry умный, или еще что-то.

Провел эксперимент. захожу по ssh (на p9)
в gpg-agent.conf указал чтобы пароль быстро тух
default-cache-ttl 2

убил агента gpgconf --kill gpg-agent
запустил агента (в p9)
gpg-connect-agent                
gpg-connect-agent: агент gpg не работает - запускаем &apos;/usr/bin/gpg-agent&apos;
gpg-connect-agent: ожидаю подключения agent ... (5с)
gpg-connect-agent: соединение с agent установлено

tty
/dev/pts/2

запустил еще сессию.
tty
/dev/pts/4
агент старый
 gpg2 --decrypt ~/test.txt.gpg
спросил пароль на /dev/pts/4
(если не уменьшать default-cache-ttl, то агент
просто отдает закешированный пароль).

git tag -s -m test test1           

Необходима фраза-пароль для доступа к секретному ключу пользователя: &quot;Igor Vlasenko &lt;viy@altlinux.org&gt;&quot;
1024-битный ключ DSA, ID 845A2763, создан 2004-09-24

тег появился и подписан:
git show test1:

tag test1
Tagger: Igor Vlasenko &lt;viy@altlinux.org&gt;
Date:   Mon Dec 6 23:21:26 2021 +0200

test
-----BEGIN PGP SIGNATURE-----

iEYEABECAAYFAmGuftYACgkQDX9MpIRaJ2OQ8ACeIXOkXDMJyuUlaULMhFcxhQrw
7GMAoJhEDpaBAjDYFSUszn4Kweoh9jc1
=AXP0
-----END PGP SIGNATURE-----


Надо смотреть исходники, без этого непонятно, почему все работает.
может быть gpg2 передает правильный GPG_TTY агенту?

1 сеанс
echo $GPG_TTY
/dev/pts/2

2 сеанс
echo $GPG_TTY
/dev/pts/4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205792</commentid>
    <comment_count>15</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-07 01:01:22 +0300</bug_when>
    <thetext>(Ответ для viy на комментарий #14)
&gt; Надо смотреть исходники, без этого непонятно, почему все работает.
&gt; может быть gpg2 передает правильный GPG_TTY агенту?

похоже так и есть. посмотрел в исходники,
(см. agent/command.c) там обрабатывается команда OPTION.
и там 
 OPTION ttyname
как раз и переустанавливает GPG_TTY.
там и $DISPLAY перекрывается, и $TERM.

поэтому pinentry выводится не на том терминале, с которого когда-то был запущен
gpg-agent,
а на терминале, на котором реально происходит подписывание с помощью gpg2.
Конечно, при условии, что при логине profile выставляет GPG_TTY.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205835</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-07 17:29:43 +0300</bug_when>
    <thetext>(Ответ для viy на комментарий #15)
&gt; похоже так и есть. посмотрел в исходники,
&gt; (см. agent/command.c) там обрабатывается команда OPTION.
&gt; и там 
&gt;  OPTION ttyname
&gt; как раз и переустанавливает GPG_TTY.
&gt; там и $DISPLAY перекрывается, и $TERM.

Да, действительно.

Я верну gnupg-agent.sh и верну выставление GPG_TTY.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205895</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-09 02:00:47 +0300</bug_when>
    <thetext>Fixed in 2.2.33-alt1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205897</commentid>
    <comment_count>18</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-09 02:17:24 +0300</bug_when>
    <thetext>Благодарю! И в p10 скопируйте, пожалуйста.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205898</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-12-09 02:20:37 +0300</bug_when>
    <thetext>(Ответ для viy на комментарий #18)
&gt; Благодарю! И в p10 скопируйте, пожалуйста.

Это уже не ко мне.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205899</commentid>
    <comment_count>20</comment_count>
    <who name="viy">viy</who>
    <bug_when>2021-12-09 02:42:48 +0300</bug_when>
    <thetext>ок, тогда я отправил.

task #291675: added #100: build tag &quot;2.2.33-alt1&quot; from /gears/g/gnupg2.git
task #291675: try #1 is AWAITING, result will be emailed to viy@altlinux.org</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>