<div dir="ltr"><div dir="ltr"><div dir="ltr">Thank you very much for your swift response. I will have a look at clogin hlogin (specifically the hpuifilter) to see what I can learn from them.</div><div dir="ltr"><br></div><div dir="ltr">I will also clean up the "$prompt" so that it accepts both versions of the prompt.</div><div dir="ltr"><br></div><div dir="ltr">It doesn't appear to be a cmd-line counter - I know that one aspect of the behaviour is that the <Dollar Sign><Number> part of the hostname relates to how many simultaneous SSH sessions there are. However I cannot understand how on some occasions it "reports back" as not including the <Dollar Sign><Number> suffix. I will play with the debug again and see what I get.</div><div dir="ltr"><br></div><div dir="ltr">I'm reticent to mention this bit as I think it relates to our installation of RANCID and the behaviour of the *nix system on which it lives . . but when I have been executing the "rancid -d -t <type>" I get (what I think is) non standard behaviour.</div><div dir="ltr"><br></div><div dir="ltr">If I execute "./rancid -d -t <type>" I get the following behaviour:<br><div><font color="#000000"><br></font></div><div><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">./rancid -d -t infinet 10.126.254.208<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><u></u> <u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">loadtype: device type infinet<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">loadtype: found device type infinet at /usr/local/rancid/etc/rancid.types.conf:119<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">device script (rancid) does not appear to be me (./rancid): exec(rancid -t infinet -d 10.126.254.208)<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">Can't exec "rancid": No such file or directory at ./rancid line 104.<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">exec(rancid) failed: No such file or directory<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><u></u> <u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">And so no .raw nor .new is generated.<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><u></u> <u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">If I execute<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><u></u> <u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">perl rancid -d -t infinet 10.126.254.208<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">loadtype: device type infinet<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">loadtype: found device type infinet at /usr/local/rancid/etc/rancid.types.conf:119<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">executing infilogin -t 90 -c"system version;config show" 10.126.254.208<u></u><u></u></font></span></p><font color="#000000"><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><a href="http://10.126.254.208/" target="_blank">10.126.254.208</a>: missed cmd(s): all commands<u></u><u></u></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><a href="http://10.126.254.208/" target="_blank">10.126.254.208</a>: End of run not found<u></u><u></u></span></p></font><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><a href="http://10.126.254.208/" target="_blank">10.126.254.208</a>: clean_run is false<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><a href="http://10.126.254.208/" target="_blank">10.126.254.208</a>: found_end is false<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">!<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><u></u> <u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">Then raw and new are generated but the .raw then contains:<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><u></u> <u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">sh: infilogin: command not found<u></u><u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><u></u> <u></u></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">Which I understand to be the shell expressing it does not recognise that command. However as mentioned previously everything seems to run fine when “rancid-run” is called.</font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><br></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">I mention this as it hampers me a bit on the more granular troubleshooting that is available.</font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><br></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">Thanks again</font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000"><br></font></span></p><p class="MsoNormal"><span style="font-family:Arial,sans-serif"><font color="#000000">DeeTee</font></span></p></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 6 Jan 2022 at 22:55, heasley <<a href="mailto:heas@shrubbery.net">heas@shrubbery.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thu, Jan 06, 2022 at 10:23:44PM +0000, Daniel Thomas:<br>
> Hi<br>
> <br>
> <br>
> <br>
> I have been working on getting RANCID to collect configuration information<br>
> from some equipment that is made by InfiNet. So far I have been unable to<br>
> locate any similar work performed previously and so made a start on getting<br>
> RANCID to connect to the devices.<br>
> <br>
> <br>
> <br>
> Through trial and error I found that the “jlogin” login script was able to<br>
> connect to the device but would not allow interaction once connected. I<br>
> decided to use that script as a base for my work and so made a copy of it<br>
> and named that copy “infilogin” I found that the reason that issues were<br>
> being hit was that the match of the prompt string was being thrown off as<br>
> the InfiNet device changes it’s prompt, and that there were trailing<br>
> charaters what were causing issues.<br>
> <br>
> With regards the changing prompt I saw it take the two following forms:<br>
> basehostname><br>
> basehostname$1><br>
> <br>
> And the trailing characters I saw were:<br>
> <br>
> \r\u001b[16C\u001b[K\r\u001b[16C<br>
> <br>
> To work around this I created an “”altprompt” which took a substring of<br>
> “$prompt” and then did some greedy matching which then gave the following<br>
> in the “we are now logged in, figure out the full prompt”<br>
<br>
You might look at clogin; the EXOS also has a command line counter.  Is it<br>
a cmd-line counter?<br>
<br>
And, look at hlogin, which uses hpuifilter to remove most of the screen<br>
manipulation escape codes.  Sometimes a more rudimentary TERM type causes<br>
devices no use the escape codes; like 'network' or 'dumb'.  there are at<br>
least 2 *.pm's that do this.<br>
<br>
I think that if you combine these two methods, it will be easier.  copy<br>
clogin and modify for the prompt alternatives, add the hpuifilter changes<br>
from hlogin.<br>
<br>
if thats not attractive, debug the missed commands with rancid -d -t <type><br>
looking for the command matches.  I expect there will be none and the *.new<br>
file will be empty.  Compare the prompt matchine in inloop() to whats in<br>
the *.raw file and look for escape codes in the prompts within the *.raw file.<br>
<br>
below, I would just alter $prompt to accept either version of the prompt.<br>
That will make it easier (more consistent with other scripts) for -x or<br>
-s.<br>
<br>
> [..<br>
> <br>
> <br>
> <br>
>     # we are logged in, now figure out the full prompt<br>
> <br>
>     send "\r"<br>
> <br>
>     expect {<br>
> <br>
>         -re "(\r\n|\n)"         { exp_continue; }<br>
> <br>
>         -re "^\[^ ]+$prompt"    { set prompt $expect_out(0,string);<br>
> <br>
>                                   *regsub ">" $prompt ">" prompt;<br>
>  *<br>
>                                  <<<<<br>
> <br>
>                                 }<br>
> <br>
>     }<br>
> <br>
>     # send $prompt<br>
> <br>
>     set in_proc 0<br>
> <br>
>     return 0<br>
> <br>
> }<br>
> <br>
> <br>
> <br>
> # Run commands given on the command line.<br>
> <br>
> proc run_commands { prompt command } {<br>
> <br>
>     global do_interact in_proc<br>
> <br>
>     set in_proc 1<br>
> <br>
> <br>
> <br>
>   *  set altprompt [string range $prompt 0 11]   *<br>
>               <<<<<br>
> <br>
>     # handle escaped ;s in commands, and ;; and ^;<br>
> <br>
>     regsub -all {([^\\]);} $command \\1\u0002; esccommand<br>
> <br>
>     regsub -all {([^\\]);;} $esccommand \\1;\u0002; command<br>
> <br>
>     regsub {^;} $command "\u0002;" esccommand<br>
> <br>
>     regsub -all {[\\];} $esccommand ";" command<br>
> <br>
>     regsub -all {\u0002;} $command "\u0002" esccommand<br>
> <br>
>     set sep "\u0002"<br>
> <br>
>     set commands [split $esccommand $sep]<br>
> <br>
>     set num_commands [llength $commands]<br>
> <br>
>     for {set i 0} {$i < $num_commands} { incr i} {<br>
> <br>
>         send -- "[subst -nocommands [lindex $commands $i]]\r"<br>
> <br>
>         expect {<br>
> <br>
>             *-re "^\[^\n\r *]*$prompt.*" {}*<br>
>                             <<<<<br>
> <br>
>          *   -re "^$altprompt.*>.*"      {} *<br>
> <<<<<br>
> <br>
>             -re "^\[^\n\r]*$prompt."    { exp_continue }<br>
> <br>
>             -re "(\r\n|\n)"             { exp_continue }<br>
> <br>
>            * -re "\r-- more --\r"        { send " "; exp_continue }<br>
> *<br>
>                        <<<<<br>
> <br>
>         }<br>
> <br>
>     }<br>
> <br>
> <br>
> <br>
> <br>
> <br>
> ..]<br>
> <br>
> <br>
> <br>
> I have marked my deviations from “jlogin” with four less than signs.<br>
> <br>
> <br>
> <br>
> With these bodges applied I can successfully get connected to a device,<br>
> execute commands and exit. I can also issue the “infilogin” with -c or -x<br>
> and  the relevant commands will execute, and I see the output. I then went<br>
> and updated the “rancid.types.conf” with an entry as below:<br>
> <br>
> <br>
> <br>
> [..<br>
> <br>
> infinet;script;rancid -t infinet<br>
> <br>
> infinet;login;jlogin<br>
> <br>
> infinet;module;infinet<br>
> <br>
> infinet;inloop;infinet::inloop<br>
> <br>
> infinet;command;infinet::ShowVersion;system version<br>
> <br>
> infinet;command;infinet::ShowConfiguration;config show<br>
> <br>
> ..]<br>
> <br>
> <br>
> <br>
> I created an “<a href="http://infinet.pm" rel="noreferrer" target="_blank">infinet.pm</a>” based on “<a href="http://mrv.pm" rel="noreferrer" target="_blank">mrv.pm</a>”, made an addition to the<br>
> “router.db” and now I can see when “rancid-run” is called that the system<br>
> connects out 4 times to the InfiNet device (tcpdump helped here) but in the<br>
> log file for the run I keep seeing :<br>
> <br>
> <br>
> <br>
> 10.12.25.208 <<a href="http://10.126.254.208/" rel="noreferrer" target="_blank">http://10.126.254.208/</a>>: missed cmd(s): all commands<br>
> <br>
> 10.12.25.208 <<a href="http://10.126.254.208/" rel="noreferrer" target="_blank">http://10.126.254.208/</a>>: End of run not found<br>
> <br>
> <br>
> <br>
> >From what I have read it would seem that my issue lies with the “inloop”<br>
> within my “<a href="http://infinet.pm" rel="noreferrer" target="_blank">infinet.pm</a>” file, but cannot get to grips with what needs to be<br>
> there, or if the “$prompt” hacks I made in “infilogin” are coming back to<br>
> bite me now. If anyone can point me in the right direction I will be very<br>
> grateful.<br>
> <br>
> <br>
> <br>
> Thank you for taking the time to read this and for supporting this great<br>
> tool. (By that I mean RANCID not that I am a tool . . but now I come to<br>
> mention it)<br>
> <br>
> DeeTee<br>
<br>
> _______________________________________________<br>
> Rancid-discuss mailing list<br>
> <a href="mailto:Rancid-discuss@www.shrubbery.net" target="_blank">Rancid-discuss@www.shrubbery.net</a><br>
> <a href="https://www.shrubbery.net/mailman/listinfo/rancid-discuss" rel="noreferrer" target="_blank">https://www.shrubbery.net/mailman/listinfo/rancid-discuss</a><br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Regards<br><br>Daniel Thomas<br><br><br></div>