Multihop tramp voegt extra carriage returns toe en raakt in de war door de output

Ik probeer Tramp te gebruiken om in te loggen in een Docker-container die op een VM draait.

Mijn Docker-gerelateerde setup ziet er als volgt uit:

(add-to-list 'tramp-methods
             '("docker-exec"
               (tramp-login-program "docker")
               (tramp-login-args
                (("exec" "-ti") ("%h") ("/bin/sh")))
               (tramp-remote-shell "/bin/sh")
               (tramp-remote-shell-args ("-i") ("-c"))))

Ik kan dit op mijn machine gebruiken om toegang te krijgen tot mappen in de container, maar als ik op een externe machine probeer te "springen": Cx Cf /ssh: root @ vm | docker-exec: ed703f92ae19:/ Vagebond zal in eerste instantie verward raken over de opdracht ls omdat er aan het einde van de regel ^ M worden toegevoegd en dus tramp -find-executable retourneert iets als /usr/bin/ls ^ M , wat een ongeldige opdracht zou genereren.

Ik was in staat om dit te overwinnen met:

(defun my/tramp-find-executable
    (func vec progname dirlist &optional ignore-tilde ignore-path)
  (org-trim (funcall func vec progname dirlist ignore-tilde ignore-path)))

(advice-add 'tramp-find-executable
            :around 'my/tramp-find-executable)

Maar nu krijg ik deze foutmelding:

byte-code: Wrong type argument: number-or-marker-p, //DIRED-OPTIONS//

En het log ziet er als volgt uit:

//DIRED-OPTIONS// --quoting-style=literal
///c92423c4fd16f4857a1b9d765f804f3e#$
17:32:16.175776 tramp-get-connection-property (7) # check-remote-echo nil
17:32:16.175817 tramp-get-connection-property (7) # check-remote-echo nil
17:32:16.175869 tramp-wait-for-regexp (6) # 
  total 292
  drwxr-xr-x  18 root root   4096 Feb 24 09:08 .
  drwxr-xr-x  18 root root   4096 Feb 24 09:08 ..
  -rwxr-xr-x   1 root root      0 Feb 24 09:08 .dockerenv
  -rwxr-xr-x   1 root root      0 Feb 24 09:08 .dockerinit
  lrwxrwxrwx   1 root root      7 Mar 30  2015 bin -> usr/bin
<<< skipped >>>
  drwxrwxrwt   2 root root   4096 Feb 24 15:29 tmp
  drwxr-xr-x  13 root root   4096 Mar 30  2015 usr
  drwxr-xr-x  18 root root   4096 Mar 30  2015 var
//DIRED// 59 60 108 110 158 168 216 227 275 278 337 340 388 391 439 443 491 494 553 558 619 629 677 682 730 733 781 784 832 836 884 888 936 939 987 991 1051 1058 1106 1109 1157 1160 1208 1217 1265 1268 1316 1319 1367 1370
//DIRED-OPTIONS// --quoting-style=literal
///c92423c4fd16f4857a1b9d765f804f3e#$

Ik weet niet wat Tramp probeerde te doen, toen het deze fout kreeg, dus ik kan geen manier bedenken om het te repareren. Maar misschien is dit een bekende bug? Of misschien heb ik wat extra instellingen nodig voor Tramp zodat het geen ^ M s zou toevoegen? (Ik betwijfel of ze in de originele uitvoer zitten, omdat beide machines Linux draaien, beide CentOS.

3
Het is geen Vagebond die deze CR toevoegt, maar ze kunnen worden toegevoegd vanwege iets in de Vagebond, SSH of Docker-configuratie. Heb je opties ingesteld in je .ssh/config , en zo ja, kun je dit zonder ze reproduceren? In het bijzonder zou RequestTTY dit veroorzaken.
toegevoegd de auteur CodingWithoutComments, de bron
Ik ben niet bekend met Docker, maar waarom geef je het de -t optie? Dat zorgt ervoor dat het een terminal toewijst, wat niet nodig zou moeten zijn voor Vagebond. En het feit dat er een terminal is, zorgt ervoor dat de CR aanwezig is. Ik weet niet of Tramp een mechanisme heeft dat CR soms onderdrukt, maar als ze er niet in de eerste plaats zijn, is het probleem niet duidelijk.
toegevoegd de auteur CodingWithoutComments, de bron
@ Gilles nee, ik heb niet eens een bestand .ssh/config . Docker-configuratie klinkt misschien veelbelovend, maar ik zou niet weten waar ik naar moet kijken. Bovendien kan Vagebond één van de hops afzonderlijk doen, het is alleen wanneer ze doorgesluisd zijn, het probleem zich voordoet.
toegevoegd de auteur Yann Trevin, de bron
@Gilles als ik het -t -bit verwijder, loopt Tramp een tijdje vast en geeft dan op. Ik kan de ^ M s echter nog steeds zien. De laatste regel die wordt afgedrukt (enkele tientallen keer) is exec docker exec -i 74b79b8b67a2/bin/sh ^ M en vervolgens wordt een grote backtrace afgedrukt, waarbij de laatste aanroep tramp lijkt te zijn -maybe-open-connection (["docker-exec" nihil "74b79b8b67a2" "/" "ssh: root @ vm |"])
toegevoegd de auteur Yann Trevin, de bron
@MichaelAlbinus Ik heb zojuist de bibliotheek docker-tramp geprobeerd en zie dezelfde fout die ik oorspronkelijk heb gezien: number-or-marker-p,//DIRED-OPTIONS//. Het gebruikt ook -ti opties om docker uit te voeren.
toegevoegd de auteur Yann Trevin, de bron
@MichaelAlbinus Docker wordt geleverd met een register vol met reeds gekookte afbeeldingen. Dit betekent dat als u docker ubuntu uitvoert, deze verbinding maakt met het globale register, deze download en start (hoewel het enige tijd zal duren, afhankelijk van uw netwerk is dit tussen 5 minuten en een uur). Ik zal later op de avond een verslag schrijven.
toegevoegd de auteur Yann Trevin, de bron
Ik heb het zelf nooit geprobeerd, maar in ELPA is er een pakket docker-tramp . Misschien probeer je het, maar definieer je je eigen? En voor het geval er iets verbeterd moet worden, zou het beter zijn om het daar te doen, andere mensen zouden hiervan profiteren.
toegevoegd de auteur celtschk, de bron
Welnu, ik ben een n00b tegenover dokwerker. Als iemand me een kleine docker-afbeelding en een recept zou kunnen geven om het te gebruiken om deze fout in Emacs/Tramp te veroorzaken, zou ik bereid zijn om het te debuggen. Ik run Ubuntu 15.10. Aangezien dit communicatie vereist die niet geschikt is voor stackexchange, is het misschien een eerste stap om een ​​Emacs of Tramp-bugrapport in te dienen.
toegevoegd de auteur celtschk, de bron

Geen antwoorden

0