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

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

    <bug>
          <bug_id>3659</bug_id>
          
          <creation_ts>2004-02-10 20:05:13 +0300</creation_ts>
          <short_desc>snmpd перестал читать сведения из /proc после апгрейда на kernel-image-std-up-2.4.22-alt16</short_desc>
          <delta_ts>2006-08-30 11:28:58 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>net-snmp</component>
          <version>unstable</version>
          <rep_platform>all</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>P2</priority>
          <bug_severity>blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrei Bulava">abulava</reporter>
          <assigned_to name="Kostya Timoshenko">kt</assigned_to>
          <cc>grenka</cc>
    
    <cc>ldv</cc>
    
    <cc>pilot</cc>
    
    <cc>shaba</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>11712</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Bulava">abulava</who>
    <bug_when>2004-02-10 20:05:14 +0300</bug_when>
    <thetext>У меня настроен mrtg на получение данных об eth0 от локального snmpd. До
апргрейда ядра на kernel-image-std-up-2.4.22-alt16 проблем не было. В новой
сборке ядра имеет место restricted /proc access. Очевидное решение включить
пользователя snmp в группу proc не даёт желаемого результата: после запуска
snmpd из инит-скриптов при старте системы всё равно у snmpd не получается читать
данные из /proc. Но (!) после выполнения service snmpd restart всё нормализуется
- до следующей перезагрузки.

Steps to Reproduce:
1. установить net-snmp &amp; mrtg
2. настроить (запустить cfgmaker) mrtg на получение данных об eth0 

Actual Results:  
В /var/log/messages при каждом запуске mrtg по cron:

Feb 10 18:55:00 adelaide crond[1354]: (root) CMD (/usr/bin/mrtg --user mrtg
--group mrtg /etc/mrtg/mrtg-eth0.cfg)
Feb 10 18:55:00 adelaide crond[1355]: (root) CMD (/usr/bin/mrtg --user mrtg
--group mrtg /etc/mrtg/mrtg.cfg)
Feb 10 18:55:04 adelaide syslog[861]: Connection from 127.0.0.1
Feb 10 18:55:04 adelaide syslog[861]: Received SNMP packet(s) from 127.0.0.1
Feb 10 18:55:04 adelaide syslog[861]: Connection from 127.0.0.1
Feb 10 18:55:04 adelaide syslog[861]: cannot open /proc/net/dev - continuing...
Feb 10 18:55:04 adelaide last message repeated 20 times
Feb 10 18:55:04 adelaide syslog[861]: snmpd: Cannot open /proc/net/arp
Feb 10 18:55:04 adelaide last message repeated 2 times
Feb 10 18:55:04 adelaide syslog[861]: Connection from 127.0.0.1
Feb 10 18:55:04 adelaide syslog[861]: cannot open /proc/net/dev - continuing...
Feb 10 18:55:04 adelaide last message repeated 19 times
Feb 10 18:55:04 adelaide syslog[861]: snmpd: Cannot open /proc/net/arp
Feb 10 18:55:04 adelaide last message repeated 2 times
Feb 10 18:55:04 adelaide syslog[861]: Connection from 127.0.0.1
Feb 10 18:55:04 adelaide last message repeated 3 times
Feb 10 18:55:04 adelaide syslog[861]: cannot open /proc/net/dev - continuing...
Feb 10 18:55:04 adelaide last message repeated 16 times
Feb 10 18:55:04 adelaide syslog[861]: snmpd: Cannot open /proc/net/arp
Feb 10 18:55:04 adelaide last message repeated 2 times


Expected Results:  
нормальная работа snmpd, которую удаётся восстановить только ручным рестартом.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12885</commentid>
    <comment_count>1</comment_count>
    <who name="Andrei Bulava">abulava</who>
    <bug_when>2004-04-21 09:39:52 +0400</bug_when>
    <thetext>Система: ALT Linux Sisyphus (20040415)

$ id snmp
uid=112(snmp) gid=100(users) группы=100(users),19(proc)

$ rpm -qv net-snmp
net-snmp-5.1-alt3

После старта системы имею в /var/log/messages:

Apr 20 20:50:00 adelaide crond[7276]: (root) CMD (/usr/bin/mrtg --user mrtg
--group mrtg /etc/mrtg/mrtg-eth0.cfg) 
Apr 20 20:50:00 adelaide crond[7277]: (root) CMD (/usr/bin/mrtg --user mrtg
--group mrtg /etc/mrtg/mrtg.cfg) 
Apr 20 20:50:02 adelaide snmpd: Connection from 127.0.0.1 
Apr 20 20:50:02 adelaide snmpd: Connection from 127.0.0.1 
Apr 20 20:50:02 adelaide snmpd: cannot open /proc/net/dev - continuing... 
Apr 20 20:50:02 adelaide last message repeated 20 times
Apr 20 20:50:02 adelaide snmpd: snmpd: Cannot open /proc/net/arp 
Apr 20 20:50:02 adelaide last message repeated 2 times
Apr 20 20:50:02 adelaide snmpd: Connection from 127.0.0.1 
Apr 20 20:50:02 adelaide snmpd: cannot open /proc/net/dev - continuing... 
Apr 20 20:50:02 adelaide last message repeated 19 times
Apr 20 20:50:02 adelaide snmpd: snmpd: Cannot open /proc/net/arp 
Apr 20 20:50:02 adelaide last message repeated 2 times
Apr 20 20:50:02 adelaide snmpd: Connection from 127.0.0.1 
Apr 20 20:50:03 adelaide last message repeated 3 times
Apr 20 20:50:03 adelaide snmpd: cannot open /proc/net/dev - continuing... 
Apr 20 20:50:03 adelaide last message repeated 16 times
Apr 20 20:50:03 adelaide snmpd: snmpd: Cannot open /proc/net/arp 
Apr 20 20:50:03 adelaide last message repeated 2 times

Затем в адрес root приходит сообщение:

Date: Tue, 20 Apr 2004 20:50:03 +0300 (EEST)
From: Cron Daemon &lt;root@adelaide.office&gt;
To: root@adelaide.office
Subject: Cron &lt;root@adelaide&gt; /usr/bin/mrtg --user mrtg --group mrtg
/etc/mrtg/mrtg-eth0.cfg

WARNING: Could not match host:&apos;public@localhost:&apos; ref:&apos;Descr&apos; key:&apos;eth0&apos;
ERROR: Target[localhost_eth0][_IN_] &apos; $target-&gt;[0]{$mode} &apos; did not eval into
defined data
ERROR: Target[localhost_eth0][_OUT_] &apos; $target-&gt;[0]{$mode} &apos; did not eval into
defined data

Тут же перезапускаю snmpd (service snmpd restart) и в /var/log/messages:

Apr 20 20:52:48 adelaide snmpd: Received TERM or STOP signal...  shutting down... 
Apr 20 20:52:49 adelaide snmpd: snmpd shutdown succeeded
Apr 20 20:52:49 adelaide snmpd: snmpd startup succeeded
Apr 20 20:52:50 adelaide snmpd: NET-SNMP version 5.1 
Apr 20 20:55:00 adelaide crond[7487]: (root) CMD (/usr/bin/mrtg --user mrtg
--group mrtg /etc/mrtg/mrtg-eth0.cfg) 
Apr 20 20:55:00 adelaide crond[7488]: (root) CMD (/usr/bin/mrtg --user mrtg
--group mrtg /etc/mrtg/mrtg.cfg) 
Apr 20 20:55:02 adelaide snmpd: Connection from 127.0.0.1 
Apr 20 20:55:02 adelaide snmpd: Received SNMP packet(s) from 127.0.0.1 
Apr 20 20:55:02 adelaide snmpd: Connection from 127.0.0.1 
Apr 20 20:55:02 adelaide last message repeated 12 times

Сообщения от cron прекращаются, mrtg начинает давать показания.

Т.е. налицо восстановление работоспособности snmpd. Но только до следующей
перезагрузки. После перезагрузки картина повторяется с вероятностью 100%.

Судя по тому, что до этого основной группой псевдопользователя snmp была
gid=100(users), я решил, что на самом деле такая основная группа практически
не играет какой-то специальной роли.

Поэтому проблему удаётся решить с помощью комплекса из 2-х неотрывных друг от
друга мер:

1) модифицировать псевдопользователя snmp т.о., чтобы

$ id snmp
uid=112(snmp) gid=19(proc) группы=19(proc)

Для этого понадобится модифицировать spec-файл net-snmp, чтобы вторая строчка
%post выглядела как

/usr/sbin/usermod -g proc snmp &amp;&gt;/dev/null ||:

2) модифицировать /etc/init.d/snmpd наложением нижеследующего патча:

--- /etc/init.d/snmpd.DISTRO    2004-02-18 15:35:09 +0200
+++ /etc/init.d/snmpd   2004-04-20 21:24:19 +0300
@@ -14,7 +14,7 @@
 # Source function library.
 . /etc/init.d/functions
 
-OPTIONS=&quot;-Ls DAEMON -Lf /dev/null -p /var/run/snmpd.pid -a -u `getuseruid snmp`&quot;
+OPTIONS=&quot;-Ls DAEMON -Lf /dev/null -p /var/run/snmpd.pid -a -u `getuseruid snmp`
-g `id -g snmp`&quot;
 PIDFILE=/var/run/snmpd.pid
 LOCKFILE=/var/lock/subsys/snmpd
 RETVAL=0
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12886</commentid>
    <comment_count>2</comment_count>
      <attachid>393</attachid>
    <who name="Andrei Bulava">abulava</who>
    <bug_when>2004-04-21 09:44:49 +0400</bug_when>
    <thetext>Created attachment 393
Патч к /etc/init.d/snmpd

В Additional Comment #1 From Andrei Bulava  2004-04-21 09:39 предлагаемый мною
патч приведён в неудобном виде, поэтому прилагаю его отдельно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12895</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2004-04-21 21:34:03 +0400</bug_when>
    <thetext>Предлагаю пропатчить на тему использования initgroups(3). </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12930</commentid>
    <comment_count>4</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2004-04-22 10:26:37 +0400</bug_when>
    <thetext>С ldv согласен, именно это и является правильным. Хороший пример как это
делается --- apache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13242</commentid>
    <comment_count>5</comment_count>
    <who name="Andrei Bulava">abulava</who>
    <bug_when>2004-05-04 12:52:06 +0400</bug_when>
    <thetext>В i/D/ ушёл:

51e642b0a1c2e6ee43346309818f44da  net-snmp-5.1.1-alt1.1.src.rpm

$ rpm -qp --lastchange net-snmp-5.1.1-alt1.1.src.rpm
* Пнд Май 03 2004 Andrei Bulava &lt;abulava@altlinux.ru&gt; 5.1.1-alt1.1

- added &apos;initgroups&apos; patch to use all groups of which &apos;snmp&apos; user
  was a member
- fixed init script &amp; postinstall script to rollback changes which
  worked around lack of the initgroups function call in snmpd

Патч достаточно прямолинейный: добавляет инициализацию списка вспомогательных
групп путём вызова initgroups(3) (спасибо ldv@ и pilot@). Повторить все тонкости
аналогичного места в apache (в части кроссплатформенности) - такой цели я не
ставил. Тем не менее, и в таком виде патч, хочется верить, не вызовет отторжение
у upstream ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14635</commentid>
    <comment_count>6</comment_count>
    <who name="inger@altlinux.org">inger</who>
    <bug_when>2004-06-03 17:22:44 +0400</bug_when>
    <thetext>как я понял этот пакет уже в Сизифе 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14665</commentid>
    <comment_count>7</comment_count>
    <who name="Andrei Bulava">abulava</who>
    <bug_when>2004-06-03 19:16:55 +0400</bug_when>
    <thetext>(In reply to comment #6)
&gt; как я понял этот пакет уже в Сизифе 
&gt;  

Да, в Сизифе пакет с исправлением, предложенным в comment #1.

Идеологически более правильный вариант исправления, описанный в comment #5,
остался в Daedalus и в настоящий момент не ставится на систему с Sisyphus (после
пересборки Сизифа с новым openssl).

На своём тестовом стенде я использую самую свежую Сизифную версию, баг закрыт.
Жаль только, если правильный патч так и не дойдёт до upstream :-(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393</attachid>
            <date>2004-04-21 09:44:49 +0400</date>
            <delta_ts>2004-04-21 09:44:49 +0400</delta_ts>
            <desc>Патч к /etc/init.d/snmpd</desc>
            <filename>proposed_snmpd_init.patch</filename>
            <type>text/plain</type>
            <size>432</size>
            <attacher name="Andrei Bulava">abulava</attacher>
            
              <data encoding="base64">LS0tIC9ldGMvaW5pdC5kL3NubXBkLkRJU1RSTyAgICAyMDA0LTAyLTE4IDE1OjM1OjA5ICswMjAw
CisrKyAvZXRjL2luaXQuZC9zbm1wZCAgIDIwMDQtMDQtMjAgMjE6MjQ6MTkgKzAzMDAKQEAgLTE0
LDcgKzE0LDcgQEAKICMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCiAuIC9ldGMvaW5pdC5kL2Z1
bmN0aW9ucwogCi1PUFRJT05TPSItTHMgREFFTU9OIC1MZiAvZGV2L251bGwgLXAgL3Zhci9ydW4v
c25tcGQucGlkIC1hIC11IGBnZXR1c2VydWlkIHNubXBgIgorT1BUSU9OUz0iLUxzIERBRU1PTiAt
TGYgL2Rldi9udWxsIC1wIC92YXIvcnVuL3NubXBkLnBpZCAtYSAtdSBgZ2V0dXNlcnVpZCBzbm1w
YCAtZyBgaWQgLWcgc25tcGAiCiBQSURGSUxFPS92YXIvcnVuL3NubXBkLnBpZAogTE9DS0ZJTEU9
L3Zhci9sb2NrL3N1YnN5cy9zbm1wZAogUkVUVkFMPTAK
</data>

          </attachment>
      

    </bug>

</bugzilla>