# Script: Update Tailscale on (nearly) all devices

**URL:** <https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582>\
**Category:** Router\
**Tags:** KB\
**Created:** [January 21, 2024, 12:27pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582 "2024-01-21T12:27:43Z")\
**Posts on this page:** 20\
**Page:** 21

<div class="post-metadata">

**Author:** ![Relocated](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/r/3ec8ea/32.png) [@Relocated](https://forum.gl-inet.com/u/Relocated)\
**Post date:** [February 21, 2026, 9:11am UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/417 "2026-02-21T09:11:34Z")

</div>

Is it make sense to choose tiny version on Flint 2, it has kind of huge memory so maybe full version will works well ?

---

<div class="post-metadata">

**Author:** ![admon](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/admon/32/32880_2.png) [@admon](https://forum.gl-inet.com/u/admon)\
**Post date:** [February 21, 2026, 9:12am UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/418 "2026-02-21T09:12:34Z")

</div>

I would say „Yes“, because the build pipeline for the tiny version is more controlled. I only use the tiny one - no matter on which device.

---

<div class="post-metadata">

**Author:** ![jonathanrc2](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/j/9e8a1a/32.png) [@jonathanrc2](https://forum.gl-inet.com/u/jonathanrc2)\
**Post date:** [February 21, 2026, 12:51pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/419 "2026-02-21T12:51:51Z")

</div>

I was able to run the script without any arguments and it completed normally.

But exploring the script output with the “ **–select-release** ” argument seems to format the output as one huge blob without showing the CRLF formatting (versus comparing to another machine, raspberry-pi in this case, that I use for my pihole).

So, in summary, I am now running with the latest tiny version. It still would be nice to leverage the various arguments for future use, especially the one for selecting releases. Somehow, it doesn’t work as expected for me with Flint 2 on v4.8.3.

-_Jonathan_

---

<div class="post-metadata">

**Author:** ![admon](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/admon/32/32880_2.png) [@admon](https://forum.gl-inet.com/u/admon)\
**Post date:** [February 21, 2026, 2:40pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/420 "2026-02-21T14:40:36Z")

</div>

Hm, works fine on my device:

 ![image](https://forum-static.gl-inet.com/original/3X/0/f/0f4c0fcd3ee6abdc22c6c4f60eb8d6371b8d7ef0.jpeg)

What client do you use to connect via SSH?

---

<div class="post-metadata">

**Author:** ![kris\_8](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/kris_8/32/31517_2.png) [@kris\_8](https://forum.gl-inet.com/u/kris_8)\
**Post date:** [February 22, 2026, 3:27am UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/421 "2026-02-22T03:27:55Z")

</div>

I was able to run the script on my GL-X2000 Spitz Plus (4.8.2 beta)

However it was not able to link the device to my tailnet via the GLinet UI. It kept failing.  
I was able to make the link in SSH by typing:

`tailscale status`

It then provided me with an url to make the link

After this I typed:

`tailscale down`

`tailscale up --ssh --accept-dns=false --accept-routes`

I am now all setup for connecting to my router from the Tailscale Admin panel anywhere via ssh.  
Thanks for the script. Awesome!

---

<div class="post-metadata">

**Author:** ![Relocated](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/r/3ec8ea/32.png) [@Relocated](https://forum.gl-inet.com/u/Relocated)\
**Post date:** [February 22, 2026, 3:37am UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/422 "2026-02-22T03:37:22Z")

</div>

Thx for explanation, tiny it is then 👍

---

<div class="post-metadata">

**Author:** ![kris\_8](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/kris_8/32/31517_2.png) [@kris\_8](https://forum.gl-inet.com/u/kris_8)\
**Post date:** [February 22, 2026, 9:40am UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/423 "2026-02-22T09:40:15Z")

</div>

After testing for a few hours, tailscale seem to work fine.

But the GLinet UI struggles. It keeps turning Tailscale orange and then back to green. Looks like it does use some memory doing this.

Will continue testing.

---

<div class="post-metadata">

**Author:** ![admon](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/admon/32/32880_2.png) [@admon](https://forum.gl-inet.com/u/admon)\
**Post date:** [February 22, 2026, 10:27am UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/424 "2026-02-22T10:27:44Z")

</div>

Can you have a look inside the logs? My Tailscale build process got a bigger upgrade, so maybe something is broken - even if it might work fine on my system.

---

<div class="post-metadata">

**Author:** ![jonathanrc2](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/j/9e8a1a/32.png) [@jonathanrc2](https://forum.gl-inet.com/u/jonathanrc2)\
**Post date:** [February 22, 2026, 3:41pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/425 "2026-02-22T15:41:28Z")

</div>

I am using PuTTY for both the successful tiny version install and for the script issue when invoking the “–select-release” argument.

Thank you,

_-Jonathan_

---

<div class="post-metadata">

**Author:** ![kris\_8](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/kris_8/32/31517_2.png) [@kris\_8](https://forum.gl-inet.com/u/kris_8)\
**Post date:** [February 22, 2026, 6:37pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/426 "2026-02-22T18:37:27Z")

</div>

I tried to run the script again, but then it came with a storage low issue. I then tried to restore, and even more storage was lost. In fact I went all the way to 0.00% xD

Perhaps this GL-X2000 just does not have enough storage for these updates. A factory reset took me back to 25Mb. I was at 20Mb when I first ran the script.

I feel there was no space for any logs either.

---

<div class="post-metadata">

**Author:** ![admon](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/admon/32/32880_2.png) [@admon](https://forum.gl-inet.com/u/admon)\
**Post date:** [February 22, 2026, 6:59pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/427 "2026-02-22T18:59:26Z")

</div>

That's weird because the binary should be only ~ 6 MB.  
It would be great to post the script output.

---

<div class="post-metadata">

**Author:** ![jonathanrc2](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/j/9e8a1a/32.png) [@jonathanrc2](https://forum.gl-inet.com/u/jonathanrc2)\
**Post date:** [February 23, 2026, 4:13pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/428 "2026-02-23T16:13:56Z")

</div>

I fixed my **update-tailscale.sh** script (pertinent to Flint 2 / v4.8.3) by replacing **wget** with **curl**. Now the releases are properly parsed.

Line 699:

> available\_labels=$( **curl**"[https://api.github.com/repos/admonstrator/glinet-tailscale-updater/releases](https://api.github.com/repos/admonstrator/glinet-tailscale-updater/releases)" | grep '"tag\_name"' | sed 's/._": "([^"]_)".\*/\1/')

In case someone else has Flint 2 (v4.8.3) and wanted an option to select and install a specific release, this may work for you.

---

<div class="post-metadata">

**Author:** ![Void](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/void/32/36696_2.png) [@Void](https://forum.gl-inet.com/u/Void)\
**Post date:** [February 23, 2026, 6:19pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/429 "2026-02-23T18:19:28Z")

</div>

Found a better way 🙂

Thanks @admon !

Still line 699:

> available\_labels=$(wget -qO- "[https://api.github.com/repos/admonstrator/glinet-tailscale-updater/releases](https://api.github.com/repos/admonstrator/glinet-tailscale-updater/releases)" | grep -o '"tag\_name":"[^"]\*"' | sed 's/"tag\_name":"//;s/"//' | grep -v '^prerelease$')

Original with no edit:

 ![image](https://forum-static.gl-inet.com/original/3X/d/4/d4e774dc2d80f0dcd496c9eb23627a77372f024e.png)

Your edit:

 ![image](https://forum-static.gl-inet.com/original/3X/3/3/332b416fc79f23789a1e825643394975352a3ffd.png)

Proposed:

 ![image](https://forum-static.gl-inet.com/original/3X/a/b/abd96b664078317bb009db15390c448dc5663d47.png)

---

<div class="post-metadata">

**Author:** ![admon](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/admon/32/32880_2.png) [@admon](https://forum.gl-inet.com/u/admon)\
**Post date:** [February 23, 2026, 6:48pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/430 "2026-02-23T18:48:12Z")

</div>

That's so weird. It would mean that curl & wget work differently in different firmware versions... Which is highly confusing o\_o

---

<div class="post-metadata">

**Author:** ![Void](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/void/32/36696_2.png) [@Void](https://forum.gl-inet.com/u/Void)\
**Post date:** [February 23, 2026, 7:17pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/431 "2026-02-23T19:17:21Z")

</div>

Not sure why 🙂

For context,

PuTTY Release 0.83

Flint 2 on 4.8.3-op24

---

<div class="post-metadata">

**Author:** ![admon](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/admon/32/32880_2.png) [@admon](https://forum.gl-inet.com/u/admon)\
**Post date:** [February 23, 2026, 7:43pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/432 "2026-02-23T19:43:14Z")

</div>

Ahhh, could you do me a favour and run

```auto
whereis wget
wget --version

```

I assume that on op24 it's not busybox but real GNU wget instead.

---

<div class="post-metadata">

**Author:** ![Void](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/void/32/36696_2.png) [@Void](https://forum.gl-inet.com/u/Void)\
**Post date:** [February 23, 2026, 7:54pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/433 "2026-02-23T19:54:08Z")

</div>

> root@Void:~# whereis wget  
> -ash: whereis: not found
> 
> root@Void:~# which wget  
> /usr/bin/wget  
> root@Void:~#  
> root@Void:~# wget --version  
> wget: unrecognized option: version  
> Usage: wget [options]  
> Options:  
> -4 Use IPv4 only  
> -6 Use IPv6 only  
> -O Redirect output to file (use "-" for stdout)  
> -P Set directory for output files  
> --quiet | -q Turn off status messages  
> --continue | -c Continue a partially-downloaded file  
> --header='Header: value' Add HTTP header. Multiple allowed  
> --user= HTTP authentication username  
> --password= HTTP authentication password  
> --user-agent | -U Set HTTP user agent  
> --post-data=STRING use the POST method; send STRING as the data  
> --post-file=FILE use the POST method; send FILE as the data  
> --spider | -s Spider mode - only check file existence  
> --timeout=N | -T N Set connect/request timeout to N seconds  
> --proxy=on | -Y on Enable interpretation of proxy env vars (default)  
> --proxy=off | -Y off |  
> --no-proxy Disable interpretation of proxy env vars
> 
> HTTPS options:  
> --ca-certificate= Load CA certificates from file  
> --no-check-certificate don't validate the server's certificate  
> --ciphers= Set the cipher list string
> 
> root@Void:~#
> 
> root@Void:~# ls -l $(which wget)  
> lrwxrwxrwx 1 root root 18 Oct 19 17:37 /usr/bin/wget -\> /bin/uclient-fetch  
> root@Void:~#

---

<div class="post-metadata">

**Author:** ![peshos](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/p/eb9ed0/32.png) [@peshos](https://forum.gl-inet.com/u/peshos)\
**Post date:** [February 25, 2026, 6:54pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/434 "2026-02-25T18:54:07Z")

</div>

Is there a way to modify the script to automatically set --advertise-exit-node? Maybe as a choice during the initial tailscale setup?

I’ve added `( sleep 60; tailscale set --advertise-exit-node ) &` in the local startup script, but occasionally the machine just stops advertising itself as an exit node and I have to run this manually.

---

<div class="post-metadata">

**Author:** ![MrTJ](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/m/9de053/32.png) [@MrTJ](https://forum.gl-inet.com/u/MrTJ)\
**Post date:** [March 24, 2026, 10:38pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/435 "2026-03-24T22:38:54Z")

</div>

Anyone elses routing broken on the tailscale 1.96.3 latest update?

---

<div class="post-metadata">

**Author:** ![rthco](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/rthco/32/20980_2.png) [@rthco](https://forum.gl-inet.com/u/rthco)\
**Post date:** [March 27, 2026, 9:22pm UTC](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582/436 "2026-03-27T21:22:03Z")

</div>

Can use this and it will persist:

[https://remotetohome.io/blog/gl-tailscale-fix/](https://remotetohome.io/blog/gl-tailscale-fix/)

[Previous page](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582.md?page=20)

[Next page](https://forum.gl-inet.com/t/script-update-tailscale-on-nearly-all-devices/37582.md?page=22)
