Jump to content
  • 0

Running Node on Raspberry Pi 4/Modifying Hamvoip


FrostyFruits

Question

Before doing anything. DO NOT USE the sd card your node is currently running on. Get yourself a blank sd card incase there's any issues, you can just pop your original sd card back in.

 

Files to download:

pi4.zip nodeupdate.zip template.zip

 

DON'T FORGET TO PORT FORWARD to the local ip address and port number used.

 

First use winSCP to log into your current node that's running. Open up iax.conf to get your node password.

/etc/asterisk/iax.conf

image.png.027ee825cbc8bdacba2b45db5e22c2fe.png

 

Head over to hamvoip.org to download the newest image file.

image.thumb.png.3a0e1b5a1eb1b2635690aa08468cbea0.png

 

Make sure you have Win32 Disk Imager installed. Use it to install the new image to the blank sd card. 

image.png.6daa9a1a9323536c9c37741ed7540c45.png

 

After it's done installing don't remove the sd card yet. Open it up in file explorer and add the 2 files in pi4.zip to it. 

image.thumb.jpeg.b282941b4952c2b29aa48da70dfdb8d4.jpeg

 

You can now safely remove sd card and add to your Raspberry Pi 4. Let it boot up with ethernet cable installed for a few mins. Log into your router and look for the newest ip address/name. Mine was labeled as alarmpi 192.168.1.192.

Use the ip address and SSH into it with winSCP using the default credentials. There's a few things your gonna wanna change.

 

Download nodeupdate.zip and copy/paste the files to the correct folders.

/usr/local/etc/rc.updatenodelist

image.png.5b6a1d83bf79c71abe50dfaa9a4827e0.png

 

/var/lib/asterisk/rpt_extnodes_gmrs

image.png.ce882ab1daf1ea99dda0a5b701ab2fb9.png

 

Next download template.zip and install those files in the correct folder.

/usr/local/etc/asterisk_tpl/

image.png.ef064c6abc09e8c4ec1de22ca70b0699.png

 

 

You can now log in with putty and go through the node set up process. Change your hostname to node-XXXXX or whatever you'd like. Add your node number and password when prompted. 

After your done with the node setup you can use the menu to change your wifi. Let your node reboot.

Use winSCP to log back into your node and navigate to extensions.conf to add your node number where it says NODE = ${NODE}. It doesn't change during the setup process. 

 

/etc/asterisk/extensions.conf

image.png.e084b5f8c3f5ff015687a6f86823036b.png

 

Go into rpt.conf and look for extnodefile and change it to the following if it isn't already set.

image.thumb.png.127ed7a7a26076e0484ef73b0cadbd5b.png

 

While in winSCP hit the putty icon

image.png.589c5da4cb06ee70a135f6729b91f78d.png

 

When the menu pops up hit 9 to enter command line.

Change your crontab -e to run rc.updatenodelist

image.thumb.png.b4c38d7540dec466498dea5f3adb5212.png

You should be able to connect to other nodes at this point.

Don't forget to check out the updated tone list I added in rpt.conf

image.thumb.png.98b365bb75cfb9faf5ef271ebf8c505c.png

 

 

Link to comment
Share on other sites

Recommended Posts

  • 0

Setting up Supermon

 

Log into your node with putty and change directory.

cd /var/www/html/supermon

 

Once your in that directory your gonna wanna change the admin password

htpasswd -cB .htpasswd admin

 

Now go to Supermon on your ip address

yournodeip/supermon

 

Click login on the left and login with admin and your password.

Next we're gonna wanna change some settings. Click Configuration Editor

 

Go to allmon.ini and hit edit file. Change it to the following info with your node# to your node, set passwd= as your password you just set up.

[node#]
host=127.0.0.1:5038
user=admin
passwd=secret
menu=yes
hideNodeURL=no


[All Nodes]
nodes=node#
menu=yes

[lsNodes]
url="/cgi-bin/lsnodes_web?node=node#"
menu=yes

[myGMRS.com]
url="http://network.mygmrs.com"
menu=yes

 

Don't forget to hit WRITE edits at the bottom when done.

Next go to global.inc and change all the info to your info. Callsign, Name, Location, Zip

 

Now go into common.inc and find the section about Allstar Allmon Database, change to the following info

// AllStar allmon database
//$ASTDB_TXT = "/var/log/asterisk/astdb.txt";
$ASTDB_TXT = "/var/lib/asterisk/rpt_extnodes_gmrs";
//
// AllStar rpt_extnodes file --- not present in DNS mode.
$EXTNODES = "/var/lib/asterisk/rpt_extnodes_gmrs";
//
// AllStar Echolink database dump
$ECHO_DB = "/tmp/echolink.db.gz";
//
// Private AllStar nodelist
$PRIVATENODES = "/var/lib/asterisk/rpt_extnodes_gmrs";
 

WRITE edits when done.

 

You should now see your node and all your stats.

If you wanna control your node from an external ip address make sure you port forward port 80 to your node's internal ip. 

Make sure you keep up with your public ip address if you don't have a static ip. Otherwise you won't be able to connect. 

Link to comment
Share on other sites

  • 0

I noticed when people were transmitting I would lose part of the transmission every few seconds, sometimes the whole transmission then I would hear my courtesy tone. I noticed this when I had my phone linked in with DVSwitch while monitoring my radio. I did some playing around in the simpleusb.conf setting and found that if I changed it from log to linear my audio would be fine without issues.

To change the settings log in with putty, on the main menu hit 12 for simpleusb tune menu

image.png.baf7ca307a6705bdae45a3bb1eb69762.png

 

After your in the simpleusb menu hit 5 then number 2

image.png.60a58152fcdd03c6a4dbf4765d65fdcb.png

When your done making changes hit W then 0. Make sure to restart asterisk when done making changes by selecting option 13 from main menu. 

Link to comment
Share on other sites

  • 0

Thanks for the writeup. We've found it very valuable. I'd like to add that in the steps to use WinSCP to copy/place the files rc.updatenodelist and rpt_extnodes_gmrs you might not have mentioned to the users to use F9 and make them executable. Otherwise they won't do anything. When logging onto your node via SSH the default HamVOIP port is 222 and the login is root/root. Also the advice "If you wanna control your node from an external ip address make sure you port forward port 80 to your node's internal ip." won't work for in the majority of cases port 80 is blocked or leads to the router page. Either do a translation like 80 external->50000 internal or add a Listen line in /etc/httpd/conf/httpd.conf to make the web server respond on 50000. Also /etc/asterisk/manager.conf needs 

[general]                                                                       
displaysystemname = yes                                                         
enabled = yes                                                                   
webenabled = yes                                                               
port = 5038                                                                     
and
;bindaddr = 127.0.0.1   ; Local interface only!                                                           
bindaddr = 0.0.0.0    ; Not secure

 

I just didn't want people to get stuck. Thanks again

 

-Pres WRJL719/W2PW 

Link to comment
Share on other sites

  • 0

A couple of other things. At the step that says "Change your crontab -e to run rc.updatenodelist", because the screenshot runs off the left edge, you can't see that there is an asterisk (shift-8) (never use the numeric keypad) at the beginning of the line. So

/5 * * * * /usr/local/etc/rc.updatenodeist should be
*/5 * * * * /usr/local/etc/rc.updatenodeist

as does the line above it for AutoSky

PS: you can make your PuTTY window look a LOT cleaner by doing the following:
In Putty, 
Window...Appearance...Font... change to 18point
Translation... Remote character set make it CP437
Session...Default settings...Save

Also update any saved sessions you may have. Actually, I don't save sessions. What I do is in WinSCP I choose
Options...Preferences...Integration...Applications... and tick all 3 (versus the default middle one) and then WinSCP invokes PuTTY.

One other WinSCP tip: if you can't "see" a file that is there (example: /srv/http/supermon/.htpasswd) then click lower right to show hidden files. 

You can edit files in Supermon Configuration Editor, but if it warns you about the file being read-only, go into WinSCP, go to the file such as /etc/asterisk/rpt.conf and hit F9 to change the properties of the file from 0644 to 0666

That's about it for now. 73

-Pres WRJL719/W2PW

 

Link to comment
Share on other sites

  • 0

So this works great, the only issue I am having is I am getting cron fork which stops updating things in the cron after about 12 hours.  A reboot clears it for another 12 hours or so.  I am not quite sure what may be causing this, I have several other nodes running on the ham side on allstar and dont have any issues.  Anyone know what could be the issue.  Here is some of the logs when it starts.

 

Oct 10 17:34:02 GMRSRepeater CROND[22904]: pam_unix(crond:session): session closed for user root
Oct 10 17:34:03 GMRSRepeater CROND[2133]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:34:03 GMRSRepeater CROND[7443]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:34:13 GMRSRepeater CROND[7443]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:34:13 GMRSRepeater CROND[2133]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:34:32 GMRSRepeater CROND[6438]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:35:01 GMRSRepeater crond[23030]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:35:01 GMRSRepeater crond[23031]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:35:01 GMRSRepeater crond[23032]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:35:01 GMRSRepeater CROND[23035]: (root) CMD (/usr/local/bin/AUTOSKY/AutoSky)
Oct 10 17:35:01 GMRSRepeater CROND[23033]: (root) CMD (/usr/local/etc/rc.updatenodelist)
Oct 10 17:35:01 GMRSRepeater CROND[23034]: (root) CMD (/usr/local/sbin/supermon/ast_var_update.sh)
Oct 10 17:35:01 GMRSRepeater CROND[23032]: (root) CMDOUT (/usr/local/bin/AUTOSKY/AutoSky: fork: retry: No child processes)
Oct 10 17:35:01 GMRSRepeater CROND[23030]: (root) CMDOUT (/usr/local/etc/rc.updatenodelist: fork: retry: No child processes)
Oct 10 17:35:01 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:02 GMRSRepeater CROND[23032]: (root) CMDOUT (/usr/local/bin/AUTOSKY/AutoSky: fork: retry: No child processes)
Oct 10 17:35:02 GMRSRepeater CROND[23030]: (root) CMDOUT (/usr/local/etc/rc.updatenodelist: fork: retry: No child processes)
Oct 10 17:35:02 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:04 GMRSRepeater CROND[23032]: (root) CMDOUT (/usr/local/bin/AUTOSKY/AutoSky: fork: retry: No child processes)
Oct 10 17:35:04 GMRSRepeater CROND[23030]: (root) CMDOUT (/usr/local/etc/rc.updatenodelist: fork: retry: No child processes)
Oct 10 17:35:04 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:08 GMRSRepeater CROND[23032]: (root) CMDOUT (/usr/local/bin/AUTOSKY/AutoSky: fork: retry: No child processes)
Oct 10 17:35:08 GMRSRepeater CROND[23030]: (root) CMDOUT (/usr/local/etc/rc.updatenodelist: fork: retry: No child processes)
Oct 10 17:35:08 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:16 GMRSRepeater CROND[23032]: (root) CMDOUT (/usr/local/bin/AUTOSKY/AutoSky: fork: Resource temporarily unavailable)
Oct 10 17:35:16 GMRSRepeater CROND[23032]: pam_unix(crond:session): session closed for user root
Oct 10 17:35:16 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:16 GMRSRepeater CROND[23031]: (root) CMDOUT (tail: cannot open '/var/log/pacman.log' for reading: No such file or directory)
Oct 10 17:35:17 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:19 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:20 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:22 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:23 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:25 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:25 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:26 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:26 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:28 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:28 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:32 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:32 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:35:35 GMRSRepeater CROND[14727]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:35:40 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:35:40 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:35:55 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/bin/checkupdates: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:56 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/bin/checkupdates: fork: retry: Resource temporarily unavailable)
Oct 10 17:35:58 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/bin/checkupdates: fork: retry: No child processes)
Oct 10 17:36:01 GMRSRepeater crond[23302]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:36:01 GMRSRepeater CROND[23302]: (CRON) CAN'T FORK (child_process): Resource temporarily unavailable
Oct 10 17:36:01 GMRSRepeater CROND[23302]: pam_unix(crond:session): session closed for user root
Oct 10 17:36:02 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:36:03 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:05 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:36:06 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:36:08 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:36:12 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: Resource temporarily unavailable)
Oct 10 17:36:20 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:36:20 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:21 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:23 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:27 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:35 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:36:35 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:36 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:38 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:42 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:50 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:36:50 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:51 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:53 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:36:57 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:01 GMRSRepeater crond[270]: (CRON) CAN'T FORK (do_command): Resource temporarily unavailable
Oct 10 17:37:05 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:37:05 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/weather.sh: fork: retry: No child processes)
Oct 10 17:37:06 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/weather.sh: fork: retry: No child processes)
Oct 10 17:37:08 GMRSRepeater CROND[13030]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:37:08 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/weather.sh: fork: retry: No child processes)
Oct 10 17:37:12 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/weather.sh: fork: retry: No child processes)
Oct 10 17:37:20 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/weather.sh: fork: Resource temporarily unavailable)
Oct 10 17:37:20 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:21 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:23 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:27 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:35 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:37:35 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:36 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:38 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:42 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: retry: No child processes)
Oct 10 17:37:50 GMRSRepeater CROND[23031]: (root) CMDOUT (/usr/local/sbin/supermon/ast_var_update.sh: fork: Resource temporarily unavailable)
Oct 10 17:37:51 GMRSRepeater CROND[7163]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:37:52 GMRSRepeater CROND[23031]: (root) CMDOUT (Updated Variables Node 24222)
Oct 10 17:38:01 GMRSRepeater crond[23612]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:38:01 GMRSRepeater CROND[23612]: (CRON) CAN'T FORK (child_process): Resource temporarily unavailable
Oct 10 17:38:01 GMRSRepeater CROND[23612]: pam_unix(crond:session): session closed for user root
Oct 10 17:39:01 GMRSRepeater crond[23692]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:39:01 GMRSRepeater CROND[23692]: (CRON) CAN'T FORK (child_process): Resource temporarily unavailable
Oct 10 17:39:01 GMRSRepeater CROND[23692]: pam_unix(crond:session): session closed for user root
Oct 10 17:39:05 GMRSRepeater CROND[5705]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:40:01 GMRSRepeater crond[270]: (CRON) CAN'T FORK (do_command): Resource temporarily unavailable
Oct 10 17:40:01 GMRSRepeater crond[270]: (CRON) CAN'T FORK (do_command): Resource temporarily unavailable
Oct 10 17:40:01 GMRSRepeater crond[23763]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:40:01 GMRSRepeater CROND[23763]: (CRON) CAN'T FORK (child_process): Resource temporarily unavailable
Oct 10 17:40:01 GMRSRepeater CROND[23763]: pam_unix(crond:session): session closed for user root
Oct 10 17:40:03 GMRSRepeater CROND[18984]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:40:32 GMRSRepeater CROND[22855]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:40:33 GMRSRepeater CROND[8539]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:40:43 GMRSRepeater CROND[8539]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:40:53 GMRSRepeater CROND[8539]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:01 GMRSRepeater crond[23940]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:41:01 GMRSRepeater CROND[23940]: (CRON) CAN'T FORK (child_process): Resource temporarily unavailable
Oct 10 17:41:01 GMRSRepeater CROND[23940]: pam_unix(crond:session): session closed for user root
Oct 10 17:41:03 GMRSRepeater CROND[8539]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:03 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:06 GMRSRepeater CROND[5949]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:13 GMRSRepeater CROND[22855]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:14 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:21 GMRSRepeater CROND[23098]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:24 GMRSRepeater CROND[22033]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:24 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:34 GMRSRepeater CROND[22855]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:34 GMRSRepeater CROND[22033]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:34 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:44 GMRSRepeater CROND[22855]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:44 GMRSRepeater CROND[22033]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:45 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:55 GMRSRepeater CROND[22033]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:41:55 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:01 GMRSRepeater crond[24194]: pam_unix(crond:session): session opened for user root by (uid=0)
Oct 10 17:42:01 GMRSRepeater CROND[24194]: (CRON) CAN'T FORK (child_process): Resource temporarily unavailable
Oct 10 17:42:01 GMRSRepeater CROND[24194]: pam_unix(crond:session): session closed for user root
Oct 10 17:42:05 GMRSRepeater CROND[18173]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:06 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:16 GMRSRepeater CROND[18173]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:16 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:26 GMRSRepeater CROND[22033]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:26 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:36 GMRSRepeater CROND[17060]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:37 GMRSRepeater CROND[22033]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:37 GMRSRepeater CROND[6894]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:37 GMRSRepeater CROND[18173]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:37 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:37 GMRSRepeater CROND[24474]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:47 GMRSRepeater CROND[20665]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:47 GMRSRepeater CROND[18173]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:47 GMRSRepeater CROND[10834]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:47 GMRSRepeater CROND[24474]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Oct 10 17:42:47 GMRSRepeater CROND[6894]: (root) CMDOUT (/usr/bin/grep: /tmp/rpt_extnodes-temp: No such file or directory)
Link to comment
Share on other sites

  • 0

Thanks for the response.  I thought this may be the case as when I looked it up I was reading this but didn't know what was causing it.  I have a rasp pi 3b and a sd card that is 32 gig if I remember right and I installed the hamvoip image and did what was said above.  So I guess I'm not sure what the fix will be or if anyone else has had this happen who has tried this way on hamvoip but I am looking for the cure.

Thanks

Link to comment
Share on other sites

  • 0
1 hour ago, fpcaptain said:

Thanks for the response.  I thought this may be the case as when I looked it up I was reading this but didn't know what was causing it.  I have a rasp pi 3b and a sd card that is 32 gig if I remember right and I installed the hamvoip image and did what was said above.  So I guess I'm not sure what the fix will be or if anyone else has had this happen who has tried this way on hamvoip but I am looking for the cure.

Thanks

A memory leak like that will eventually cause a stack overflow no matter how much memory you have.  The stackoverflow forum link I posted has some suggestions for how you can see what processes are being forked and never exit or killed.  Then you (or a programmer if you’re not) will have to figure out why those calls aren’t exiting freeing up their memory.  Things to look for are incursion (when a function calls itself), or calling cron from within a loop.  Since cron seems to be at the heart of this issue that’s what I would start with.  Cron is a scheduler.  It only needs to be called once for each scheduled task or fork. It  typically shouldn’t be called over and over with the same parameters unless you kill it before calling it.  (Which would be sloppy coding!)

So, check and see which processes are running.  If you have a whole bunch of some dig into why.

Good luck,

Steve

Link to comment
Share on other sites

  • 0
9 hours ago, fpcaptain said:

Thanks for the response.  I thought this may be the case as when I looked it up I was reading this but didn't know what was causing it.  I have a rasp pi 3b and a sd card that is 32 gig if I remember right and I installed the hamvoip image and did what was said above.  So I guess I'm not sure what the fix will be or if anyone else has had this happen who has tried this way on hamvoip but I am looking for the cure.

Thanks

Unless you are running a swap file on the SD card, its size is not really relevant. The R-Pi 3B has 1GB of RAM. Log-in and try running something like top

top - 11:40:50 up  7:40,  1 user,  load average: 0.87, 0.93, 0.92
Tasks: 122 total,   1 running, 121 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  6.1 sy,  0.0 ni, 90.7 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :    972.8 total,    660.6 free,    113.2 used,    198.9 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    789.6 avail M

Note the Mem and Swap lines (this is on a running Pi-Star system). You could then look at the list of processes to see what is using memory.

Link to comment
Share on other sites

  • 0

Just out of curiosity, has anyone tried running this on proxmox virtual server?  I have node numbers now and am awaiting interface for vertex 7000, I have a pi4, but I also run various versions of pi on my proxmox server and was thinking to try and virtualize it.

Link to comment
Share on other sites

  • 0
14 hours ago, KAF6045 said:

Unless you are running a swap file on the SD card, its size is not really relevant. The R-Pi 3B has 1GB of RAM. Log-in and try running something like top

top - 11:40:50 up  7:40,  1 user,  load average: 0.87, 0.93, 0.92
Tasks: 122 total,   1 running, 121 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  6.1 sy,  0.0 ni, 90.7 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :    972.8 total,    660.6 free,    113.2 used,    198.9 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    789.6 avail M

Note the Mem and Swap lines (this is on a running Pi-Star system). You could then look at the list of processes to see what is using memory.

OK, I just ran top and got this.  I dont really know much about this stuff.  I got hamvoip originally about 2 years ago and have been pretty good with it all of course there are step by step instructions which I have pretty much memorized after doing enough of it.  If you want to message me off list that is fine to.  Also I may have the pi 3B + I forget what the differences are.  image.thumb.png.26d0122002f8e3bda3bf257ddbebd6d0.png

Link to comment
Share on other sites

  • 0

Are you sure you haven’t changed anything in the code?

In particular look at the post immediately above your first post where WRLJ719 talks about the call to rc.updatenodelist. Also, his post appears to have a misspelling “rc.updatenodeist” rather than “rc.updatenodelist”.  Nothing makes a person more aware of spelling than programming.

It looks like cron is spawning new instances of “rc.updatenodelist” which runs and then goes to sleep, over and over and over, each time eating up valuable resources until there are none left.  I suspect either rc.updatenodelist needs to exit gracefully, rather than sleeping, or something needs to be fixed in crontab. I doubt it needs to run very frequently anyway, but it should exit each time.

That link to the stackoverflow question that I pasted above has other suggestions for diagnosis.

You probably do have the 3b+ but that shouldn’t matter.

So, look at where you were when you followed this instruction:

Change your crontab -e to run rc.updatenodelist”

and make sure you did it correctly and that you included the asterisk as pointed out by WRLJ719.

Link to comment
Share on other sites

  • 0

Based upon https://github.com/dl9rdz/asterisk-apprpt/blob/master/allstar/rc.updatenodelist this script, once started, loops continuously (lines 20-22)

retries=0
while [ 1 ] 
do

and has a two hour sleep before rechecking things... (lines 74-104)

                if [ $retries -gt 50 ]
       	        then
               	        sleep 7200 # doze for 2 hrs to lighten network load
               	else
                       	sleep 10
		fi
		break
	fi
      else
	$RM -f /tmp/rpt_extnodes-temp
	if [ $verbose -ne 0 ]
	then
        	echo "Problem retrieving node list from $i.$TOPDOMAIN, trying another server";
		downloads=0
		retries=$((retries+1))
	fi
	if [ $verbose -eq 0 ]
	then
		if [ $retries -gt 50 ]
		then
			sleep 7200 # doze for 2 hrs to lighten network load
		else
			sleep 30
		fi
	else
		sleep 5
	fi
	break
      fi
    done
 done

Based upon this -- I have to wonder why a repetitive cron job is being used? At least, one that doesn't check to see if a copy of the script is already running (and either force kills that copy before starting a new one, or just exit without starting a copy).

NOTE: the 2 hour sleep appears to be tied to the retry count. That could mean you have a network problem preventing you from retrieving the list(s). Edit the script to turn ON "verbose" and restart -- then after a while check the system log files for any messages.

Link to comment
Share on other sites

  • 0
On 5/15/2022 at 10:00 AM, FrostyFruits said:

Go into rpt.conf and look for extnodefile and change it to the following if it isn't already set.

image.thumb.png.127ed7a7a26076e0484ef73b0cadbd5b.png

 

20 hours ago, Sshannon said:

Nope the only changes I made were what is listed above to get things working.  I did notice the mispell when I originally put it on so that was not an issue either. 

The crontab for the updatenodelist, I commented out and everything has been fine so far.  My other nodes (ham radio) have the same line but things are fine but then again they are not changed to what what I reference right above for extnodefile = /var/lib/asterisk/rpt_extnodes_gmrs in the rpt.conf file.   So I guess the updatendelist will just have to update once in a while then instead of often, not sure how to make that happen to keep things happy though.  In the crontab I had it set to run every 5 minutes (now I have it commented out)  this shows what my crontab looks like currently and so far things have been running except the nodelist isnt up to date.image.thumb.png.b3e60a7240c0f6168099ca4ea07f2087.png

 

Are you sure you haven’t changed anything in the code?

In particular look at the post immediately above your first post where WRLJ719 talks about the call to rc.updatenodelist. Also, his post appears to have a misspelling “rc.updatenodeist” rather than “rc.updatenodelist”.  Nothing makes a person more aware of spelling than programming.

It looks like cron is spawning new instances of “rc.updatenodelist” which runs and then goes to sleep, over and over and over, each time eating up valuable resources until there are none left.  I suspect either rc.updatenodelist needs to exit gracefully, rather than sleeping, or something needs to be fixed in crontab. I doubt it needs to run very frequently anyway, but it should exit each time.

That link to the stackoverflow question that I pasted above has other suggestions for diagnosis.

You probably do have the 3b+ but that shouldn’t matter.

So, look at where you were when you followed this instruction:

Change your crontab -e to run rc.updatenodelist”

and make sure you did it correctly and that you included the asterisk as pointed out by WRLJ719.

 

Link to comment
Share on other sites

  • 0
2 hours ago, fpcaptain said:

 

That seems like the best or at least only thing to do to keep from chewing through memory.  

Do any instances of rc.updatenodelist run at all? Are there any sleeping?  I think I read somewhere that a module called “dial” might call it once.

Is it possible there’s a problem in the extnodefile itself?

Link to comment
Share on other sites

  • 0
On 10/14/2022 at 6:51 AM, Sshannon said:

That seems like the best or at least only thing to do to keep from chewing through memory.  

Do any instances of rc.updatenodelist run at all? Are there any sleeping?  I think I read somewhere that a module called “dial” might call it once.

Is it possible there’s a problem in the extnodefile itself?

OK.  I can run it manually once in the bash shell if I have my computer.  I wonder if setting it to run once a day as a cron if it would still be an issue.  What I have now done to assit with not always having the computer with me but my phone and supermon, I made a Favorite command up that allows me to go to favorites and click node list update (I named it) and then execute and it updates it.  What I did was create like an A1 command in rpt.conf where the 81 time command is so I could do it via supermon or over the air if I wanted.  I also went into /etc/rc.local and made that look like this

#!/bin/bash
#
# rc.local file

# Starts Allstar

echo -1> /proc/sys/kernel/sched_rt_runtime_us

/usr/local/etc/rc.allstar

/usr/local/bin/AUTOSKY/AutoSky
/usr/local/bin/AUTOSKY/AutoSky.ON

/usr/local/sbin/supermon/ast_var_update.sh

/usr/local/etc/rc.updatenodelist

exit 0

So now when the pi reboots, it automatically loads the mygmrs node list.  Dont ask me how I figured this out, it just came to me and it works.  Thanks again for the help!

Link to comment
Share on other sites

  • 0

Nice.  Yes, you probably could run it once a day as a cron.  If the pi is never restarted and if rc.updatenodelist just runs and sleeps then eventually you’ll have the same problem, but it may take nearly two years!

The real question I have is if rc.updatenoelist runs to completion and breaks out of its loop or if it continues running.  If it exits eventually then it shouldn’t be gobbling up memory and you could run it as a cron more frequently.  It was only because you had like 544 instances running and sleeping that you had problems (that’s what I think anyway).

 

Link to comment
Share on other sites

  • 0
On 5/15/2022 at 12:14 PM, FrostyFruits said:

How to install AutoSky Weather Warning

https://hamvoip.org/howto/AutoSky_howto.pdf

Can this be installed on the PI 3 setup of myGMRS net?  I found a .tar file with AutoSky 6?  I tried to set it up, but I ge ta "cp" error that can't find the "OFILE value" file.

EDIT:  I can't install "pacman" on raspbian, it installs the game instead....

Link to comment
Share on other sites

  • 0
7 hours ago, m4f1050 said:

Can this be installed on the PI 3 setup of myGMRS net?  I found a .tar file with AutoSky 6?  I tried to set it up, but I ge ta "cp" error that can't find the "OFILE value" file.

Did you read the HOWTO file?

Quote

Set your County

Find your county URL and update in the /usr/local/bin/AUTOSKY/AutoSky.ini file.

Visit https://alerts.weather.gov/ and select your state and county. Click on the ATOM link at the left of the entries and copy the URL. Paste the URL into the $OFILE line. It will look like this:

OFILE="https://alerts.weather.gov/cap/wwaatmget.php?x=PAC017&y=0"

The URL will be different after the /cap/ for your particular county.

 

7 hours ago, m4f1050 said:

EDIT:  I can't install "pacman" on raspbian, it installs the game instead....

 

pi-star@pi-star-3b(ro):~$ sudo apt search pacman
Sorting... Done
Full Text Search... Done
childsplay/oldstable 3.3-2 all
  Suite of educational games for young children

gtkboard/oldstable 0.11pre0+cvs.2003.11.02-9 armhf
  many board games in one program

hannah/oldstable 1.0-3 armhf
  pacman-like game, child oriented

hannah-data/oldstable 1.0-3 all
  pacman-like game, child oriented - data files

njam/oldstable 1.25-10 armhf
  pacman-like game with multiplayer support

njam-data/oldstable 1.25-10 all
  pacman-like game with multiplayer support -- data files

pacapt/oldstable 2.3.13-1 all
  Arch's pacman-like package manager for some Unices

pacman/oldstable 10-17.2 armhf
  Chase Monsters in a Labyrinth

pacman4console/oldstable 1.3-1 armhf
  ncurses-based pacman game

xscreensaver-data-extra/oldstable 5.42+dfsg1-1 armhf
  Extra screen saver modules for screensaver frontends

pi-star@pi-star-3b(rw):~$

Is "pacapt" the package you want?

Link to comment
Share on other sites

  • 0
On 11/9/2022 at 8:25 PM, KAF6045 said:

Did you read the HOWTO file?

 

 

pi-star@pi-star-3b(ro):~$ sudo apt search pacman
Sorting... Done
Full Text Search... Done
childsplay/oldstable 3.3-2 all
  Suite of educational games for young children

gtkboard/oldstable 0.11pre0+cvs.2003.11.02-9 armhf
  many board games in one program

hannah/oldstable 1.0-3 armhf
  pacman-like game, child oriented

hannah-data/oldstable 1.0-3 all
  pacman-like game, child oriented - data files

njam/oldstable 1.25-10 armhf
  pacman-like game with multiplayer support

njam-data/oldstable 1.25-10 all
  pacman-like game with multiplayer support -- data files

pacapt/oldstable 2.3.13-1 all
  Arch's pacman-like package manager for some Unices

pacman/oldstable 10-17.2 armhf
  Chase Monsters in a Labyrinth

pacman4console/oldstable 1.3-1 armhf
  ncurses-based pacman game

xscreensaver-data-extra/oldstable 5.42+dfsg1-1 armhf
  Extra screen saver modules for screensaver frontends

pi-star@pi-star-3b(rw):~$

Is "pacapt" the package you want?

Disregard, I was trying to install it on the wrong sdcard.

I do have an issue....  (not AutoSky related, AutoSky is working)  I can't connect to any node.  I did notice the rc.updatenodelist just sits there until it times out.

Also, on rpt.conf, there is a 1999 = radio@127.0.0.1/1999,NONE     <-- is this needed?  I removed it...

Here is what I get on supermon allnodes:

  Private Node 21211 => Node not in database   lsNodes  
  Node   Node Information Received Link Direction Connected Mode
  Could not login to Asterisk Manager.

 

* I just realized, when I downloaded the image, it's version 1.7, does it need to be version 1.6?

I noticed a folder changed, /var/www/hml/supermon is now /srv/http/supermon

 

EDIT:

I figured out my problem....  password had a & in it...   I still have a problem...   ?

I am still getting "node not in database" error...   I pointed to the _gmrs file but it's not giving me a list when I click on LsNodes

Link to comment
Share on other sites

  • 0
8 hours ago, m4f1050 said:

I have the same issue with node not in database, I have added the info in the /etc/asterisk/local/privatenodes.txt but something must still be missing

 

EDIT:

I figured out my problem....  password had a & in it...   I still have a problem...   ?

I am still getting "node not in database" error...   I pointed to the _gmrs file but it's not giving me a list when I click on LsNodes

 

Link to comment
Share on other sites

  • 0
21 hours ago, fpcaptain said:

I have the same issue with node not in database, I have added the info in the /etc/asterisk/local/privatenodes.txt but something must still be missing

Is your rc.updatenodelist timing out also?  I have a lot of these processes running at the same time, does not look normal, the version on the image on myGMRS exits and doesn’t hang…

 

EDIT:

I don't use asterisk with HAM so I added an "exit 0" after it queries the rpt_extnodes_gmrs and moved on....  Still need to figure out how to show in the database on supermon...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Guidelines.