new file: 1.png

new file:   10.png
	new file:   2.png
	new file:   3.png
	new file:   4.png
	new file:   5.png
	new file:   6.png
	new file:   7.png
	new file:   8.png
	new file:   9.png
	new file:   Ani.gif
	new file:   Booting-Modes-and-Compression.md
	new file:   Building-ThinStation-for-booting-off-SSD-(Goal:-Terminal-Server-Thin-Clients).md
	new file:   Certificates.md
	new file:   Configuration.md
	new file:   Custom-Kernel.md
	new file:   Debugging.md
	new file:   Deployment.md
	new file:   DevStation-Setup.md
	new file:   Errors-Running-mkmbrdrv.md
	new file:   Examples.md
	new file:   FAQ.md
	new file:   Fastboot.md
	new file:   Fools-Tools.md
	new file:   Getting-Started-with-ThinStation.md
	modified:   Home.md
	new file:   Installing-ThinLinc-Server-for-a-thin-client-environment.md
	new file:   Machine-profiles.md
	new file:   Making-bootable-media-on-Windows.md
	new file:   News-and-History.md
	new file:   Packaging.md
	new file:   Persistence.md
	new file:   Ports-and-Packages.md
	new file:   Printer-configuration.md
	new file:   Secureboot.md
	new file:   Smart-Cards.md
	new file:   Timesync-and-NTP.md
	new file:   Update-a-Port.md
	new file:   Update-a-package.md
	new file:   Updating-your-repository.md
	new file:   Using-Git.md
	new file:   Using-the-hdupdate-package.md
	new file:   VMWare-View-&-Citrix-ICA.md
	new file:   _Sidebar.md
	new file:   build.conf.md
	new file:   r1.png
	new file:   r10.png
	new file:   r11.png
	new file:   r12.png
	new file:   r13.png
	new file:   r14.png
	new file:   r2.png
	new file:   r3.png
	new file:   r4.png
	new file:   r5.png
	new file:   r6.png
	new file:   r7.png
	new file:   r8.png
	new file:   r9.png
	new file:   thinstation.conf.md
Donald A. Cupp Jr. 2024-12-10 15:56:23 -06:00
parent 6b7fa9a970
commit c04e04b899
60 changed files with 3173 additions and 1 deletions

BIN
1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
10.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
4.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

BIN
5.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
6.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
7.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
8.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
9.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
Ani.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -0,0 +1,73 @@
# ThinStation Boot Modes Overview
ThinStation supports several booting modes, each with unique characteristics and use cases.
## LiveCD Mode
**Description:** LiveCD mode operates similarly to many other projects. It involves an `initrd` file encapsulated in a `squashfs` archive, loaded into memory at boot. An early boot process involves creating a temporary file system (`tmpfs`) which merges with the read-only (RO) filesystem to create a read-write (RW) filesystem. The system then transitions to this new union filesystem to continue operations.
**Pros:**
- Simple to create.
- Disk-independent operation.
**Cons:**
- Filesystem lookup overhead.
- Moderate boot times.
- Moderate memory usage.
- Squash lag on application launch.
**How to Use:**
1. In `build.conf`, ensure the `overlayfs` package is included.
2. Set `initrdcmd` to `squashfs`.
## Initrd Mode
**Description:** This mode uses a simple `initrd` approach where the entire filesystem is compressed during build and then decompressed during booting.
**Pros:**
- Simple to create.
- Disk-independent.
- Very fast application launching.
**Cons:**
- High memory usage during boot.
- Longer boot times.
**How to Use:**
1. In `build.conf`, ensure `overlayfs` is 'not' included.
2. Set `initrdcmd` to `gzip`, `bzip2`, or `xz`.
## Fastboot Mode
**Description:** Exclusive to ThinStation, Fastboot mode splits the filesystem into essential early-boot components and additional components loaded later. It includes two sub-modes: standard and `lotsofmem`.
### Standard Sub-mode
- **Process:** Critical libraries and binaries are relocated to the `fastboot` subdirectory, with their original locations linked until `/lib` contains only links. This modified filesystem is then compressed into an `initrd`. Additional OS requirements are compressed into a `squashfs` archive.
- **Boot Process:** The `initrd` decompresses into memory, starting execution. The `squashfs` archive is mounted from boot media at `/lib` early during initialization.
**Pros:**
- Lowest memory usage.
- Fastest booting.
**Cons:**
- OS dependency on external `squashfs` archive location.
- Some filesystem parts remain read-only.
- Squash lag on application launch.
**How to Use:**
1. In `build.conf`, set `initrdcmd` to `gzip`, `bzip2`, or `xz` and enable `fastboot true`.
2. Optionally include the overlay package.
3. In `thinstation.conf.buildtime`, configure a mount entry for booting from removable media or internal storage that targets a volume label at `/boot`.
### Lotsofmem Sub-mode
- **Process:** Similar to standard mode, but the `squashfs` archive is decompressed into memory rather than mounted, enhancing performance and accessibility.
**Pros:**
- Rapid booting and application launching.
- Full filesystem read-write capability.
**Cons:**
- High memory consumption.
- OS dependency on external `squashfs` archive location.
**How to Use:**
1. In `build.conf`, ensure `overlayfs` is 'not' included.
2. Set `initrdcmd` to `gzip`, `bzip2`, or `xz` and enable `fastboot lotsofmem` in `build.conf`.
3. Configure a mount entry in `thinstation.conf.buildtime` as in standard mode.

@ -0,0 +1,175 @@
_These are my notes of the process, sans the dead-ends that I went down before figuring out my mistakes._
### Environment:
* Small school with ~ 35 aging computers, about 10 of those are for staff.
* Currently trying to keep up with updates and normal hiccups on a Windows environment.
* Server: Dell r710, 64G RAM, RAID, XCP-NG host; managed over Xen Orchestra
### Target:
* A VM running Linux Mint Cinnamon 20.4 and ThinLinc Terminal Server. Notes about the server [here](https://github.com/Thinstation/thinstation/wiki/Installing-ThinLinc-Server-for-a-thin-client-environment).
* Clients (aforementioned aging computers) booting ThinStation from a small SSD, with all ThinLinc Client options baked in, leaving no options except choosing another boot device at BIOS.
### Steps:
* Cloned thinstation.git per 'Getting Started.' onto my ThinkPad W53H0 (16G RAM, Core i7, OS and home on an SSD, put the Thinstation build environment on an HDD...it was a little slow. My OS is Linux Mint 19.2) [Note: as of v6.2 this takes 11.7 GB of space.]
`git clone --depth 1 git://github.com/Thinstation/thinstation.git`
`cd thinstation`
`sudo ./setup-chroot`
(NOTE: if you reboot or otherwise leave the build environment, you will need to run the setup again.)
Went with the default config for the first round:
`cd /build`
`./build --savedir --allmodules` [added _--allmodules_ since this will be used on [real hardware](https://github.com/Thinstation/thinstation/wiki/Examples), not VM's
Per the '[Deployment Page](https://github.com/Thinstation/thinstation/wiki/Deployment#booting-with-syslinux)',
`fdisk -l |grep -e "Disk /"` (my USB thumb drive is on /dev/sdc)
`mkmbrdrv -o /build/boot-images/syslinux -p d:0:boot /dev/sdc`
I tried this on a ThinkPad W500, and...success! Next step: try trimming out unnecessary packages, and adding the NoMachine NX client.
If you like Nano for text editing, do this in the chroot building environment; I like Neovim, so I did this from another terminal window:
`cd <path-to-environment>`
`sudo nvim build.conf` [sudo isn't needed in the chroot environment]
Removed (commented out):
* VMWare, Virtualbox-4.1, and qemu lines (Machine module list)
* module CIFS
* all language packages except English-US
* package freerdp
* package chrome
* package cups
Added (uncommented):
* package networkmanager (for wifi)
* package thinlinc
* package custom-idle
Ran the build again:
`./build --savedir --allmodules`
### ThinLinc package won't install
The version of the client had changed, so I got an error in the build process. As was noted [here](https://github.com/Thinstation/thinstation/issues/570), the file name comes from /build/build.urls, so I updated the _param thinlincurl_ to match the link of the client download (tar.gz package), and all worked as it should.
### Fine-Tuning the Configuration
Now for the details. I want users to get to their desktop sessions with as few clicks as possible, setting as few options as possible. So I want to pass on these parameters:
* Wifi SSID and key; some of the clients will use wifi
Per [ThinLinc Documentation](https://www.cendio.com/resources/docs/tag-devel/html/thinstation.html), I added these first to the thinstation.conf.network, only to discover that these are only valid for boot time configuration. So I added them to the bottom of thinstation.conf.buildtime:
`SESSION_0_TYPE=thinlinc`
`SESSION_0_THINLINC_SERVER=pc.pilgrimcs.org`
`SESSION_0_THINLINC_CONFIG_NFS_SERVER_ENABLED=0`
`SESSION_0_THINLINC_CONFIG_NFS_EXPORTS=/mnt/usbdevice,rw,/mnt/cdrom,ro`
`SESSION_0_THINLINC_CONFIG_NFS_SERVER_ENABLED=1`
`SESSION_0_THINLINC_CONFIG_SOUND_ENABLED=1`
`SESSION_0_THINLINC_CONFIG_NFS_ROOT_WARNING=0`
and commented out
* ThinLinc client launches on startup, no option to close it, no access to desktop environment ([possibly this](https://github.com/Thinstation/thinstation/blob/master/ts/build/packages/xdesktop-kiosk/build/conf/50openbox)?)
* Server IP; there will only be one target server
* [Update TS on client boot](https://github.com/Thinstation/thinstation/blob/master/ts/build/Documentation/README.local-install) OR ([HDUPDATE](https://github.com/Thinstation/thinstation/wiki/Using-the-hdupdate-package) (not sure which is preferable?); we may migrate to actual thin client hardware (maybe [Chromeboxes](link to chromebox hack script)?) depending on the difference in power consumption over time, but for now, I plan to acquire small (16G or less) SSD's. For our accounting class (which uses QuickBooks), I may need to leave some clients dual-booting into Windows, so I'll set a short BIOS time-out to let users choose the Windows drive if they need a desktop version of QB. NOTE: this will also make it trivial to hand out multiple TS images (e.g, one for staff and one for students), if that becomes helpful.
* Custom-idle; we have trouble getting our student computers turned off at the end of the day. However, I don't want to turn teachers' computers off automatically, unless at a certain time of the day (night), because they may be away from their machines for longer than the time-out I want to set for the student computers.
---
The documentation is detailed, but it took a bit to wrap my brain around the configuration file structure.
I believe I want to edit the thinstation.conf.buildtime, so I saved a copy as .orig, and will edit this one.
### Local-Install
(From [here](https://github.com/Thinstation/thinstation/blob/master/ts/build/Documentation/README.local-install)
Back in build.conf, I added (uncommented):
* package local-install
* package netfiles
I set these parameters to match our situation:
param basepath prod
param baseurl http://192.168.10.38
param basename thinstation
I tested the server (which is an NGINX server that I was able to get files onto via rsync, and off of via wget), but ran into issues. I'm holding off on this until I know for sure it isn't a LAN settings issue.
### xdesktop-kiosk
Back in build.conf, I added
* package xdesktop-kiosk
I couldn't find much help on configuration options, but from [this page](https://github.com/Thinstation/thinstation/blob/master/ts/build/packages/xdesktop-kiosk/build/conf/50openbox), I tried
remove from build.conf:
* #package xfwm4
#package xfwm4-extra
#package xfce4-power-manager
#package terminal # Terminal emulator for xfwm4 -- Pulls in xfwm4
#package thunar # File Manager for xfwm4 -- Pulls in xfwm4
Add:
package openbox # A spartin clean/fast window manager.
package xdesktop-kiosk # A locked down desktop kiosk using the openbox wm (See packages/xdesktop-kiosk/build/conf for # more help.
removing (commenting) these lines from thinstation.conf.buildtime:
* #SESSION_0_TYPE=xfwm4
* #SESSION_0_AUTOSTART=on
...and adding these lines to thinstation.conf.buildtime (make sure to uncomment the relevant lines):
> # Setup for a "desktop kiosk" e.g. a desktop without any system menus
> # SESSION_0 and SESSION_1 is MANDATORY. More sessions may be added.
> #ICONMODE=MANUAL
> MENU_SHOWABOUT=true # Have an about box or not
>
> SESSION_0_TITLE="openbox"
> SESSION_0_TYPE=openbox
> SESSION_0_AUTOSTART=On
>
> SESSION_1_TITLE="Exit"
> SESSION_1_TYPE=poff
> SESSION_1_AUTOSTART=Off
> SESSION_1_ICON=On
>
> # Add any additional package you may want, but keep AUTOSTART=Off and
> # ICON=On for each session
>
> #SESSION_2_TITLE="NX"
> #SESSION_2_TYPE=nx
> #SESSION_2_NX_GENERAL_SERVER_HOST=192.168.10.10
> #SESSION_2_AUTOSTART=Off
> #SESSION_2_ICON=On
>
> # End of desktop kiosk setup
the options set here are those that go in the [.nxs file](https://knowledgebase.nomachine.com/DT11R00186#3)
I may be starting to figure this out: I found the nxclient.cfg in the build environment right [where it should have been](https://github.com/Thinstation/thinstation/blob/master/ts/build/packages/nx/etc/nx/nxclient.cfg). I'm assuming that this is like other /etc files in that it provides a template if none exists. So probably there should be a place to create a customized version of this, but I don't know where it goes.
In recent NoMachine Enterprise Client installs, this corresponds with [player.cfg](https://www.nomachine.com/pdf/The_most_frequently_asked_options_for_pre-configuring_the_client_and_the_session_behavior.pdf). There are decent explanations in this doc.
Also in this doc are instructions about the connection file, which is a config file saved for every connection you set up in the client. In Linux, these are stored at ~/Documents/NoMachine/. Again, this is easy to find, if you know [where](https://github.com/Thinstation/thinstation/blob/master/ts/build/packages/nx/build/conf/50nx) to look. Probably the best way to get the right options set here is to run the client from your desktop, set up a session like you want it (In my case, the connection is called "PCS Terminal Server."), then open the connection file (~/Documents/NoMachine/PCS Terminal Server.nxs), and adapt the configuration (or at least the relevant lines/sections) to 50nx in the build environment. This isn't a straightforward copy/paste, because the format in 50nx is different, but the instructions are clear. For example, in my connection file (PCS Terminal Server.nxs), I have this line in the <group name="General" > section:
> <option key="Server host" value="192.168.10.10" />
The format in 50nx looks like this:
> SESSION_#_NX_GENERAL_SERVER_HOST="192.168.10.10"
Questions: what is the
### Attempts at Leaning the Build
From build.conf
* package gnome-control-center
* package volumeicon
* package xorg7-vmware

22
Certificates.md Normal file

@ -0,0 +1,22 @@
## How to add a certificate to a build
Your certificates will need to be base64(PEM) encoded and suffixed as either .crt or .pem
You will need to create a folder in /build/packages that contains a certs folder, and
within the certs folder, we can make a folder called ca to hold Certificate Authority certs.
mkdir -p /build/packages/my-certificates/certs/ca
Next create a dependencies file that pulls in ca-bundle
echo ca-bundle > /build/packages/my-certificates/dependencies
We now need to include our new package in the build configuration
echo "package my-certificates" >> /build/build.conf
You can drop any CA certificates you want in the /build/packages/my-certificates/certs/ca, and then run build. This should link your cert into all the right places.
Additionally, if you want to specifically trust a host certificate without a CA chain, you can create the 'trusted' folder as a location to place Peer certificates.
mkdir -p /build/packages/my-certificates/certs/trusted

126
Configuration.md Normal file

@ -0,0 +1,126 @@
## Introduction
ThinStation can be tailored to a variety of use cases. To allow for a certain degree of flexibility, ThinStation can be configured at build time *and optionally* later at boot time. Sometimes you will also want to [[create a new package|Packaging]] for your special configuration files.
## Build time configuration
The most basic part of build time configuration is about **hardware support**. Most of it is included in a **[[machine profile|Machine-profiles]]** suitable for your thin client hardware.
The **applications** included in the boot image are defined in a file called [[build.conf|build.conf]].
ThinStation is typically used to drive a mass of thin clients that share some configuration details. To increase fault tolerance and minimize individual configuration these **common runtime settings** can be **made default at build time** in a file called `thinstation.conf.buildtime` (by default, the name is set in `param defaultconfig`).
**A word of advice:** Use a sensible `thinstation.conf.buildtime`. If ThinStation somehow fails to find any other config file, all it has to fall back onto is `thinstation.conf.buildtime`, so it better make sense. Make it as simple as possible in the beginning, and then fine tune it and make it more complete once it basically works.
All files mentioned above need to be located in your `build` directory. You also need to [[rebuild|Getting-Started-with-ThinStation#building-a-boot-image]] the boot image to make changes effective.
## Boot time configuration
To speed up booting for systems and networks that dont require it, ThinStation clients stick to the default build time configuration (see above) by default.
### Enabling
Nevertheless the *default* configuration can be overwritten at *boot* time to allow for a specialized behaviour for each thin client. These settings are delivered through the network (for exception see [[here|Configuration#Notes]]).
To allow boot time configuration, enable the `ts-classic` package and disable `networkmanager` and `udisks-glue` packages in your `build.conf`, set `NET_FILE_ENABLED=On` in your `thinstation.conf.buildtime` and rebuild your boot image.
### How and where to fetch the files
There are three ways of fetching the config files:
1. Over **TFTP**: By default boot images request configuration files from a subdirectory `ts5.4` of the TFTP root directory. (Settings: `NET_FILE_METHOD=tftp` in `thinstation.conf.buildtime` and `param basepath ts5.4` in `build.conf`)
2. Over **HTTP**: This is recommended because HTTP has better performance than the other two protocols. After setting `NET_FILE_METHOD=wget` in `thinstation.conf.buildtime` boot images request configuration files from a URL specified by `param baseurl` and `param basepath` in `build.conf`.
**Example:** To request file from `http://server/conf` set `param baseurl http://server` and `param basepath conf`.
3. Over **SCP**: This can only be used if the `ssh` package is included in `build.conf`. After setting `NET_FILE_METHOD=scp` boot images request configuration files from a directory (specified in `param basepath` in `build.conf`) on the TFTP server (or `NET_FILE_ALTERNATE` if defined) as user `NET_FILE_USER`. Note that all `NET_` directives need to be set in `thinstation.conf.buildtime`.
### Configuration files and their scope
You can address several sets of devices:
- **The whole network.** A file named `thinstation.conf.network` will be read by all ThinStation clients. In a file named `thinstation.hosts` you can define a mapping from MAC adresses to hostnames and **groups**.
- **A certain group of devices.** All devices that are part of a certain group (see above) will read their matching `thinstation.conf.group-groupname` files (in the order the groups appear in `thinstation.hosts`). Example: `thinstation.conf.group-terminalserver1`
- **A certain hostname.** A file named `thinstation.conf-hostname` will only be read by the thin client with the exact same hostname, set either via DHCP or `thinstation.hosts`. Example: `thinstation.conf-client1`
- **A certain IP adress.** A file named `thinstation.conf-IPaddress` will only be read by the thin client with the exact same IP address. Example: `thinstation.conf-192.168.0.55`
- **A certain [MAC address](https://en.wikipedia.org/wiki/MAC_address).** A file named `thinstation.conf-MACaddress` will only be read by the thin client with the exact same MAC address. Example: `thinstation.conf-005004AABBCC`
### Notes
**All client configuration is done in `thinstation.conf.*` files** (unless you change `param basename` to something else than `thinstation`). It is possible to have multiple such files, that are all downloaded and read in the order of mention [[above|Configuration#configuration-files-and-their-scope]], except for `thinstation.conf.buildtime`, which is built into the image and read first. So a client will start with whatever (defaults) you had defined in `thinstation.conf.buildtime` when you built the image. During boot it will look for `thinstation.conf.network`, then `thinstation.hosts`, and so on down the list above. Values read from any matching conf files will be retained if they are not overwritten by values from subsequent conf files.
You have a final (and thus overruling) option to store a configuration file on some local device. If you correctly configure the `STORAGE_PATH` setting then your boot image will look for `thinstation.profile/thinstation.conf.user` below that path.
**Not all settings can be defined in *downloadable* .conf files.** Specifically, the network and storage configurations. These will need to be defined in .buildtime. It's a chicken and egg problem. How do you access the network, when the config is on the network? Storage is required very early as well, because most of the image file loading can be deferred until later, but it must be accessible during system bring-up.
Last but not least: Configuration options will not take effect unless the corresponding package/option is built into the image. For example, defining an ICA session (`SESSION_#_TYPE=ica`) in a config file wont help you if you didnt include the ICA package in `build.conf`.
## Examples
The following are a set of usage scenarios for a ThinStation workstation
with examples of parameters for your thinstation.conf<whatever> file.
These settings can go in any of the thinstation.conf<whatever> files,
except where noted. (Please see above or [[here|FAQ#configuring-thinstation]]
for the order in which `thinstation.conf*` files are used).
### Windows Connectivity
ThinStation includes a number of Microsoft Windows connectivity
options. (rdesktop, Citrix ICA, NX, ThinLinc)
#### Automatic - Single Session on Microsoft Server via RDP
First of all uncomment this line in **build.conf** file:
`package rdesktop # X RDP Client for Windows Terminal Services`
**Scenario:** You have a workstation that should automatically connect
into your Terminal Services server.
Add this lines to file **thinstation.conf.buildtime** :
RECONNECT_PROMPT=On
SESSION_0_TYPE=rdesktop
SESSION_0_AUTOSTART=On
SESSION_0_RDESKTOP_SERVER=<ip of terminal services server>
If you want to add some default options you need to include them in the
OPTIONS parameters, eg.
SESSION_0_RDESKTOP_OPTIONS='-u `<user>` -p " " -d `<domain>`'
This will pre-populate the user and domain at the Windows logon screen and blank the password.
For information on all the available rdesktop parameters see the
[rdesktop man page](http://linux.die.net/man/1/rdesktop).
### Network Related
#### No DHCP server
**Scenario:** You have a workstation on the network and your network
does *not* have a DHCP server.
These parameters can go in any `thinstation.conf*` file as the
network on the workstation is restarted after reading all
`thinstation.conf*` files. If you have `NET_FILE_ENABLED=Off`
you *must* have these in **thinstation.conf.buildtime** or
**thinstation.conf.user** (as network based files wont get read).
NET_USE_DHCP=Off
NET_HOSTNAME=<your hostname>
NET_IP_ADDRESS=<ip address>
NET_MASK=<ip mask eg. 255.255.255.0>\
NET_DNS1=<ip address of your first DNS server>\
NET_DNS2=<ip address of your second DNS server>\
NET_DNS_SEARCH=<default domain to search in, eg. mydomain.com>\
NET_GATEWAY=<ip address of your gateway>
#### No TFTP or HTTP server for network based configuration files
**Scenario:** You have a workstation on the network and your network
does *not* have a TFTP/HTTP server (for supplying `thinstation.conf*` files).
Include `NET_FILE_ENABLED=Off` in your `thinstation.conf.buildtime` file.
The workstation will still be able to read a
`thinstation.conf.user` if it exists.
#### No network card (or not connected)
If your workstation does *not* have a network card at all (or you are not
connecting to a network), you will need to have the settings for the two preceding sections and built your thinstation image with
`param haltonerror false`
in the `build.conf` file to ensure that the startup of ThinStation
does not stop unexpectedly.

54
Custom-Kernel.md Normal file

@ -0,0 +1,54 @@
While I do endeavor to make a kernel that works pretty much anywhere, sometimes people need something special, so here is how to make a custom kernel.
Make sure you are in the chroot.
`cd /ts/ports/kernel-modules/kernel-TS`
This will download the kernel source, unpack it and place it in
/ts/ports/kernel-modules/kernel-TS/work/src/linux-\<version\>
`pkgmk -d -f -eo`
Now we can
`cd work/src/linux-<version>`
This will copy the current kernel configuration into the place that the kernel source expects.
`cp ../ts.config .config`
You can now make any changes that you want to the kernel configuration using the kernel menu configuration system.
`make menuconfig`
Save your changes when you are done, and exit the utility.
We now need to copy the new config to somewhere the port system will understand, so
`cp .config ../../../ts.config`
Now go back to /ts/ports/kernel-modules/kernel-TS
`cd /ts/ports/kernel-modules/kernel-TS`
We need to update the md5sum for the new ts.config, so
`pkgmk -um`
You can now run
`rebuild-kernels`
That's it. The following commands will take you through a more manual process for the rest of the building process.
To actually build the kernel with the new configuration, we run
`pkgmk -u`
It is very likely that this operation will produce a footprint mismatch, so after the build completes, you will likely have to run
`pkgmk -uf`
Finally, we install the custom kernel with
`pkgmk -u`

186
Debugging.md Normal file

@ -0,0 +1,186 @@
ThinStation is a linux distribution with a large number of application packages, so the task of identifying problems when they occur can be a complex process.
Googling and searching the mailing lists is the first point of call. You'd be surprised how many questions have been asked & answered before.
But, if you can't seem to find the answer, we will try to help you narrow down where a problem occurs and help you to find out what caused it. Information gathered by this process will help you, even if it doesn't 'find the answer', in that your peers on the mailing lists will need some of this information to work with. Once you have gathered some information, don't be afraid to ask for help.
But, some good advice on [how to ask smart questions](http://www.catb.org/~esr/faqs/smart-questions.html) before
you post. We will growl, but only when people don't try to help themselves... :-)
Questions on installation & setup (including which drivers to use or settings for applications), should be directed to the ['General' mailing list](http://sourceforge.net/mailarchive/forum.php?forum_name=thinstation-general).
Throughout this section, you may be asked to look at various log files. If you are unable to start your desktop (or don't use one), you won't be able to use any gui tools, so you will need to [get to a console](Console).
## Common Symptoms
This is a list of common symptoms that people encounter. It may help you work out what to do, if not you will need to look at [ThinStation doesn't start, so how can I see the debug information?](Debugging).
### DHCP server not found! Network not initialized
This error has probably occurred because you haven't got the correct module loaded for your network card
If the workstation can't recognise your network card of find your network (maybe you aren't using one), your workstation will stop with
`DHCP server not found! Network not initialized.`
`This error has probably occurred because you haven't got the correct module loaded for your network card.`
`Debug not enabled, boot halted`
As the messages indicate, **ThinStation** stops. Thee easiest fix is to make sure that you included the correct module for your network card, but you may not find it that easy to determine.
To try to work out the module/driver for your network card,
- google for 'linux driver <my network card>', if you know the model
number, or
- include all of the network cards in your image and if it boots OK,
find which module was used by
`cat /var/log/messages | grep eth0`
it should show the module name of the driver loaded. Include just that one in your next build.
If none of this helps, then you may need to
- [Include the debug
package](Debugging)
and then investigate the issue
- [Stop ThinStation from halting too
early](Debugging)
- Setup you **ThinStation** for [non-network
operation](FAQ)
or any combination of the above :-)
### DevStation installer crashes with cpucheck
Change processor type to [qemu64] for the guest.
### A blank screen with an X on it
Another of the most common issues is when the X Window system seems to start, but your program doesn't (ie. you see a blank screen with an X in the middle).
### My screen is blank, but blinks every few seconds
You have been trying to start an application that uses the X Window system and this has been unable to start.
As you have AUTOSTART=On, it tries to restart it, so firstly you will need to turn off autostart. In your thinstation.conf<whatever> file set
`AUTOSTART=Off`
`SESSION_x_AUTOSTART=Off`
then continue as per the next topic...
### I select my application, the screen blinks and I return to the menu
You have been trying to start an application that uses the X Window system and this has been unable to start.
Press Ctrl+Alt+F2 to get a console and look at the var/log/boot.log file.
### USB drives not auto mounting
The first thing to check is your build.conf, make sure these two lines are uncommented
`module autofs4`
`package automount`
Boot this newly created image and run the `df` command, you should see something like:
`/dev/sda1 32523532 33467722 3322 1% /mnt/mnt/usbdevice/<label of your usb device>`
If you still do not see your USB devices showing up, remove the USB and reinsert it, and run the command `dmesg | tail -20` look for any error messages, you may be missing the necessary driver.
If you need USB to work with xfreerdp, add the following to your thinstation.conf.buildtime:
`SESSION_X_FREERDP_OPTIONS="<existing options> /drive:USB,\/mnt\/mnt\/usbdevice"`
This will pass through any USB devices that show up in /mnt/mnt/usbdevice/ dynamically, and will show up as a System Folder:
![USB through xfreerdp](http://i.imgur.com/olJtxkN.png)
## ThinStation doesn't start, so how can I see the debug information?
By default, ThinStation will halt if you have a major error (and it doesn't know what to do). When halted you can't look at anything... :-(
So, there are a couple of things that you can do to help it continue to a stage where you are able to gather the information that you need to find out what the problem is.
### Turn off the bootsplash
Press F2 whilst the bootsplash is showing and it will disappear.
But, if you want to turn off the bootsplash entirely, so that you can see ALL the messages, and you are using syslinux or pxe booting. On the kernel line of your syslinux.cfg or pxelinux.cfg you will find the parameters
`vga=791 splash=silent`
Please remove the splash=silent parameter.
If you also have
`console=ttyS3`
please change this to
`console=tty0`
and then the kernel messages will be displayed on your console (rather than the bootsplash).
If you are building a new image set
`param bootlogo false`
will do the same (and this works for the CD/iso image as well).
### Display more information
Rebuild your image with
`param bootverbosity 63`
or play with the setting to get the level of detail you want.
`0 no verbose messages`\
`1 boot`\
`2 network`\
`4 init`\
`8 kernel`\
`16 modules`\
`32 packages`\
`64 email bootlog file to SMTP server & user set in thinstation.conf file. This will only work if networking is working.`
Combinations can be used eg. 12 (8+4) does Kernel and Init messages
### Stop ThinStation from halting too early
Rebuild your image with
`param haltonerror false` in your build.conf
and
`NO_SESSION=/bin/sh`
`NO_XORG_CMD=/bin/sh` in your thinstation.conf.buildtime
This is particularly useful when there are network problems and will allow the workstation to start even when the network doesn't.
### Include the debug package
Rebuild your image with
`package debug`
**Note:** with debug included your startup will ALWAYS stop after system initiation, so that you can either look at debug information or press enter to continue into the sessions. Remove the debug package when you
have finished.
## Where to find information
The main log files for ThinStation are found in the `/var/log` directory.
- `/var/log/boot.log` contains the ThinStation specific debug
messages
- `/var/log/messages` contains the kernel information & degug
messages (and can be quite big)
- `/var/log/XOrg.0.log` contains the X Window system log, if you
have already started a graphical system. eg. rdesktop, icewm, etc.
(also quite big)
What has been picked up from the various thinstation.con<files> can be found in:
- `/etc/thinstation.defaults` contains the contents of
thinstation.conf.buildtime
- `/thinstation.buildtime` contains the contents of
thinstation.conf.buildtime when built via a TSoM
- `/etc/thinstation.network` contains the contents of
thinstation.conf.network (and other associated network files)
- `/etc/thinstation.user` contains the contents of
thinstation.conf.user
- `/etc/thinstation.runtime` contains the TS calculated settings
To look at these files you will need to [get to a console](Console) or use a filemanager.
`more /var/log/boot.log`
space gives the next page, q exits.

124
Deployment.md Normal file

@ -0,0 +1,124 @@
## Introduction
You have to decide which **medium** a thin client will use to load the ThinStation boot image (“deployment”). You have three options:
Note - All bootloaders besides grub have been deprecated. While many of the concepts written here are still applicable, the only available bootloader is grub, and it supports all booting modes.
1. [[CD/DVD|Deployment#booting-from-cd]] with [GRUB][]
2. [[Removable media or internal storage|Deployment#booting-from-removable-media-or-internal-storage]] with [GRUB][]
3. [[Network|Deployment#booting-from-network-via-pxe]] with [GRUB][]
4. [[Network|Deployment#booting-from-network-via-ipxe]] with [IPXE][]
[IPXE]: https://ipxe.org/
A comparison:
Medium | CD/DVD | removable media | internal storage devices | network
:-------|:---------|:--------------------------|:-----------------|:----
**Initial setup effort** | very low | low | medium | (very) high
**effort of boot image update** | medium | medium | high (low [[Using-the-hdupdate-package]]) | low
**massive parallel booting** | no problem | no problem | no problem | network bottleneck
No matter which way you deploy ThinStation you can always [[fetch configuration files|Configuration#boot-time-configuration]] through the network.
## Booting from CD
A very easy way to boot ThinStation is from CD or DVD.
### Pros and Cons
**Pro:** little setup required; reliable boot process
**Con:** tedious process of (erasing and) writing an optical medium; does not scale (work well) for lots of thin clients (lots of CDs have to be written)
### How to
Fetch the [ISO](https://en.wikipedia.org/wiki/ISO_9660) image file `thinstation-efi.iso` from the subdirectory `build/boot-images/grub` of you build environment and write it onto a CD or a DVD using any available CD/DVD writing application. Now put this CD/DVD into the thin client optical drive and boot from it.
## Booting from removable media or internal storage
If you plan to boot from either removable media or internal storage devices you will probably be using the same bootloader: [GRUB][].
[GRUB]: http://www.gnu.org/software/grub/
### Pros and Cons
**Pro:** little setup required (only BIOS/UEFI); reliable boot process; scales (works) well for lots of thin clients if you have a stable boot image in place
**Con:** tediuous process of writing the boot image to the drive (USB stick, Compact Flash card, SD card, hard disk) To avoid this [[use hdupdate|Using-the-hdupdate-package]].
### How to
1. Is your drive *physically* attached to your development system?
- **Yes**: From inside the chroot environment identify the drive that you want to be bootable.
`fdisk -l |grep -e "Disk /"`
will list all block devices attached to the system (e.g. `/dev/sdb`).
Then run
`mkmbrdrv -o /build/boot-images/grub/efi-source -p d:0:boot <drive ex. /dev/sdb>`\
or\
`flash <device ex. sdb>`
- **No**: Maybe use this [[ CD to USB|Making-bootable-media-on-Windows]]
2. Put your drive (back) in the thin client and boot from it.
When doing a remote install, consider the local-install package or the installer package for an interactive deployment.
## Booting from network via PXE
The easiest and most common method of booting ThinStation from network is by using [PXE](https://en.wikipedia.org/wiki/Preboot_Execution_Environment). PXE is implemented in virtually every modern networking card (including onboard devices on mainboards). Thus it is very likely that your thin client supports PXE booting.
### Pros and Cons
**Pro:** on the client side almost no setup (only BIOS/UEFI) and no storage device is required
**Con:** in your network a set of services (DHCP, TFTP) is required that is not trivial to set up; does not scale (work well) for lots of thin clients (the delivering server is a bottleneck)
### Prerequisites
#### DHCP
PXE requires you to have a working [DHCP] service for assigning IP adresses to thin clients. In addition to that you have to configure two so called DHCP options for requesting thin clients:
1. To tell a thin client where to boot from you have to set option number 66 to the hostname or the IP address of the TFTP file server (serving the boot loader).
2. Each thin client has to know which file to request as a boot loader from the TFTP server. You have to set option number 67 to the exact file name of the PXE boot loader on the server.\
This is `boot/grub/pxeboot.img` for BIOS mode.\
This is `EFI/boot/grubx64.efi` for EFI mode.
[DHCP]: https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
[TFTP]: https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol
#### TFTP
You also need to set up a [TFTP][] file service to deliver
1. the PXE boot loader file (mandatory),
2. the PXE boot loader configuration files (optional but *very common*),
3. the Linux kernel (optional but *very common*),
4. the initial ramdisk ([initrd](https://en.wikipedia.org/wiki/Initrd)) for system boot up (optional but *very common*) and
5. [[boot time configuration|Configuration#boot-time-configuration]] files for ThinStation thin clients (optional but *common*).
Numbers 3 and 4 from above can be delivered by HTTP or FTP servers too. This needs special configuration of GRUB that is not covered here.
All of the above files need to reside in the TFTP server root directory (“TFTP root”) tree that is served to thin clients.
### How to
1. Copy all files from the following subdirectory `build/boot-images/grub/efi-source` of you build environment into your TFTP root directory.
2. Boot your thin client via PXE.
By default all devices booting via PXE will now load your most recent ThinStation boot image.
## Booting from network via iPXE
### Pros and Cons
**Pro:** Faster then PXE when you use HTTP instead of TFTP
**Con:** in your network a set of services (DHCP, HTTP) is required that is not trivial to set up; does not scale (work well) for lots of thin clients (the delivering server is a bottleneck)
### Prerequisites
#### DHCP Server
#### HTTP Server (Webserver)
### How to
1. Build ThinStation.
2. Copy the following files from the subdirectory `build/boot-images/grub/efi-source/boot` of you build environment into your HTTP root directory:
- `vmlinuz` (Linux kernel)
- `initrd` (initial ramdisk).
3. Create boot entry in your ipxe menu
4. If you have fastboot enabled
- Copy `lib.squash` somewhere accessible over http (can be along side `vmlinuz`),
- You might also need to set `FASTBOOT_URL=` in `thinstation.conf.buildtime` to point to the directory that contains this file.
`#!ipxe`<br>
`kernel ${boot-url}/thin/boot/vmlinuz splash=silent,theme:default console=tty1 LM=3`<br>
`initrd ${boot-url}/thin/boot/initrd`<br>
`boot `

65
DevStation-Setup.md Normal file

@ -0,0 +1,65 @@
## What is DevStation?
DevStation is the name of a pre-configured Linux system primarily used for building ThinStation boot images. DevStation is not required in order to use the ThinStation build system, but it's a nice place to start because it helps establish the work flow for building boot images.
[Watch the video.](https://youtu.be/9R5eKjE618s)
## Where to get it
You can obtain DevStation by downloading the installer disc ISO image at <http://sourceforge.net/projects/thinstation/files/latest/download>.
## Installing DevStation
Allthough it is possible to install the DevStation image onto real hardware, most find it considerably faster to develop on a workstation capable of hosting multiple virtual machines (servers, clients and other network appliances).
[Watch the video.](https://youtu.be/9R5eKjE618s)
### Specifications for creating a new virtual machine
Option | Value
-------|------
Type: | Custom
Compatibility: | Default
Installer disc: | dowloaded ISO image file (see above)
Guest OS: | Linux
Version: | Other Linux 2.6.x kernel 64-bit
Name: | DevStation
Location: | Default
Processors: | 1
Cores: | **minimal value 2** 8vCPU recommended
Memory: | **minimal value 4 GiB** 16 GiB recommended
Video Memory: | **minimal value 64 MB**
Network Connection: | Bridged
SCSI Controller: | Default
Disk: | Default
Disk Type: | Default
Maximum disk size: | 30 GB for a shallow single branch checkout. Over 60 GB for deep history and branch comparison.
Disk File: | Default
### Installation steps
1. Power on virtual machine.
2. Select “Installer for DevStation” menu option. GRUB will load a little over 100 MB into memory.
3. Read all notes shown after startup. Select OK.
4. Select Disk to use for installation. Select OK.
5. Select native resolution of the display. Select OK.
6. Select your time zone. Select OK.
7. Select your locale (language, symbols and keyboard layout). Select OK.
8. Confirm all warnings. The installer will download a bootable OS image and several GB via Git.
9. Read all notes shown after installation. Select OK, to acknowledge each one. Remove the CD when instructed to do so. Click OK to reboot.
## Usage
### Booting
Upon rebooting the system should automaticly boot the “Standard” image within a 15 second timeout. A “Backup” image is available in the case that a web update is defective or a local build of the DevStation image does not behave as expected.
### Building Your First Image
Click *Start DevStation Build Image*. This will build a default image that is bootable in a virtual machine. The image will include:
* XFWM4 (Window manager)
* Chromium (Web browser)
* NetworkManager (Networking stack)
* Gnome media packages and plugins
* Xorg drivers for most vendors **(Not the kernel modules though!)**
* FreeRDP (Remote access application)
* Open VM Tools (copy & paste)
* Terminal (shell utility)
* Thunar (file manager)
* Samba (SMB client)
* CUPS (printing system)
* All available time zones
* All available locales
## Whats next?
Please read on [[here|Getting-Started-with-ThinStation#whats-next]].

@ -0,0 +1,33 @@
_This is a page for errors that I encountered enroute to my NoMachine Terminal Server setup as documented [here](https://github.com/Thinstation/thinstation/wiki/Building-ThinStation-for-booting-off-SSD-(Goal:-NoMachine-Thin-Clients))._
### NoMachine package won't install
Encountered [this error](https://github.com/Thinstation/thinstation/issues/644); apparently the download link structure at NoMachine has changed.
Per Doncuppjr's suggestion, I downloaded the NX client manually, and copied it into /thinstation/downloads (I couldn't use wget for the very reason that the build script failed: no link). The problem package was in there, so I knew I was in the right place.
This time the script didn't try to download with wget, but I still got the same error message. I thought it might be still trying to unzip the (original) problem file, so I deleted that one.
`Saving to: './wget_tmp/nomachine-enterprise-client_6.11.2_1_x86_64.tar.gz`
Apparently the NX client version is hard coded in the script? After looking at /ts/build/packages/nx/build/install, and not seeing how to redirect it to the file I downloaded, I renamed the new download to match the failed download:
`sudo cp nomachine-enterprise-client_7.6.2_4_x86_64.tar.gz nomachine-enterprise-client_6.11.2_1_x86_64.tar.gz`
This time, success!
As was noted [here](https://github.com/Thinstation/thinstation/issues/570), the file name comes from /build/build.urls, so I could edit the _param nxurl_, but since I can't feed it the correct download url anyway, it's just as simple to rename the manually downloaded file as I did above.
I got a number of errors running the `mkmbrdrv` command, including...
`blockdev: ioctl error on BLKRRPART: Device or resource busy`
`mount: /tmp/mkmbrdrv.yH4: special device /dev/sdc1 does not exist.`
In most cases, removing the USB drive, and reinserting it in a different slot did the trick. I did have one bad USB drive, so make sure you have several on hand. I don't know what caused the 'mount' error, because running the fdisk command again gave the same output. Below is the output after a successful write to the USB drive.
---
### Local-Install

15
Examples.md Normal file

@ -0,0 +1,15 @@
## Here are a few examples.
The default build. Should work on all VM's, build --allmodules for real hardware
[default](https://github.com/Thinstation/thinstation/tree/6.2-Stable/ts/build/conf/default)
This is the profile I use for the LiveCD that is distributed from sourceforge. Build with --allmodules
[The LiveCD](https://github.com/Thinstation/thinstation/tree/6.2-Stable/ts/build/conf/LiveCD)
This is the profile I use for the DevStation image. You can use it to rebuild your DevStation with a new hard coded password. Build with --allmodules
[DevStation](https://github.com/Thinstation/thinstation/tree/6.2-Stable/ts/build/conf/devstation)
A minimalist build with IceWM and VMView. Use with a machine profile.
[VMWare View](https://github.com/Thinstation/thinstation/tree/6.2-Stable/ts/build/conf/vmview)
A minimalist build with FreeRDP, no WM. Use with a machine profile.
[FreeRDP](https://github.com/Thinstation/thinstation/tree/6.2-Stable/ts/build/conf/freerdp)

813
FAQ.md Normal file

@ -0,0 +1,813 @@
### Disclaimer
> Neither this author nor the project contributors are in any way
responsible for physical, financial, moral or any other type of damage
incurred by following the suggestions in this text or using the
programs. Both this document and the ThinStation program and supporting
programs are presented "as is" without any warranty concerning
functionality or security.
> Any trademark belongs to the respective owners.
### ThinStation features
- Linux kernel 6.1 (this is a moving target so this info may already
be outdated)
- XOrg 7.7 (moving target too).
- Boot media: etherboot, pxe, CD, hard disk, compact flash
- Small image size - typically 30-50 MB or larger with client side web
browsers
- Support of a lot of locales (national languages)
- Client side web browsers - Dillo, Mozilla Firefox, Chrome.
- Network booting using DHCP and TFTP (for etherboot and pxe)
- Samba and NFS file access
- Automatic mount of client floppies, HDs, CD/DVDs, USB storage
- Sound on clients (if supported by the server) and client side
connected printers (LPT and USB) - as well as server and network
printers
- PS/2 and USB keyboards and serial, PS/2 and USB mice
- Scroll wheel mice
- Support for syslog server (to monitor the clients). Remote or local.
- Enhanced Shell with command line editing and history
- Telnet, web and VNC access to clients so the admin can login and
check logs in /var/logs and if necessary reboot the workstation
remotely. Or kill processes.
- Debug package. This stops the inittab entry from working so you
start in a console mode regardless what packages you choose, adds
strace which is useful for seeing where a program fails. When in
debug mode, you can start the session manually by going
start-session 0
### Hardware requirements
- i686 class CPU with 64 MB RAM or better. As of TS 6.1 only x86-64 CPUs will be supported.
- NIC: Anything supported by the current Linux kernel.
- VGA: VESA and anything supported by the current X.org version.
### Where does ThinStation come from
ThinStation was founded by Miles Roper as a fork from Francisco Castro's
Netstation project. With ThinStation 2.0 not much original code resides,
but the concept does. Trevor Batley took over from Miles and from TS-5.x
Don Cupp Jr. is lead.
### Where to get ThinStation and more information
ThinStation is hosted by www.sourceforge.net as
thinstation.sourceforge.net. You'll find two mailing lists there. You
may download both precompiled images (for use in MS Windows-only
environments), a fully configurable Linux version and the entire source
for all Open Source parts.
### How do I change to the console?
Please press Ctrl Alt F2.
### boot without a network:
If you want to boot a workstation running **ThinStation** without a
network or possibly without the dhcp and/or tftp servers (for network
configuration files), please see the [Network
Related](Conf_Example#Network_Related "wikilink") example configuration
items.
But the quick way is:\
in the build.conf file include
`param haltonerror false`
and in your thinstation.conf.buildtime file
`NET_USE_DHCP=Off`\
`NET_FILE_ENABLED=Off`
### network boot with a NIC with a boot ROM:
A boot ROM is a small chip on your NIC.\
If your boot ROM suppports the Intel PXE standard (most do) then use one
of the following options
- *using [PXELINUX](http://syslinux.zytor.com/wiki/index.php/PXELINUX)
(recommended)*
- Copy the files and directories in boot-images/pxe to your TFTPD
root directory.
- Edit the thinstation.conf to match your terminal configuration.
- Add <TFTPD root dir>pxelinux.0 as the boot file to your DHCP
server's configuration (eg. filename=pxelinux.o in dhcpd.conf).
- *using [etherboot](http://www.etherboot.org/)*
- Copy everything from boot-images/etherboot and a
thinstation.conf to your TFTPD root directory.
- Edit the thinstation.conf to match your terminal's
configuration.
- Add <TFTPD root dir>thinstation.nbi as the boot file to your
DHCP server's configuration.
### network boot with a NIC w/o a boot ROM using a boot floppy:
*Outdated - left for reference.*
- You may compensate for the lack of a boot ROM on the NIC by making a
bootable floppy.
- Prepare everything as described above.
- Go to [www.rom-o-matic.net](http://www.rom-o-matic.net) and make the
bootable floppy as explained at that site.
- ... or get Paolo Silvan's contributed [Universal network boot
floppy](http://sourceforge.net/project/showfiles.php?group_id=80408&package_id=97496&release_id=190646)
if your NIC is among the 30 most popular.
### network boot with a NIC w/o a boot ROM using a harddisk:
*Outdated - left for reference.*
You may also boot using a harddisk instead of a floppy via
([etherboot](http://www.etherboot.org/)).
See Alexander Heinz's excellent guide on <http://etherboot.anadex.de/>.
### boot from local storage media (hard disk, CD, Disk-on-Chip/CF...)
Booting off local media gives you the choice of methods:
- from a CD (isolinux)
- from your hard drive, usb stick or cf card (syslinux)
- from your Windows/DOS system (loadlin)
Please note you do still need a TFTP/SCP/HTTP server to deliver the
thinstation.conf file unless you have adapted the
thinstation.conf.buildtime correctly and
- make an unique image for each computer, or
- use the STORAGE\_CONFIG\# option in thinstation.conf.buildtime and
have a local thinstation.conf.user directly on the media as
\$STORAGE\_CONFIG\#/thinstation.profile/thinstation.conf.user.
***CD:***
Burn the file boot-images/iso/thinstation.iso as an image (NOT a file!)
with your favorite tool (cdrecord thinstation.iso under Linux is one
suggestion...).
***syslinux:***
Copy the files in boot-images/syslinux to the storage media and run
`syslinux /dev/`<device>
More info on [syslinux](http://syslinux.zytor.com/faq.php)\
Lars Karlslund has contributed a ThinStation [Compact Flash card +
syslinux boot HOWTO](http://thinstation.sourceforge.net/CF-HOWTO.html)
***loadlin:***
*Outdated - left for reference.*
Copy the files in boot-images/loadlin to your Windows/DOS media (only
FAT supported) and run
`ts.bat`
More on [loadlin](http://en.wikipedia.org/wiki/Loadlin)
### PKG packages
PKGs are plain ThinStation packages in tgz format that is added after
boot of the core system. This allows you to keep the image size small
and only load packages when you need them (controlled by the
*thinstation.conf<something>* files. You may load PKGs both from the
TFTPD and from local media. Most packages may be PKGs. The environment
variable **PKG\_PATH** in build.conf will let you set a subdirectory to
store the.pkg files.
Configuring ThinStation
-----------------------
All client configuration is done in a *thinstation.conf<something>*
file.\
This section describes how and in what order the various configuration
files are used.\
Also see [descriptions and settings of runtime
parameters](thinstation:Conf "wikilink").
After building, you end up with the initial *thinstation.conf.sample*
file, that is unique for the selections made in *build.conf*. This file
should be edited to your likings and renamed (copying is actually
smarter :-) according to the following:
It is possible to have multiple *thinstation.conf.<something>* - 'conf'
files are looked for in this order:
- *thinstation.conf.buildtime* (**ONLY used at build time** - puts
config directives in the boot image). If you edit
*thinstation.conf.buildtime* you must rerun the build script:
*./build --buildtime thinstation.conf.buildtime*. This step is done
automatically for TS-O-Matic users.
- *thinstation.conf.network* (default or global config, pulled from
tftp server)
- *thinstation.hosts* (contains host, MAC, and group mappings). This
file is optional, but may be useful for management.
If *thinstation.hosts* exists, the following file(s) are looked for
(careful! Note where to use "." and where to use "-"):
- *thinstation.conf.group-<groupname>* (there can be multiples of
these)
Next - or if no *thinstation.hosts* was found - these files are
requested:
- *thinstation.conf-<hostname>* (e.g. *thinstation.conf-my\_pc*)
- *thinstation.conf-<IP ADDRESS>* (e.g.
*thinstation.conf-192.168.1.2*)
- *thinstation.conf-<MAC ADDRESS>* (e.g.
*thinstation.conf-112233445566*)
- *thinstation.conf.user* (locally stored configuration, placed as
**STORAGE\_CONFIG\#**/thinstation.profile/thinstation.conf.user. \#
being a number)
Each file that is found is downloaded, and then the client looks for the
next file in the list. So a client will start with whatever you had
defined in *thinstation.conf.buildtime* when you built the image. Then
it checks the TFTP server (if this has been activated in
thinstation.conf.buildtime): the first thing is looks for is
*thinstation.conf.network* (which typically exists), and it reads in all
of its settings. Then the client requests *thinstation.hosts*. If there
is a thinstation.hosts on the TFTP server, the client will read in all
available group config files (one at a time) that are found on the line
matching the host's name and MAC address; Otherwise (or next, if
*thinstation.hosts* was found), it will check for a hostname-specific
conf file; then an IP-specific conf file; and finally a MAC
address-specific conf file. A few notes about this process:
- conf files are NOT mutually exclusive. All valid conf files that are
read during the boot process are used. So you can, for example,
define some sessions in *thinstation.conf.network*, some special
application for certain users in
*thinstation.conf.group-specialapp*, and add additional video driver
parameters for the one user with a super-high-resolution video cards
in *thinstation.conf-hirezmachine*. Things only start to get tricky
when you realize that you can have the same configuration
directive(s) in any or all of the conf files the client reads; then
you need to know the order in which they were read to figure out
which one's directives will take precedence (which will be the last
one read).
- All conf files EXCEPT *thinstation.conf.buildtime* and
*thinstation.conf.user* are stored on the network:
- *thinstation.conf.buildtime* is part of the ThinStation
distribution; it only gets read when the boot image is first
created. The directives in this file, if included, become the
defaults for ThinStation, but will likely be overridden by any
of the other conf files.
- *thinstaion.conf.user* is stored on local media (e.g., the hard
drive of the client computer with the path
**STORAGE\_CONFIG\#**/thinstation.profile/thinstation.conf.user),
and its configuration directives override ALL other conf files.
The client will only know to look for this file if
*thinstation.conf.buildtime* is properly configured with the
**STORAGE\_CONFIG\#** setting.
- you can change **where** on the TFTP server the other files are
kept by changing the **basepath** value in build.conf, and you
can even change the names of all of these files from
*thinstation.conf\** to *somethingelse.conf\** by changing the
**basename** value in *build.conf*.
- Creating a *thinstation.hosts* file is necessary in order to take
advantage of using conf files for machines specified by name or
groups. If all of your clients are exactly the same and your users
have the same needs, you can probably just create a single
*thinstation.conf.network* and put all the configuration settings in
there, and you're done. Most users, however, will probably want the
*thinstation.hosts* file. Take a look at
*thinstation.hosts.example*; you'll notice that you can have
multiple groups associated with each host. The groups' conf files
are read in the order they are listed on that line, so the 'later'
on the line the group is, the more significance it has.
- Beware you can't add features in a *thinstation.conf<something>* not
already build into the image (pre-built or defined by your own build
by *build.conf*)! (ie, defining an ICA session in a config file
won't help you if you didn't include the ICA package in
*build.conf*).
DHCP and TFTP Server configuration
----------------------------------
ThinStation normally needs (at least) three servers to work: a DHCP, a
TFTP server and one or more application server(s). These may very well
be the very same computer hardware. But if you boot from local media you
can avoid the DHCP and/or TFTP server.\
However, if you have many clients you would probably prefere both a DHCP
and a TFPT server to make your life easier.
DO NOT INSTALL ANY SERVERS ON YOUR NETWORK UNLESS YOU ARE ALLOWED TO DO
SO! They may conflict with existing servers on your network making you
*very* unpopular...
### DHCP
A DHCP server (or "daemon" in the unix/Linux world) hands out an ip
number for your client upon request and names the TFTP server as well as
the name of the download directory and the client image on the TFTP
server.
Windows 2000/2003 DHCP servers works fine, but if you use a Windows NT4
server you need Service Pack 4+ (you should have SP6 anyway).
Any current Linux DHCP daemon is fine AFAIK, but you would probably
choose [DHCP3](http://isc.org/products/DHCP/dhcp-v3.html) by
[isc.org](http://isc.org/).\
Paul Whittaker has a great piece on Windows 2000 and DHCP
[here](http://diet-pc.sourceforge.net/windows/etherboot-w2k.html).\
And there is a fine Linux guide at
[www.Linux.org](http://www.linux.org/docs/ldp/howto/mini/DHCP/).
### TFTP
The TFTP server manages the download of the boot image to the client.\
The TFTP server *must* support the "tsize" option when using PXE boot.
Stolen directly from Paul Whittaker's
<http://diet-pc.sourceforge.net/setup.html#tftp> (May 2003):\
<quote>\
If you are using a network boot loader, you must install and activate a
TFTP service on your designated boot server. Most operating systems come
with a TFTP server package, but it is usually not installed by default.
In the case of Windows 2000 Server or Windows 2003 Server, the TFTP
server is an integral part of the Remote Installation Services (RIS)
package, and is difficult to use in isolation (see the [Windows 2000
Etherboot
HowTo](http://diet-pc.sourceforge.net/windows/etherboot-w2k.html#tftp)
for details). Morgan Simonsen has constructed a [standalone TFTP
server](http://www.simonsen.bz/w2k_standalone_tftp_dameon.htm) package
based on the native W2K/W2K3 server, which is a much simpler alternative
to installing RIS. Earlier versions of Windows lack a TFTP server; in
such cases a third-party product such as
[tftpd32](http://tftpd32.jounin.net/) is needed.
If you intend to use PXELinux, you must use a TFTP server that supports
the tsize option. For any PXE boot method, a TFTP server that supports
the blksize option is highly desirable, as PXE boot loaders can make use
of larger blocksizes for faster booting. I recommend using either the
native Windows 2000/2003 TFTP server or
[tftpd32](http://tftpd32.jounin.net/) on Windows, and
[tftp-hpa](http://www.kernel.org/pub/software/network/tftp/) (usually
the default TFTP server in recent Linux distributions) on UNIX
platforms.
To activate the TFTP server in Linux, you would typically install the
TFTP server package (RPM, DEB, etc), set "disable=no" and
"server\_args=-s /tftpboot" in /etc/xinetd.d/tftp and restart xinetd
using "sh /etc/init.d/xinetd restart" or similar.
Set "umask 022" to ensure world-readability.\
</quote>
The MS Windows servers come with a build-in TFTP server called "Remote
Installation Service". However, it needs a domain controller to work,
unless you use a
[hack](http://www.simonsen.bz/w2k_standalone_tftp_dameon.htm) by Morgan
Simonsen (mind you - you still need a valid MS Windows server license).
An other possibility to get a small and simple combined DHCP and TFTP
server for MS Windows is <http://tftpd32.jounin.net/> (supports "tsize"
for PXE boot). To run it automatically as a service, use
[FireDaemon](http://www.firedaemon.com/) (free for non-commercial
purposes).
Check out Zack Forsyth's excellent guide [Running a non-RIS TFTP server
as a service in MS Windows
server](http://thinstation.sourceforge.net/tftpd-service.html)
concerning this.
## Debugging
OK, you have a problem and you have read the FAQ & FAQ + and can't seem
to see what is wrong.
So how do we find out what has happened and really discover the problem
(and hopefully the fix)?
Due to the number of different software packages involved in
ThinStation, this is a topic that requires it's own
[[Section|Debugging]].
## How does a thinstation thinclient get booted?
1. The kernel gets loaded.
2. The kernel loads initrd and starts from it.
3. Busybox init process gets started -- `/etc/inittab`
4. Runlevel scripts get started -> `rc2.d` `rc5.d` package scripts
5. Autologin on console with `TERM` set to `xinit`
6. `/etc/profile` starts xinit for X GUI.
7. Window manager comes up.
## Booting ThinStation
### Can I have individual configuration files for different clients?
Yes.
In your TFTP server's download directory you just create a configuration
file named *thinstation.conf-<ip address>* (e.g.
*thinstation.conf-192.168.1.2*) or *thinstation.conf-<MAC address>*
(e.g. *thinstation.conf-12AB34CD56EF*).
A file just named *thinstation.conf.network* will be the default
configuration for all ThinStations.
If you have made a *thinstation.hosts* file (which maps MAC addresses to
host names) you can name the configuration file
*thinstation.conf-<host name>* (e.g. *thinstation.conf-peter*). Much
easier to remember.
### Can I have individual image files for different clients?
Easily - if you boot off a local media, but it is not so easy with
network boot. Usually the DHCP server tells the client to ask the TFTP
server for one specific image.
However, you can let the DHCP server detect the clients MAC address
first and then hand out a specific ip address AND a unique image file
name to the client. This way you lose some of the flexibility of using
DHCP, but you get a more secure network, since you are in control of
which NICs are acceptable to get net access.
Normally you should be able to make a comprehensive image which covers
any clients and then use the conf file to select the needed modules for
the individual client.
### My NIC does support PXE but PXE boot doesn't work
If you have an early PXE implementation, it might be buggy. See
<http://syslinux.zytor.com/wiki/index.php/Hardware_Compatibility>.
Version 2.0 or newer is preferable. Most NIC manufacturer make update to
the PXE bios, which may be upgraded.
However, double check your DHCP/TFTPD setup and ensure that if you have
changed the **basepath** or **basename** parameters in *build.conf* you
have put your pxe files in the appropriate directory.
### My NIC doesn't support PXE and making/buying a boot ROM for it is out of the question. Can't I just boot off a hard disk?
Sure. Make a small DOS (FAT12 or FAT16) partition and use loadlin or
[syslinux](http://syslinux.zytor.com/) to boot (loadlin is simple,
syslinux offers more candy). See [How to install
ThinStation](FAQ#How_to_install_ThinStation "wikilink").
#### How much disk space do I need then?
8 to 20 megabytes if you can afford it (depending on what applications
you load).
#### So little!? Couldn't I use a USB keyring or a Compact Flash Card
instead?
Yes - see Lars Karlslund's contributed [Compact Flash card + syslinux
boot HOWTO](http://thinstation.sourceforge.net/CF-HOWTO.html).
### Can I boot off a CD (KNOPPIX style)?
Yes. That's what the ThinStation boot CD does! You can use ThinStation
without ever touching your PC's harddisk.
### Can I boot off a CD if my BIOS/CD doesn't support boot?
Yes, with a little help from a boot floppy: [Smart Boot
Manager](http://btmgr.sourceforge.net/).
### Can I boot off just a floppy?
Well, you can mimic etherboot with a floppy even if your NIC doesn't
have a boot ROM. This mean you can use a floppy to connect to the DHCP
and TFTP server and download the rest. Maybe a bit slow during boot, but
it works well.
Goto <http://www.rom-o-matic.net/> and download an image for your NIC.
Follow the instructions on that site to make a net bootable floppy.
### Can I avoid the TFTP server?
Yes, but it requires booting from local media.
If you don't need any reconfiguration of ThinStation once it is built,
you just hardwire all configuration within *thinstation.conf.buildtime*
(ensure that you have NET\_FILE\_ENABLED=Off to avoid looking for
configs from the server).
If you want to use local configs, set **STORAGE\_CONFIG\#**=...
correctly in *thinstation.conf.buildtime* and supply a
*thinstation.conf.user* file with the path
***STORAGE\_CONFIG\#**/thinstation.profile/thinstation.conf.user* (\#
being a number between 1 and 8).
### Can't I avoid the DHCP server?
You must boot from a local media then.
Setup all the network parameters in *thinstation.conf.buildtime* and
then build the image.
You can still get your configs from the tftp server if you want, but
will have to define where to find it with
NET\_FILE\_ALTERNATE=<IP of TFTP server> in your
*thinstation.conf.buildtime*
## Peripheral Questions (NIC, Video, Mouse etc.)
### Which mouse protocol to use ?
For a traditional serial mouse (rhombic 9 pin connector) you probably
need the MICROSOFT protocol. Mice with a PS/2 connector (small round
one) needs ... PS/2 :-). However, wheel PS/2 and USB mice need the
IMPS/2 variant. For unsual mice see
<http://www.faqs.org/docs/Linux-mini/XFree86-Second-Mouse.html#PROTOCOL>
### How do I get the scroll wheel on my mouse to work?
Assuming the server and the server software application supports the
scroll wheel, all you have to do is to change one line in the
thinstation.conf:\
\* From: X\_MOUSE\_PROTOCOL="PS/2"
- To: X\_MOUSE\_PROTOCOL="IMPS/2"
Remember to hard reboot your ThinStation afterwards
### How do I get my USB mouse to work?
You will need to use X\_MOUSE\_DEVICE=/dev/input/mice in
*thinstation.conf* to support a USB mouse, in addition to including the
"usb-hid" in *build.conf*.
### The ThinStation X server doesn't start - it keeps on trying and trying.
First make sure you have setup the mouse correctly. A misconfigured
mouse can prevent X from starting! Go figure...
Next make sure you have built in the correct video driver in the image.
Try the VESA driver alternatively (any video card should be VESA
compatible). Make sure X\_HORIZSYNC and X\_VERTREFRESH in
*thinstation.conf* has the correct values (or comment them out if you
don't know). X servers can be very picky about this!
If you have trouble finding the right modes, have a look at
<http://www.ibiblio.org/pub/Linux/docs/HOWTO/XFree86-Video-Timings-HOWTO>
### My BFG9000-Pro mk. III-c (or whatever) graphics card ain't supported by ThinStation. But XOrg 6.9 supports it!
If there is a driver for for your video card and it is for the same XOrg
version as ThinStation uses (currently 6.9) and if it is compiled with
GCC 2.95 (this is becoming uncommon), then support it yourself :-)
Create the directory structure
<base>`/packages/xorg6-`<name>`/lib/X11/modules/drivers/`
Put the driver itself (<name>.o) there and chmod it into -rwxr-xr-x.\
Edit build.conf and add xorg6-<name> as a module and rebuild. And done!\
If there isn't any XOrg 6.9 support you still might still try the VESA
driver, though.
### My keyboard layout isn't supported or is broken
See the [keyboard request
guide](http://thinstation.sourceforge.net/keyboard-guide.html). However,
see also [Faulty keyboard layout with MS Windows server using
RDP](#Faulty_keyboard_layout_with_MS_Windows_server_using_RDP "wikilink")
(rdesktop)
### Seamless Integration of Client Side Floppies and CD-ROMs with MS Windows Terminal Servers
By Robbo Aylett, ICT Services, Hobart College, Olinda Grove Mt. Nelson,
Tasmania Australia. 7007. (robbo.aylett AT hobart.tased.edu.au) Edited
by Mike Eriksen January 2004
Often you see thin client users confusing their local floppy and CD-ROM
drive with the servers drives.
To get around this issue, you simply have to activate Samba support in
ThinStation and add the following to the MS Windows server logon script:
net use a: \\\\%CLIENTNAME%\\floppy net use d: \\\\%CLIENTNAME%\\cdrom
This is referred to by some Windows Admins as a MAP BACK.
(EDIT: From the mailings lists, it has been suggested to use: net use x:
\\\\%CLIENTNAME%\\<device> "" /user: not to get problems with encrypted
passwords. Mike)
(NOTE: If you can't or don't want to use the thinstation default share
names, you can change the defaults to anything you want. For example,
you might want to change them to a\$ and cdrom\$ by editing the
\$SAMBA\_FLOPPY and \$SAMBA\_CDROM entries in
packages/samba-base/lib/smb.conf.tpl before building thinstation-2.0.
(the trailing \$-signs makes the drives hidden from My Network
Places-browsing - you may want this if you haven't complete physical
control over your network). If you do change the defaults, make sure to
change your logon scripts too!
However, before this will work, you have to disable the floppy drive on
your terminal server and thus remove "A:\\" so you can map it as a
network device.
To do this, login to your MS Windows 2000/2003 terminal server(s) and
open up the device manager (right click on My Computer and Select
"Manage". In the new dialogue box, expand Device Manager by selecting
it. In the device tree, look for "Floppy disk controllers" expand it.
You should see 1 entry there, right click on it and select "disable".
(Being in Windows, you may or may not need to reboot. You will need to
if you decide to re-enable it, though) Only do this, if you have no need
for a floppy disk when logged into the console session of your terminal
server.
If you really want to map a thin client CD-ROM drive to "D:\\" but the
server's CD-ROM is already there, you can use Disk Management to
re-assign the CD-ROM to drive "E:\\" (or another letter or NTFS folder
of your choice...) and then map the thin client CD-ROM drive to "D:\\",
like in the example above.
You may need to remove the Server CD-ROM, by disabling it in Device
Manager, so users don't see 2 CD-ROM drives and get confused.
I hope this helps you with your floppy and CD-ROM access!
## UNIX Servers
### The X font server doesn't work
Make sure you use the right tcp port on the font server e.g.
X\_FONT\_SERVER=192.168.1.2:7100 (at least Red Hat uses port 7100 but
check with your distro) in *thinstation.conf*.
### I can't connect to a unix server using X (just black screen and mouse pointer)
Make sure XDMCP is running on the server and accepts connections. There
is a good step-by-step procedure at
<http://www.redhat.com/mirrors/LDP/HOWTO/XDMCP-HOWTO/procedure.html>
(not Red Hat specific).
## Microsoft Windows / Citrix Servers
### Poor colors and no sound connecting to a MS Windows server with RDP (rdesktop)
NT4TSE and Windows 2000 Server only support 8 bit (256) colors. Windows
2003 Server support 24 bit color (16. millions) and XP 16 bit (65536)
colors. Make sure to have a "-a 24" or "-a 16" as command line option in
*thinstation.conf*.
However, make sure you run the ThinStation client at at least 16 bit
color. You may get strange results if both the ThinStation client and
the MS Windows server use 8 bit color maps (more info
[below](#Psychadelic "wikilink")).
Windows 2003 support sound redirect (if configured properly). Use the
"-r sound" command line option.
### Psychadelic colors when using 8 bit colors with RDP (rdesktop)
This happens when both the ThinStation client and rdesktop is configured
to use 8 bit color. The problem is that with that few colors (256), a
palette is used to define the color scheme, and this has to be share
among all applications. The solution is to run the ThinStation client in
either 15, 16 or 24 bit color depth.
### Faulty keyboard layout with MS Windows server using RDP (rdesktop)
Rdesktop has a few problems with some non-US keyboards. Check out the
rdesktop CVS to see which has already been fixed.
If you report a keyboard problem to the mailing lists, please follow
this guide: [keyboard
guide](http://thinstation.sf.net/keyboard-guide.html).
### Flickering display with animated content in MSIE
See this [knowledgbase
entry](http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q271/2/46.ASP&NoWebContent=1).
Easy in IE6, but requires a registry hack in 5.5. Thanks to Chris
McKeever for this one.
### Cool! I just run MS Windows on a server and save all the licence money!
Well, that would be illegal.
In order to connect with terminal services to your Windows server from
ThinStation, each client must have:
A CAL (Client Access Licence - you get 5 or 10 CALs for "free" with the
MS server licence).
A TS-CAL (Terminal Server CAL.)\
(note the difference between CAL and TS-CAL. A TS-CAL is more expensive
than a CAL). Please read here for a more detailed and authoritative
answer:
<http://www.microsoft.com/windows2000/server/howtobuy/pricing/tsfaq.asp>
Also, Brian Madden has a good page on [Windows 2003
licensing](http://www.brianmadden.com/content/content.asp?id=154).
So, using ThinStation you save:
- The money for the client operating system itself (you just have to
pay for the CAL and the TS-CAL)
- Really a LOT on client administration
### How do I use 128 bit encryption with ICA?
Add `param icaencryption true` to *build.conf* and `ICA_ENCRYPTION="RC5 (128 bit)"` to a *thinstation.conf*.
## ThinStation as a Workstation
### Can ThinStation be a light Linux workstation - or how do I get root access?
Yes, but ThinStation is a minimal thinclient, so you will have very few
tools and no compilers etc,.
The standard XWindows interfaces are icewm or blackbox.
To login in text mode you have to press Ctrl-Alt-F2 (even if you are in
rdesktop or ICA mode or what-ever).\
Login as root.\
The password is *pleasechangeme* as default (Change it!!! - see below).
### How do I change the root password - and should I change it?
YES! You really must change it! Why? Hmmm - only you, me and the rest of
the internet know the default root password is *pleasechangeme*... And
you shouldn't trust me :-)
The password is set in *build.conf* (param rootpassword)
### Can the clients have a /etc/hosts file the usual unix style?
Yes and no. There is no traditional editable hosts file, but you may
tweak the ThinStation setup to support the same functionallity.
Edit the file packages/base/etc/init.d/network at line 283 (just before
\# Add Mac Address to .conf file) and add:
`echo "192.168.1.2 my_server1" >> /etc/hosts echo "192.168.1.3 my_server2" >> /etc/hosts`
(use your own relevant numbers and names). Note the double \>\>.
You can add as many as you need.
Rebuild.
### How are the clients named networkwise when using DHCP?
As default they are named ts\_<MAC address>. "ts\_" is defined in
thinstation.conf by the NET\_HOSTNAME entry. You may change this, but if
you use more than three characters the MAC address will be truncated.
However, you may make the file thinstation.hosts in the root directory
(where the kernel and the image is) to link a name with the MAC-address.
The syntax is:
`# You can have any amount of spaces/tabs between names `\
`# HOST MAC GROUPS COMMENTS `\
`bigboss 000103014152 printer hires # On Miles Desk `\
`daffy 0060082FCBE8 # Daffy's workstation `\
`donald 00A02403B0BE printer # Donald's workstation`
This will name the clients bigboss, daffy and donald.
### What is the group configs about?
Imagine you have a LOT of ThinStations. Some are old Pentium Classics,
some are newer and have a printer attached and some have a good VGA and
large, new monitors.
Instead of making individual *config-files* for all your ThinStations
you can group them with *thinstation.hosts* and create a
*thinstation.conf.group-<group name>* (e.g
*thinstation.conf.group-printer*). A
*thinstation.conf.group-<group name>* is just another *thinstation.conf*
with a different name (as is *thinstation.conf.buildtime*).
Be careful with all these "thinstation.conf" variants: the latest read
will overrule an earlier read. See [Configuring
ThinStation](FAQ#Configuring_ThinStation "wikilink")
## Miscellaneous
### Why does TS try to download the config file from a TFTP server when I boot from a local media?
Because you did not set NET\_FILE\_ENABLED=Off in
thinstation.conf.buildtime!
### Do you have more docs on ICA, rdesktop, tarantella, blackbox...
We don't really document all the connectivity packages (ica,
rdesktop...) since the developers behind them have more knowledge and do
it much better than we can.
Search at the parent package's homepage and get better advice. We have
links to some of them
[here](http://sourceforge.net/apps/mediawiki/thinstation/index.php?title=Application_Links).
### Can I add my own package to ThinStation?
Yes. It requires some Linux/programming skills, though.
Look at the Developer documentation [Create your own
package](Developer:Create_your_own_package "wikilink")

29
Fastboot.md Normal file

@ -0,0 +1,29 @@
# Fastboot - What does it do? How does it help?
Simply put, fastboot attempts to defer as much of the file-system as it can during the initial kernel and initrd loading.
This is a multi-step process.
1. During build. The final desired file-system is divided in two. The first part is all the essential bins, libs and configuration information that is needed to bring the system up to a point where it can load the remainder of the file-system from the original source medium, such as the network, CD or HD. The second part is a mangled(truly) pile of remainder called lib.squash. It contains all the high level user bins and libs for applications, gui's, Xorg and assets galore.
2. During booting, The remainder of the file-system is transferred from a network location, or loaded into memory from local storage. It is then mounted at /lib.
The main benefit of this approach, is that coming out of the BIOS bootloader, or EFI startup, can be a very slow process. Every byte takes a lot of time to download, or load from disk. Conversely, once the kernel starts, we have a lot of options, and DMA to enable very fast loading from both local and network mediums.
It's a little ugly under the covers, but were dealing with embedded here. Having a file-system that is coherent to a human would be a penalty. If we let go of that requirement, we get to play with some fun new ideas.
### Caveats: The base file-system must have enough modules, firmware and configuration to get to the remainder.
If your having difficulties getting a stable system, or init fails to complete in the way you expect, try setting
param fastboot disabled
in build.conf
The system needs to know how it was booted, so that it can make the right choices in the most direct way to find the remainder of the file-system to load. This is done with the parameter "LM=[2-4]" on the kernel command line.
2. Try and continue from a hard drive or thumbdrive. The drive should have an entry in thinstation.conf.buildtime listed as MOUNT_[0-9], that will be mounted at /boot. For example
MOUNT_0="LABEL=boot /boot auto x-mount.mkdir,defaults 0 0"
3. Try and continue from the network. You will likely need to use the autonet package instead of network manager. If your kernel and initrd were loaded from http, then lib.squash will also load from http, alternatively, you can set
FASTBOOT_URL="http://[dir containing lib.squash]"
If your kernel and initrd were loaded by tftp, you may need to set
SERVER_IP="[IP of Server]"
4. Try and continue from a CD. The CD needs to have a label equal to $CDVOLNAME. CDVOLNAME is "ThinStation" by default.
While it is possible to mix starting and continuation methods, that would be silly. Also, trying to move files from one type of medium to another, like making a thumbdrive out of an ISO is problematic, but not impossible.

3
Fools-Tools.md Normal file

@ -0,0 +1,3 @@
## Some of my scripts. Rough......
[Fools Tools](https://github.com/Thinstation/thinstation/tree/6.2-Stable/ts/bin)

@ -0,0 +1,40 @@
## Choosing a build environment
First of all you have to set up a **[ThinStation](https://thinstation.org/) build environment** for boot images. You can choose between either
* a pre-configured, dedicated Linux installation called **[[“DevStation”|DevStation setup]]** or
* a **standard Linux installation** of your choice. Read on for further instructions.
[Watch the video.](https://youtu.be/9R5eKjE618s)
## Cloning the ThinStation Git repository
Lets assume you chose the second option from above. Then you need a reasonably modern Linux installation with [Git](https://git-scm.com/) installed.
Start up a shell window and run:
git clone --depth 1 https://github.com/Thinstation/thinstation.git
This will clone the current stable ThinStation branch into a newly created directory `thinstation`.
## Building a boot image
Enter the [chroot](https://en.wikipedia.org/wiki/Chroot) building environment as _root_ (use **sudo** on Ubuntu):
```
cd thinstation
./setup-chroot
```
You'll always launch this before creating a new build or iso.
This will take a few seconds. You will end up reading the file [`README.md`](https://github.com/Thinstation/thinstation/blob/6.2-Stable/README.md). Leave the pager application by pressing `q`.
Lets move on with building your first ThinStation boot image (always as _root_ in chroot environment):
```
cd /build
./build --savedir
```
This will again take some time (up to a few minutes, depending on your system). Afterwards in the subdirectory `boot-images`, multiple flavors of boot images will be available. You could now go and [[boot|Deployment]] any of these images, but they probably will be of no real use to you, as the default config is very generic. Most people getting into ThinStation usually need a very specific result, so we need to edit the configs to make something tailored to your environment.
## Whats next?
After having seen how to build ThinStation boot images, it is time for you to adapt the configuration to your requirements. This involves
* deciding how to **[[deploy|Deployment]]** ThinStation (how to boot up your thin clients),
* analyzing the **target hardware** (where your boot image is intended to be run on),
* choosing the **applications** (or protocols) to be used by the end user and
* for each application defining the **parameters** (details on how it should operate). See [[here|Configuration]] for further instructions.
From time to time you will want to [[update your repository|Updating-your-repository]].

18
Home.md

@ -1 +1,17 @@
Welcome to the thinstation-ng wiki!
Welcome to the ThinStation wiki!
Please have a look at the [ThinStation homepage](http://thinstation.org/) and then review [[Getting Started with ThinStation|Getting Started with ThinStation]].
The outline on the right side is just a selection of topics. For all wiki pages click on “Pages”.
ThinStation is a basic and small, yet very powerful, Open Source [thin client](http://en.wikipedia.org/wiki/Thin_client) operating system supporting all major connectivity protocols: [Citrix](http://citrix.com/) ICA, [Redhat](http://www.spice-space.org/) Spice, [NoMachine](http://nomachine.com/) NX, [2X](http://2x.com/) ThinClient, [Microsoft](http://microsoft.com/) Windows terminal services (RDP, via RDesktop/FreeRDP), [VMWare](http://www.vmware.com/products/horizon-view) Horizon View, [Cendio](http://cendio.com/) ThinLinc, [Tarantella](http://en.wikipedia.org/wiki/Tarantella,_Inc), [X](http://xorg.freedesktop.org/wiki/), [telnet](http://en.wikipedia.org/wiki/Telnet), [tn5250](http://en.wikipedia.org/wiki/Tn5250), [VMS](http://en.wikipedia.org/wiki/OpenVMS) terminal and [SSH](http://en.wikipedia.org/wiki/Secure_Shell) (No special configuration of the application servers is needed to use ThinStation).
ThinStation is mainly intended for schoolroom, office, company or department use, but can be used at home (eg. for a silent PC in the bedroom that 'runs' XP on your workstation in the back room).
While ThinStation is based on Linux, users may actually never see Linux at all. If you decide to connect directly to a Microsoft Windows, Citrix or Unix server, the user will feel that they are running directly on the server. But, you can also have a local Desktop interface (with a local Browser & other tools).
ThinStation supports a Microsoft Windows-only environment and REQUIRES NO UNIX/Linux KNOWLEDGE.
ThinStation runs on ordinary PC hardware (64 bit i686 class). You may either reuse older computers or save a lot of time on workstation administration. Or both! An old Core2Duo with 2GB of RAM or better can be a perfectly useful workstation. And you don't need a hard disk - you can boot off the network and even have a silent workstation. Workstation devices (floppy/HD/CD/USB) and printers (LPT/USB) are supported.
ThinStation can be booted from network (e.g. diskless) using Etherboot/PXE or from a local floppy/CD/HD/flash-disk, and prebuilt images and a Live CD are available. The thin client configuration can be local or centralized to simplify management.

@ -0,0 +1,27 @@
This is a sub-page of [my experience](https://github.com/Thinstation/thinstation/wiki/Building-ThinStation-for-booting-off-SSD-(Goal:-Terminal-Server-Thin-Clients)) setting up a terminal server with ThinStation clients.
I experimented with NoMachine Enterprise Server, which was a good product, but pricey. I found ThinLinc, which had a feature that made me move that direction: the ability to customize (via a web configuration page) the menus users see and the apps they have access to.
First glitch was that the server installation halted with an error message. In the terminal, I discovered that it couldn't install pythonGTK, because it couldn't find Python-gtk2. ThinLinc [knows about this](https://www.cendio.com/bugzilla/show_bug.cgi?id=7508), and this thread has a link [here](https://askubuntu.com/questions/1235271/pygtk-not-available-on-focal-fossa-20-04) that got me past that hurdle.
>cd ~/Downloads
>wget http://archive.ubuntu.com/ubuntu/pool/universe/p/pygtk/python-gtk2_2.24.0-5.1ubuntu2_amd64.deb
>sudo apt-get install ./python-gtk2_2.24.0-5.1ubuntu2_amd64.deb
This will give more errors, but following the apt-get suggestion (apt --fix-broken install) should fix it.
At this point, the installer GUI pulled up, the server installation completed, and I clicked through to begin the server setup. Here I hit a glitch with python-ldap. I found [these notes](http://geobib.fr/blog/2020-08-28-python-ldap-ubuntu-20), and after [installing pip](https://linuxhint.com/installing_pip_linux_mint/), I ran these commands to install python-ldap:
>sudo apt install python-dev libldap2-dev libsasl2-dev gcc
>pip install python-ldap
I reran the ThinLinc Setup, but for some reason, it still didn't work. Since I'm not planning to use LDAP, I let it go for now. (*NOTE:* you need to uncheck the option to install this package so that the setup will finish.)
Installing VirtualGL made a significant difference. Make sure to follow the directions explicitly, especially about when to install proprietary drivers.
1. Uninstall (or wait to install) nVidia proprietary drivers.
2. Install the VirtualGL package.
3. Install nVidia drivers.
4. Configure VirtualGL (vglserver_config). We said 'No' to all 3 restriction questions because we weren't concerned about the security risks in our situation, and we didn't know for sure that saying 'Yes' would work for us.
Next problem: VirtualGL doesn't play nicely with KTouch.

43
Machine-profiles.md Normal file

@ -0,0 +1,43 @@
## Introduction
Running Linux 4.x and X.org 7.x in 64 MB diskless is not trivial. ThinStation is a minimalist Linux distribution, so it takes more interaction from you than a typical fat “include-everything-and-the-kitchen-sink” type of distribution (like e.g. RedHat).
In order to keep the boot image small, you have to define which hardware will be supported by it. ThinStation uses **machine profiles** to represent hardware configurations. There are a couple of [predefined machine profiles](https://github.com/Thinstation/thinstation/tree/master/ts/build/machine), but you probably have to create your own.
## What is a machine profile and how do I use it?
Technically spoken, a machine profile is a subdirectory of `build/machine` containing the files `module.list`, `firmware.list` (optional), `vbe_modes.list` or `package.list` (optional).
A machine profile is used with the `machine` directive in `build.conf`. For example:
```
machine myPC
```
Its supposed to satisfy firmware, kernel module and X.org driver dependencies for a particular hardware platform in one go. You can have several machines defined in `build.conf` to create a boot image that runs on multiple types of hardware.
The `machine` directive abstracts `firmware`, `module` and even `package` directives. It complements `module`, `package` and `param` directives.
## How do I create a new machine profile?
**Short summary:** Create a “fat” boot image, boot it and note which kernel modules were loaded.
1. Uncomment (or add) `package extensions` and `package extensions-x` in `build.conf`, as well as any potential X.org targets (`package xorg7-*`) that may be used by a platform.
2. Build using the command `./build --allmodules`. This generates a rather big image (> 200 MiB) with everything driverwise.
3. [[Boot|Deployment]] the client with this image (see note below if you have problems) and run `/bin/hwlister.sh`. This will generate one, two or three files:
- `module.list` (always),
- `vbe_modes.list` (probably) and
- `firmware.list` (maybe).
4. If you are running a TFTP server with writable root, theyll automatically get uploaded. Otherwise theyll be in `/` on the ThinStation client and youll have to transfer them manually by a USB stick or network.
5. On your build computer, go to the `thinstation/build/machine` directory, create a new subdirectory (e.g. `myPC`) and put the above files there.
6. If you want to include a certain X.org driver in your machine profile, you have to create a `package.list` file containing the appropriate `package` line in your new machine profile directory (see 5.).
You probably will want to edit `build.conf` and deactivate `package extensions` afterwards. Remember to omit `--allmodules` on your next build.
## Special case: Systems with less than 512 MiB of RAM
Since the above image includes X it requires your thin client to have at least 512 MiB of RAM. If your thin clients have less RAM (but at least 128 MiB) you can still use an image *without* X. Replace step 1 from above with:
cd /build
cp conf/hwlister/* .
Be aware of the fact that some kernel modules necessary for running X (e.g. `i915` for Intel graphics devices) will not be loaded if X is not currently running (like in this case). So if you create a machine profile in text only mode you will have to add such modules to the newly created machine profile manually. Otherwise you will not be able to run X properly with this profile. Use this method at your own risk!
## Advanced usage
If you create a directory `etc` in your machine profile directory and put arbitrary files in it, these files will be copied into the initial ramdisk under `/etc`. This mechanism can be used as a shortcut for configuration so that you dont have to create a new package just for a few config files in `/etc`. See machine profile `NT-A3500` for an example.

@ -0,0 +1,52 @@
## You can use the [Rufus][] utility by Pete Batard
[Rufus]: https://rufus.ie
### Please note that due to artificial restrictions in the official release of Rufus, you must use the modified version that is downloaded during install.
Before running build in the development environment, make sure the rufus port is installed with the following command.
`prt-get install rufus`
Afterwards, any efi iso will include the utility with your build. On a windows machine you can run the utility to convert an ISO to a bootable thumb drive.
Once the ISO has been transfered to a Windows machine, Double click the iso, and Windows will automatically mount it as a virtual CD-ROM drive.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r1.png)
Select the new CD-ROM drive on the left, and you should see it's contents on the right.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r2.png)
Double click the rufus folder
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r3.png)
Double click the portable rufus utility executable.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r4.png)
Rufus will only show removable media on your system. If you don't see anything at this point, please insert your media.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r5.png)
Confirm that the media you want to make bootable is selected, or use the drop down to browse for the correct drive.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r6.png)
Click `SELECT` to browse for the ISO we mounted earlier
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r7.png)
Browse for the ISO, and select it.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r8.png)
Confirm the settings circled in blue, then click `START`
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r10.png)
The ISO can be written in either mode, but ISO image mode is recommended, click `OK`
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r11.png)
Confirm the destruction of the drive contents by clicking `OK`
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r12.png)
You can monitor the progress, but Rufus should be quick with any modern removable drive.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r13.png)
# Considerations for Fastboot
If you are using fastboot, you will need to make sure you put a mount definition in for a removable drive. Before making your build, make sure you have a line like the following in your thinstation.conf.buildtime. It doesn't need to be zero, but that is the safest.
MOUNT_0="LABEL=THINSTATION /boot auto x-mount.mkdir,defaults 0 0"
Notice that even though Rufus displays the Volume Label it is going to write as `ThinStation` and afterwards displays `ThinStation` as the Volume Label of the new drive, Windows uses all capitals in it's display. This is important, because Linux will also reference the drive by all capitals.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/r14.png)

324
News-and-History.md Normal file

@ -0,0 +1,324 @@
## News
### Dec 2019
**ThinStation 6.2.3 released**
This should be a stable base for 64 bit systems.
### Jun 2016
**ThinStation 5.5 released**
### 4 August 2014
**ThinStation 5.2.3 released**
As usual you get it from here:
[<http://sourceforge.net/projects/thinstation/files/thinstation/thinstation-5/>](http://sourceforge.net/projects/thinstation/files/thinstation/thinstation-5/)
or from git.
## History
### 6 May 2012
**ThinStation 5.1 released**
Donald Cupp Jr has been busy and has ironed out kinks and polishing the
beautiful vehicle ThinStation, and he proudly presents ThinStation-5.1.
### 10 February 2012
**ThinStation 5.0 released**
After about a year of development ThinStation 5.0 - the successor to
ThinStation 2.2.2 - has been released today. During its development
program ThinStation 5.0 has been known as version 2.5, but as the entire
code base is new, the developers wanted to part from the 2.x series
branding. So we decided to stick to the the "5" in "2.5" and here is
version 5.0.
ThinStation 5.0 is based on Crux Linux 2.7 code, but the user front end
is very much the same as previously, i.e. it still uses build.conf and
thinstation.conf\*. There are of course some new things to learn (2.2.x
is more than five years old) but the soul and spirit is all the same.
However, this is new times and there are new requirements: A simple
build requires 64 MB RAM and an i686 class processor is required. This
is 16 year old technology, any CPU post 2003 works and almost any post
1996 does.
For package developers ThinStation 5.0 is great news. It is so easy now
to add own packages or modify existing ones thanks to the standardized
Crux code base.
The number of packages updated are \*way\* to extensive to mention, but
on most bases we have 2011/2012 versions of everything, including Linux
kernel 3.2 and xorg7.
So, have fun and enjoy **ThinStation 5.0**.
The ThinStation crew.
### 11 January 2012
The TS-2.2.2 series has served us well since late 2008 and now it is
time for the final minor revision, TS-2.2.2i. The future belongs to
TS-2.5 which is well into its RC-series by now.
### 18 October, 2011
Now we are at beta4 and "soon" there will some RCs. So it's **now** we
need feedback. The build procedure in TS-2.5 is slightly different from
TS-2.2.2 series.
### 28 September, 2011
Exciting news! **ThinStation-2-5 beta1** is out. It's a complete rewrite
of TS but still true to the TS core values and most administrating parts
are the same. A new thing is that you get the source together with the
distro, so it's a 390 MB download (the final version will be the distro
only and the source optionally). Unpack the bz2 file, run
./setup-chroot. Actually you have to run ./setup-chroot twice, but you
are instructed. Next go to ts/2.5 and things will look more or less
familiar.
Have fun and supply feedback! Feedback is very important.
### 28 June, 2011
**ThinStation 2.2.2h** has been released. A minor bugfix release of the
2.2.2 series.
Among the highligths: rdesktop 1.7.0 and Firefox 5.0.
### 10 May, 2011
LiveCD versions of **ThinStation 2.2.2g** available now.
### 3 March, 2011
**ThinStation 2.2.2g** has been released. As you can guess from the
version number, it's minor maintenance release where updated RDP clients
(SVN version of rdesktop and FreeRDP 0.8.2) is the highlight:
### 7 November, 2010
**ThinStation 2.2.2f** has been released. Well, the release of
ThinStation-2.2.2e triggered an interesting sequence of contributions
that we have found so interesting, that we kill off 2.2.2e and release
2.2.2f.
Most important is that now the keyboard is fully working with
international keyboards and FreeRDP! That's worth a release by itself.
But also other important fixes and updates are included: snd-hda-intel
seems to work for the first time, a bug for z-org6-intel ironed out,
Windows codepage 1252 added for ICA etc.
### 1 November, 2010
**ThinStation 2.2.2e** has been released. As you may guess from the
version number this is only a small update and bug fix release. Nothing
major. But as for any star a face lift is needed once in a while :-)
### 16 August, 2010
New VMware LiveCDs based on ThinStation-2.2.2d and **Open View
4.5.0b2.1** available as torrents on the usual page:
[<http://thinstation.org/LiveCD/>](http://thinstation.org/LiveCD/)
### 11 April, 2010
**ThinStation-2.2.2d** has been released. A few bugs has been ironed out
and a few minor features added.
### 2 March, 2010
**ThinStation-2.2.2b** has been released. Version 2.2.2b is a
maintenance release of 2.2.2, which means it is ver. 2.2.2 plus patches
and bug fixes. Besides this a few additions have been made mainly to
cosmetics.*' Update:*' A glitch has bumbed the version to 2.2.2c.
### 19 January, 2010
A **New Canadian TS-O-Matic site** has become alive thanks to
redeemer.ca. Now the TS-O-Matic build farm consists of:
- [Denmark](http://thinstation.org/TSoM/)
- [Canada](http://tsom.redeemer.ca/)
- [Germany](http://tsom.paepke.net/)
- [Netherlands](http://tsom.gelix.org/)
- [Russia](http://www.it-advisor.ru/TSoM/)
- [United Kingdom](http://tsomatic.agarwal-associates.com/)
TS-O-Matic is the unique ThinStation way of making a custom binary image
of ThinStation without having a Linux installation yourself.
### 11 May, 2009
**Francis Souyri** has put together a package for Firefox 3 under
ThinStation 2.2x (& 2.3).
It includes updates to a number of packages and libraries and is bundled
as one package. Individual packages for GTK-2.0, atk, cairo, pango &
pixman will also be made available.
### 24 March, 2009
Well, we have been doing things, but not putting much here.....
Those who have been watching the lists will know that
[2.4alpha1](thinstation:v2.4 "wikilink") has been released with major
upgrades to the platform, but it's still got a long way to go. So come
along and help...
Updating the wiki is progressing and I'm adding some of the longtime
missing developer documentation. We could really do with some help on
defining 'Usage Scenarios' and the associated working configurations
(see the [Configuration Examples pages](Conf_Example "wikilink")).
### 28 October,2008
We have finally put the ThinStation WIKI back up.
There are still quite a few items missing, but we have a number of older
documents available and will extract anything of use that we can.
In the meantime, feel free to populate the Community Portal with
anything you think is useful to other ThinStation users. (I haven't
worked out how to allow anonymous updates yet, so you probably need to
have a sourceforge login and ask to be given edit permissions......)
We have lost a bit of the news as well.....
![](Example.jpg "fig:Example.jpg")
### 13-Oct-2007
**Marcos Amorim** has produced an [snmp client
package](http://downloads.sourceforge.net/thinstation/snmp_TS2.x.tar.gz)
for ThinStation. It's available from the sourceforge download site under
ThinStation packages contrib for ThinStation 2.2 (but also works for
2.2.1).
### 3-Oct-2007
A note from **Technical gs** to the developers list that we thought we'd
like to share with you... DEAR DEVELOPERS AND ALL THE CONTRIBUTORY TO
THIN STATION...... ITS ABOUT TWO YEARS SINCE OUR SCHOOL NETWORK IS
RUNNING ON THIN CLIENT TECHNOLOGY BY THINSTATION CONSISTING OF ABOUT 150
TERMINALS. ITS LINUX PLATFORM - UBUNTU LINUX SERVER ON SERVER SIDE -
WORKING ALL 24 HOURS \* 365 DAYS. ON BEHALF OF ALL STUDENTS, TEACHERS I
CONGRATULATE EVERYONE FOR THEIR SUCCESSFUL EFFORTS WITHOUT WHICH OUR
SCHOOL COULD NOT HAVE GIVEN THE VITAL IT EDUCATION ( ITS FREE OF CHARGE
) TO ALL THE STUDENTS. AS A IMPLEMENTOR OF THINSTATION, I ALSO HAVE NOT
CHARGED ANYTHING. LONG LIVE THINSTATION.
### 23-Sep-2007
Firefox 2.0.0.6 is now available for ThinStation as a contributed
package for the 2.2 series. Just look in thinstation package contribs \>
thinstation packages 2.2 on the sourceforge download site.
### 5-Sep-2007
Sick and tired of the original OS in **IGEL Winestra 416** thin clients?
Well, here is [how to change it to
ThinStation](http://lkenhagen.de/projekt_igel) (In German).
Oh, you want to run ThinStation on your **Netvista**. [No
problem](http://www.eazytek.com/netvista/thinstation.php) (In English).
### 23-Aug-2007
The Swedish IDG magazine
[Techworld](http://techworld.idg.se/2.2524/1.111171) recently had a
review of ThinStation (in Swedish). They were fairly happy about
ThinStation and thought TS-O-Matic was "almost painfully simple", if my
Swedish understanding is correct ;-) Final rating: PRO: "Easy
installation, great flexibility". CON: "Nothing in particular".
### 18-Aug-2007
The poll "Which SESSION\_0 type is most important for you? " is closed.
See the [results](http://thinstation.net/poll/poll-august2007.xhtml).
### 3-Jun-2007
The TS-O-Matics now speak French and Portuguese too.
### 15-Apr-2007
ThinStation has gotten an IRC channel. Come visit us at
***\#thinstation*** on **irc.freenode.net**. Please character encode
into iso-8859-15. As this is a new service, don't expect a lot of trafic
- before you create it yourself! :-)
### 7-Feb-2007
The highly regarded German computer magazine **C't** has a very
comprehensive presentation of ThinStation in its third issue 2007, page
202. It's four full, ad-free pages in color, and a very careful
walk-through on setting up ThinStation.
### 6-Dec-2006
More contribs! This time **Patrick Rock** has contributed the **elinks**
text web browser for both ThinStation 2.1.3 and ThinStation 2.2. Get it
from the download page.
### 2-Dec-2006
A little something to make time until Christmas pass... **Mike** has
contributed **conky**, a system and performance monitor for ThinStation
2.2. Not very useful, but nice to look at. A picture says more than a
1000 words, so look for yourself:
[image](http://thinstation.sf.net/images/conky.jpg)
### 4-Nov-2006
**Ludo Kleinholte** has written a new document on [Building ThinStation
under coLinux on your Windows
box](http://thinstation.sourceforge.net/Thinstation_and_CoLinux.pdf).
### 3-Nov-2006
The prebuilts of ThinStation ver. 2.2 are here. A LiveCD and and a
netboot prebuilt is ready for your download pleasure (see the download
section). Thanks to Paolo for the effort!
### 19-Oct-2006
New TS-O-Matic mirror: **Gerrie Brokke**, The Netherlands, has opened a
new TS-O-Matic mirror for the pleasure for all of you. Go visit it at
[<http://tsom.retail-ict.nl/>](http://tsom.retail-ict.nl/). We could
still use a mirror in Asia and in North America...
### 17-Oct-2006
Our sponsor 2X has good news again:
Up until now, investing in an application publishing solution such as
Citrix was too costly for most companies. The release of 2X
ApplicationServer v.4 is set to change this by providing a Citrix
alternative at a fraction of the price.
2X ApplicationServer v.4, allows seamless publishing of Windows
applications on remote desktops, significantly reducing administration
overheads and security risks. The new version adds integrated load
balancing, Linux & Mac client support, support for server farms, SSL
tunneling and more.// Read more about ApplicationServer on [2X's home
page](http://www.2x.com/applicationserver/). Naturally ThinStation 2.2
has a 2X client as we support any major application!
### 16-Oct-2006
*YAHOOO! Hold your horses. ThinStation 2.2 is here!*
Finally, ThinStation 2.2 was released today. It took a while since ver.
2.1.3 as Miles decided (actually his wife did ;-) to get a baby in the
middle of the process! Now the second baby is here: Linux kernel
2.6.16.5 (the kernel of the real, first baby is custom), X.org 6.9.0,
Firefox 1.5, ICA client ver. 9, rdesktop client ver. 1.5, unionFS,
NoMachine NX client, Cendio Thinlinc client, 2X ApplicationServer
client, USB support, client side sound, printing, storage... the lot!
Grap it on the download page. Expect the TS-O-Matics to catch up during
the week. [Original
announcement](http://sourceforge.net/mailarchive/forum.php?thread_id=30757497&forum_id=43674).

156
Packaging.md Normal file

@ -0,0 +1,156 @@
## Motivation
Lets assume you want to include a new application or a set of special configuration files into ThinStation. For this purpose it is better to create a new package than patching an existing one (already included in ThinStation).
Your newly created package lets call it `mypackage` can be used like an existing one: Simply insert
package mypackage
into `build.conf`.
**For the impatient:** There is a package called `template` serving as a template for creating your own packages.
## What is a package?
Technically speaking, a package is a subdirectory of `/build/packages` containing a set of files and directories.
- `dependencies` file containing a list of other required packages **Required**
- `.dna` file containing meta data relationships to Ports System **Required**
- `build/conf` for ThinStation build configuration examples,
- `build/finalize` to perform package specific shell commands that will be applied towards the end of build,
- `build/pip3.freeze` to download and install python packages,
- `bin` for all standard executables and symlinks,
- `sbin` for secure executables and symlinks,
- `etc` for your applications global configuration,
- `etc/cmd` for session or menu startup scripts,
- `etc/init.d` for initialization scripts,
- `etc/systemd/system` for a service file that starts the later,
- `etc/systemd/system/multi-user.target.wants` for a symlink to the service file,
- `lib` for library files,
- `lib/menu` for menu entries,
- `lib/icons/hicolor/scalable/apps` for scalable svg icons.
To see where to put your new files read on.
## Dependencies
In the root of your package directory `/build/packages/<mypackage>`, should be a file called `dependencies`. This file should always exist even if empty, but I'm sure you will at least depend on `base`. You should also define any other packages you depend on, one per line.
## Compiling
If you need to compile your application please refer to [`README.md`](https://github.com/Thinstation/thinstation/blob/master/README.md) and [[Ports and Packages|Ports and Packages]].
## Configuration - Optional
If you need to add new configuration variables for your package, please add a file `build/conf/99mypackage`. Define the variables in it and comment them verbosely.
This file will be part of the `thinstation.conf.sample` file. Replace 99 with a lower number if you want your variables to appear earlier in `thinstation.conf.sample`.
## Finalize - Optional
If you need specific shell commands to run during the build process as opposed to during boot, you can add a finalize file `build/finalize` with a header like `##mypackage 78` and then add shell commands to make specific changes to the filesystem during build. The number at the end is a metric that tries to order the finalize scripts.
## Python - Optional
We don't include any package managers in the final build image, that includes pip. However, during build we can call pip within build and feed it a freeze file `build/pip3.freeze` and it will install those packages into the image. The format is the same as the output of `pip freeze` would produce. You can remove the version numbers if you want pip to always grab the latest version, or leave them in to make sure a specific version is installed.
## Initialization - Optional
This can generate configuration files for a service or application based on variables in the conf files. To initialize your package (e.g. a service) at boot time you have to put a shell script in `etc/init.d` that is named exactly as your package plus a `.init` suffix, for our example we use `mypackage.init`. You can use any variables defined in `thinstation.conf.*` files in this script.
Example:
```shell
#! /bin/sh
. `dirname $0`/common
case "$1" in
init)
# run during boot (if started by systemd)
if ! pkg_initialized $PACKAGE; then
# Your startup instructions go here
pkg_set_init_flag $PACKAGE
fi
;;
console)
;;
window)
;;
fullscreen)
;;
help)
echo "Usage: $0 init"
;;
*)
exit 1
;;
esac
exit 0
```
Your script needs to be started with a systemd unit file placed in `etc/systemd/system`
Example: mypackage.service
```
[Unit]
Description=ThinStation mypackage
After=profile-setup.service pkg.service
Before=display-manager.service
ConditionPathIsReadWrite=/etc
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/thinstation.env
ExecStart=/etc/init.d/mypackage.init init
SyslogIdentifier=mypackage
[Install]
WantedBy=multi-user.target
```
Finally, create a symlink to the service file in `etc/systemd/system/multi-user.target.wants/` like
ln -sf ../mypackage.service etc/systemd/system/multi-user.target.wants/mypackage.service
If you dont need to do any *special* initialization for your application, and you plan to launch your application as a session or a menu entry, just create a symlink to `/etc/thinstation.packages` (for GUI applications) or `/etc/thinstation.console` (for textmode applications) like this:
cd mypackage/etc/init.d
ln -s /etc/thinstation.packages mypackage # or alternatively
ln -s /etc/thinstation.console mypackage
## Startup
If you use a symlink for initialization (see previous section) then it is necessary to define the exact command for starting your application. This is done in form of shell variable definitions. There can be several files in `etc/cmd`:
- `mypackage.global` This is the *default* file if no others are supplied and is **always required**.
CMD_GLOBAL="application"
- `mypackage.console` (Optional) Define how to start your application from the console.
- `mypackage.fullscreen` (Optional) Define how to start your application fullscreen.
CMD_FULLSCREEN="application --FULLSCREEN"
- `mypackage.window` (Optional) Define how to start your application in an ordinary window.
CMD_WINDOW="application"
## Console (text mode) applications
If your application runs in text mode, then you should create an empty file in `etc/console`:
touch etc/console/mypackage
## Libraries
go into `lib`.
## Menu entries
for Openbox, IceWM and XFWM menu entries can be defined in the file `lib/menu/mypackage` like this:
package="mypackage"; needs="x11"; title="Example application"; command="pkg window mypackage"
package="mypackage"; needs="x11"; title="Example application (fullscreen)"; command="pkg fullscreen mypackage"
That will go through the various thinstation functions and run commands that you have defined in /etc/cmd/mypackage.* files.
For simple menu entries, you can just call the command directly without `pkg window` or `pkg fullscreen` but they must be valid executables in the path.
## Icons
If you have an icon that you want displayed in menus, it should be an svg file, and placed at mypackage/lib/icons/hicolor/scalable/apps/mypackage.svg.
You can then run `icon-gen mypackage`, and any pixmaps should get placed as well.

93
Persistence.md Normal file

@ -0,0 +1,93 @@
#### Persistent Files and Mount Points
Version 7.0 introduces a new **persistent-files** service, enhancing how configurations and data persist across boots. This addition requires a dedicated mount point for `/var/prstnt`, alongside traditional mount points such as `/boot` and `/home`. Below, we outline the differences between earlier versions and 7.0, and provide clear instructions for setting up persistent storage.
---
### Differences Between Versions
#### Prior to Version 7.0:
- **Mount Points**:
- The typical setup included mount points for `/boot` and `/home`.
- These mount points functioned as expected, but there was no service to specifically manage persistence for individual files.
- **Persistence**:
- Files persisted implicitly based on the contents of the `/home` directory or other user-defined partitions.
#### New in Version 7.0:
- **Persistent-Files Service**:
- Introduces fine-grained control over file persistence. Specific files must be explicitly listed in configuration files under `/etc/persistent-files.d/`.
- Files not explicitly listed are not retained across boots, even if they reside in `/var/prstnt` or other monitored directories.
- **New Mount Point for `/var/prstnt`**:
- A dedicated EXT4 partition mounted at `/var/prstnt` is required to store persistent files managed by the `persistent-files` service.
- Existing mount points for `/boot` and `/home` remain unchanged.
---
### Step 1: Setting up Mount Points
To configure the required mount points, update your `thinstation.conf.buildtime` file as follows:
```bash
MOUNT_0="LABEL=boot /boot auto x-mount.mkdir,defaults 0 0"
MOUNT_1="LABEL=home /home auto x-mount.mkdir,defaults 0 0"
MOUNT_2="LABEL=prstnt /var/prstnt auto x-mount.mkdir,defaults 0 0"
```
- **Explanation**:
- `LABEL=boot`: For the boot partition (FAT32). Needed if booting from flash or hd
- `LABEL=home`: For the home partition (EXT4). Needed if you want user settings to persist
- `LABEL=prstnt`: A new EXT4 partition dedicated to the persistent-files service.
#### Partitioning the Drive
- Example, create three partitions:
1. **FAT32** labeled `boot`.
2. **EXT4** labeled `home`.
3. **EXT4** labeled `prstnt`.
- The `/ts/bin/flash` script can automate this process if the drive is installed in the build system.
---
### Step 2: Configuring the Persistent-Files Service
1. **File-Based Persistence**:
- The `persistent-files` service requires explicit definitions of files to persist.
- Create configuration files under `/build/packages/mypackage/etc/persistent-files.d/`, naming them descriptively (e.g., `mypackage.conf`).
Example: `/build/packages/mypackage/etc/persistent-files.d/mypackage.conf`
```plaintext
/etc/myapp/config.ini
```
2. **Granular File Control**:
- Persistence is determined by file paths listed in the configuration files.
- Directory monitoring does not persist all contents by default; only the explicitly listed files will persist.
3. **Verify Setup**:
- After setup, ensure `/var/prstnt` is mounted and files specified in `/etc/persistent-files.d/` persist across reboots.
---
### Step 3: Testing the Configuration
1. **Mount Points**:
- Confirm `/var/prstnt`, `/boot`, and `/home` are correctly mounted using the `mount` command or inspecting `/etc/fstab`.
2. **File Persistence**:
- Reboot the system and verify that only the files listed in `/etc/persistent-files.d/` are retained across boots.
---
### Notes and Recommendations
- **Backward Compatibility**:
- For systems upgraded from earlier versions, ensure that a `/var/prstnt` partition is created and configured.
- Without this mount point, the `persistent-files` service will not function correctly in version 7.0.
- **Advanced Mount Points**:
- Additional partitions can be defined using the same syntax in `thinstation.conf.buildtime`.
- **Legacy Behavior**:
- Mount points like `/boot` and `/home` still operate as they did in prior versions, but persistence for specific files now depends on the `persistent-files` service.
With these instructions, you can seamlessly transition from earlier versions to 7.0 while taking advantage of the enhanced persistent file management system.

24
Ports-and-Packages.md Normal file

@ -0,0 +1,24 @@
## Ports
<p>A normal Linux distribution tries to only expose the user to one package management system. Ubuntu provides apt, Redhat rpm, Fedora dnf. These help to modularize the distribution into something that is universally manageable by *any user. Under the covers, there are still several package managers that must be satisfied, jpm - perl - python - ruby - etc.</p>
<p>In the ThinStation world, we are generating static images of file systems, and may need to work with two distinct package formats. The first one is a port. It behaves a lot like a typical desktop package, plus it handles source compilation, a feature greatly needed when going embedded. There is a central database, so you can track files, query dependencies, add and remove the package from the active filesystem. You can update the package and test the changes on an active, persistent filesystem.</p>
<p>We do not remain on the tip of any other disto. For better or worse, we are forked. The only versions of any packages, are the ones in the ThinStation git repo. You can update the version number and (fingers crossed)rebuild the port on your own, or bribe me to do it.</p>
<p>When updating or adding new ports, you should try and make them as complete as possible. Include all the help, the examples, the configuration and init files you can find. They will be a good reference later, when we need to go thin; and compiling can take a while, so the less times we do that, the better. You should *not attempt to break a port into pieces like samba, and samba-devel. That paradigm is an over-complication required decades ago when computers where slow and space was pricey. Most projects do not lend themselves to such formatting, it increases development time, takes longer to compile, drops valuable reference material, reduces access to newcomers...yada, yada, yada, bad plan.
Here are some good links to research ports.
The package management utilities.
[https://crux.nu/Wiki/FaqPkgUtils](https://crux.nu/Wiki/FaqPkgUtils)
You can search the crux port database here.
[https://crux.nu/portdb](https://crux.nu/portdb)
The Archlinux ports system is also an excellent reference, but they have different goals and values.
[https://www.archlinux.org](https://www.archlinux.org)</p>
## Packages
<p>The next phase is actually called a package, but it does not behave like a typical package. Here the goal is different. We want to reduce a regular port down to it's bare functional essentials for a purpose. No help, no includes, no examples and drop anything not essential to the task for which the package was made. Convert as much of the init process into static files as possible. Drop any files or functions that will attempt to change the filesystem after we have rendered it. Even the package manager itself must not be present in the final product.</p>
<p>Perhaps one of the more challenging parts to understand is the relationship between these two formats, and how to use them to extend the ThinStation environment.</p>
A good starting place is to run `mkrepackge <port>`, and most of the common tasks will be scripted for you and a package will be created at `/build/packages/<port>`. It will create among other things, a file called `install` at `/build/packages/<port>/build/install`. This can be customized to further reduce unnecessary files for your desired task.

76
Printer-configuration.md Normal file

@ -0,0 +1,76 @@
This page describes how to add printers:
- option A: custom package (network printer)
- option B: config on boot (network printer, usb printer and lpt)
### Prerequisites (option A and B)
***
- required `build.conf` packages
- `package lprng`
- `package hpijs`
- `package cups`
- `package ghostscript`
- FileDevice Yes in cupsd.conf (only option B, by default in thinstation included)
### Configuration option A (custom package)
***
1. Create a [custom package](https://github.com/Thinstation/thinstation/wiki/Creating-a-Custom-Package). The only files needed are `etc/init.d/your_start_up_script` and the corresponding systemd service file.
1. Change the name of `your_start_up_script` to something appropriate (`printers`?).
1. Add the following line to the `init)` case:
lpadmin -p "<printer_name>" -v socket://<printer_ip> -m <printer_driver> -L "<printer_location>" -E
**\<printer_name\>**
- What do you want to call your printer?
**\<printer_ip\>**
- The IP address your printer resides at. If you include `package terminal` in `build.conf`, you can see what devices are available on the client by running the following in the terminal: `lpinfo -v`
**\<printer_driver\>**
- The print driver to install with the printer. If you include `package terminal` in `build.conf`, you can view available drivers for your printer on the client by running the following in the terminal: `lpinfo --make-and-model '<printer_make_and_model>' -m`, where \<printer_make_and_model\> is something like "LaserJet 4240". This will print a list of drivers like the following:
$ lpinfo --make-and-model "LaserJet 4240" -m
gutenprint.5.2://hp-lj_4240/expert HP LaserJet 4240 - CUPS+Gutenprint v5.2.9
foomatic-db-compressed-ppds:0/ppd/foomatic-ppd/HP-LaserJet_4240-Postscript.ppd HP LaserJet 4240 Foomatic/Postscript
drv:///hpcups.drv/hp-laserjet_4240-pcl3.ppd HP LaserJet 4240 pcl3, hpcups 3.13.9
postscript-hp:0/ppd/hplip/HP/hp-laserjet_4240-ps.ppd HP LaserJet 4240 Postscript (recommended)
postscript-hp:1/ppd/hplip/HP/hp-laserjet_4240-ps.ppd HP LaserJet 4240 Postscript (recommended)
The driver is the portion of the line before the first space. E.g. `gutenprint.5.2://hp-lj_4240/expert` or `postscript-hp:0/ppd/hplip/HP/hp-laserjet_4240-ps.ppd`.
**\<printer_location\>**
- Where is the printer located?
####Notes
- If you include `package terminal` in `build.conf`, you can test the lpadmin command prior to adding it to your config file by running the command in the terminal on the thinstation client.
- This is not the only way to add a network printer. Another possible method includes (on the thinstation client) adding a printer using the CUPS GUI (<http://localhost:631>) and creating a package from `/etc/cups`. This method does not require boot-time conf files.
### Configuration option B (config on boot)
***
1. Only define in thinstation.conf.buildtime or any config group:
##### Example network printer
- CUPS_PRINTER_0_NAME="sample_network_printer_0"
- CUPS_PRINTER_0_DEVICEURI="socket://ip_address"
- CUPS_PRINTER_0_DRIVER="drv:///sample.drv/generpcl.ppd"
##### Example usb printer
- CUPS_PRINTER_1_NAME="sample_usb_printer_1"
- CUPS_PRINTER_1_DEVICEURI="file:///dev/usb/lp0"
- CUPS_PRINTER_1_DRIVER="drv:///sample.drv/generpcl.ppd"
##### Example lpt printer
- CUPS_PRINTER_2_NAME="sample_lpt_printer_2"
- CUPS_PRINTER_2_DEVICEURI="file:///dev/lp0"
- CUPS_PRINTER_2_DRIVER="drv:///sample.drv/generpcl.ppd"
Driver used "drv:///sample.drv/generpcl.ppd" is a generic pcl driver useful for laser printers, it can be modified with any other driver.

35
Secureboot.md Normal file

@ -0,0 +1,35 @@
## ThinStation supports booting via EFI, and SecureBoot
In the event that you are booting on a secureboot system, it may be necessary for you to enroll some of the components of ThinStation into your systems security catalog. This is a fairly easy process and it looks much like the following screens. You may want to print out https://www.thinstation.us for reference when going through this process.
The first screen should come up by default when booting ThinStation on a Secureboot system for the first time. Select `"OK"`, and press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/1.png)
This screen will timeout, so it's important to hit any key before it does. Press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/2.png)
Now we want to start the key enrollment process. Select `"Enroll key from disk"` and then press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/3.png)
Depending on your machine,`"EFI"` may already be selected. If it is not present, also look for `"THINSTATION"`, then press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/4.png)
Select the `"ThinStation-SB-UEFI-CA.cer"` certificate, then press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/5.png)
We want to verify the key, so select `"View key 0"`, then press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/6.png)
It's important to make sure you have recovered the fingerprint for the certificate over a secure connection. After confirming the locked status for the www.thinstation.us site, and after a visual verification that the `[Fingerprint]` is the same between the one shown on-screen and the one you recovered from thinstation.us, press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/7.png)
Select `"Continue"`, then press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/8.png)
If everything is correct, and the key was successfully verified by you, select `"Yes"` and then press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/9.png)
Finally, select `"Reboot"` and then press the `Enter` key.
![](https://raw.githubusercontent.com/wiki/Thinstation/thinstation/10.png)
That's it. The system should boot ThinStation without issue.

163
Smart-Cards.md Normal file

@ -0,0 +1,163 @@
### Gemalto Smartcards
A brief guide to get smart cards working with thinstation running rdesktop
connected to a microsoft terminal server. It is theoretically possible to get
ThinStation working with a variety of cards and readers.
This guide focuses only on the following:
gemalto v2 .net smartcards:\
gemalto .net smart cards run a streamlined version of the .net framework
and provide seamless integration with microsoft operating systems.\
<http://tinyurl.com/26o6htc>
gemalto pc twin usb smart card reader:\
simple usb smart card reader.\
<http://tinyurl.com/33qjsyg>
you will need:\
\* a microsoft terminal server
- an active directory domain controller
- a linux box with a build environment
- any test computer
- a gemalto pc twin usb smart card reader
- a gemalto .net smartcard
#### step 1:
first, get a working smart card environment set up. make sure you can
log on locally to a machine with your smart card and reader, and also
make sure you can connect and logon to a terminal server with the smart
card over rdp.
the following links should help:\
you will need to install the following update on xp or 2003 machines to
enable logon via gemalto .net smartcard: <http://tinyurl.com/yhdwrzc>
the windows machine that the smart card reader is plugged in to should
be able to find the drivers automatically, but just in case they can be
found here: <http://support.gemalto.com/?id=46>
the gemalto documentation detailing the set up required to enable smart
card logon to active directory, as well as installing certificates
(users) on the cards themselves: <http://tinyurl.com/2fpyuwn>
#### step 2:
once you have a working smart card setup, download and setup thinstation. it is a good idea to familiarize yourself with the thinstation documentation to assist in later steps. use the latest version.
There are also multiple ways you can boot into thinstation, this guide should work for all of them. for reference,
I use the pxe boot method, as no media is required to boot a machine into thinstation. Verify that you can boot a client machine into thinstation and connect to a terminal server using rdesktop.
#### step 3:
the gemalto pc twin usb smart card reader uses the linux ccid drivers.
connections to the readers and driver management is provided by the pcsc
lite resource manager daemon, or pcscd. both of these are available
packages in a thinstation os, but ccid needs to be configured for a
particular reader before thinstation is compiled, and the pcscd package
has a bug that also requires some configuration before the thinstation
image is compiled. luckily though, there is a fix for the pcscd package
written by phuong83@hotmail.com on the sourceforge thinstation
development email list. so, we need to download the thinstation source,
patch the pcscd package, configure the ccid package to work with the
gemalto pc twin usb smart card reader, and then compile the boot images.
**3a:**\
Set up a linux machine with a current build environment. DevStation is excellent for this, but you can use any distro you want.
**3c:**\
download patched version of pcscd and update thinstation source:
`wget `[`http://dl.dropbox.com/u/2334614/pcscd.tar.bz2`](http://dl.dropbox.com/u/2334614/pcscd.tar.bz2)\
`mkdir pcscd`\
`mv pcscd.tar.bz2 pcscd`\
`cd pcscd`\
`tar xfj pcscd.tar.bz2`\
`cd ..`\
`mv Thinstation-2.2.2d/packages/pcscd/ ./oldpcscd`\
`mv pcscd/ Thinstation-2.2.2d/packages/`
**3d:**\
in order to edit the ccid configuration to work with the gemalto pc twin
usb smart card reader, we need the vendor id and the product id of the
reader. these can be found here:\
<http://pcsclite.alioth.debian.org/readers/GemPCTwin.txt> \>br\> the
vendor id is 0x08E6 and the product id is 0x3437. now, edit the file\
Thinstation-2.2.2d/packages/ccidreader/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
and change the following lines:
<string>`TARGET.VERSION`</string>\
`TO`\
<string>`libccid.so.1.0.1`</string>\
\
<key>`ifdVendorID`</key>\
<array>\
`   MAGIC_VENDOR`\
</array>\
`TO`\
<key>`ifdVendorID`</key>\
<string>`0x08E6`</string>\
\
<key>`ifdProductID`</key>\
<array>\
`   MAGIC_PRODUCT`\
</array>\
`TO`\
<key>`ifdProductID`</key>\
<string>`0x3437`</string>\
\
<key>`ifdFriendlyName`</key>\
<array>\
`   MAGIC_FRIENDLYNAME`\
</array>\
`TO`\
<key>`ifdFriendlyName`</key>\
<string>`gemalto pc twin usb smart card reader`</string>
**3e:**\
following the thinstation documentation, edit the
Thinstation-2.2.2d/build.conf file to match your enviornment.\
build the thinstation images:\
cd Thinstation-2.2.2d
`./build`
**3f:**\
if it was a success, copy the necessary boot images from
Thinstation-2.2.2d/boot-images to your thinstation setup. for example, i
boot thinstation via a custom pxe setup, so i copy
Thinstation-2.2.2d/boot-images/pxe/initrd and
Thinstation-2.2.2d/boot-images/pxe/vmlinuz to my tftpdroot directory.
**3g:**\
configure your thinstation.conf.network file with the following (see
thinstation documentation for more info):\
USB\_ENABLED=ON
`PCSCD_USBFIX=ON`\
`PCSCD_CARDREADER_TYPE="USB"`\
`SESSION_0_RDESKTOP_OPTIONS="[WHATEVER RDESKTOP FLAGS YOU NEED] -r scard:'gemalto pc twin usb smart card reader 00 00'='USB Smart Card Reader 0;Gemalto'" `
**3h:**\
make sure your reader is plugged in, then boot into thinstation. verify
that the led on the reader is blinking. after rdesktop loads and you are
at the terminal server logon screen, insert your card. you should see
the led turn solid and the terminal server should prompt for the card
pin.
#### other notes:
if you want an enviornment that supports multiple smart cards, you can
download the ccid package also modified by phuong83@hotmail.com on the
sourceforge thinstation development email list. a link can be here:\
<http://dl.dropbox.com/u/2334614/ccidreader.tar.bz2>
if you are having problems, you can debug by booting in to thinstation
and pressing ctrl-alt-f2, which should bring you to a terminal prompt.
from here you can verify the Info.plist file, debug pcscd, etc. a useful
switch to pcscd is -f, that will force it to run in the foreground and
send all output to stdout.
`` kill `pidof pcscd` ``\
`pcscd -f`

10
Timesync-and-NTP.md Normal file

@ -0,0 +1,10 @@
We recently changed the way NTP (Network Time Protocol) is supported in thinstation. Historically, we were calling an NTP utility (called ntpdate) with a cron job to sync the server time to the network time server, and the server was configured in buildtime.conf.
NTP now has a proper daemon within systemd as “systemd-timesyncd” alongside a new revision in ntpd. The original NTP utility method is still supported, but we added support for both systemd-timesyncd and ntpd in your builds.
If youre wondering which is worth using:
- systemd-timesyncd is lightweight and simple, and more importantly built into systemd which is included in all images. Therefore you wouldnt need any new packages, you can just remove NTP from build.conf if your build is using it.
- ntpd has more features and can provide more precision when syncing the clock. If you want to use ntpd, you can add that package instead of NTP to your build.conf.
- If NTP was what you were already using and that works fine for your purposes, you arent required to change anything, ThinStation still supports it and everything should still work as it did before.
Additionally, all configurations for NTP in your buildtime.conf will work for ntpd and systemd-timesyncd, so you would only need to change that file if you want to use new options (which you can find in their respective conf files).

99
Update-a-Port.md Normal file

@ -0,0 +1,99 @@
# Update GCC and libstdc++ in the Environment
This documentation guides you through the process of updating GCC (with an example using GCC 12.2). As part of this update, `libstdc++.so.6` will also be updated.
## Prerequisites:
1. **Verify GLIBC Versions**:
```bash
strings /usr/lib/libstdc++.so.6 | grep GLIBC
```
2. **Fresh Environment**: To ensure a smooth process, it's recommended to start with a fresh environment.
## Steps:
1. **Clone the Repository**:
- Clone the Thinstation repository.
```bash
git clone --depth 1 https://github.com/Thinstation/thinstation.git
```
- This creates a folder named `thinstation`.
2. **Initialize Base Environment**:
- Navigate to the cloned directory and run the setup.
```bash
cd thinstation
./setup-chroot
```
3. **Navigate to GCC Port**:
```bash
cd /ts/ports/core/gcc
```
4. **Edit the Pkgfile**:
- Modify the `Pkgfile` to update the GCC and ISL version. Ensure their versions are compatible. Also, verify the download links.
```bash
name=gcc
version=12.2.0
_version=7
_islver=0.24
release=1
_commit=c2103c17
checkdepends=('dejagnu' 'inetutils')
options=('!emptydirs')
source=(ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-${_islver}.tar.bz2
ftp://gcc.gnu.org/pub/gcc/releases/gcc-$_version/$_name-$_version.tar.xz)
```
5. **Modify `pkgmk` Tool**:
```bash
vi /usr/bin/pkgmk
```
- Comment out the line:
```bash
#export LC_ALL=POSIX
```
6. **Set the Locale**:
- This is required to prevent `bsdtar` failures.
```bash
localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8
```
7. **Initiate Package Download**:
```bash
pkgmk -i -d
```
- **Note**: If the MD5 checksum of the downloaded file doesn't match the locally stored one, reset the MD5 checksum using:
```bash
pkgmk -um
```
8. **Build the Package**:
- Start the build process. This might take a few hours.
```bash
pkgmk -i -u
```
- If you encounter an error:
```bash
ERROR: Building '/ts/ports/core/gcc/gcc#12.2.0-1.pkg.tar.xz' failed.
```
- Reset the footprint using:
```bash
pkgmk -uf
```
9. **Reattempt the Build**:
```bash
pkgmk -i -u
```
10. **Compress the Build**:
- For this you need memory, 16GB seems to be minimum
```bash
shrink gcc
```
11. **Completion**:
- At the end of this process, the new GCC version is installed in the build environment. A new port file will also be generated. You can use this file, along with the `Pkgfile`, to set up a new build environment, saving compilation time and bypassing the steps mentioned above.

18
Update-a-package.md Normal file

@ -0,0 +1,18 @@
Example update a thinstation packages, tested with ccid, pcsc-lite, ocinventory, freerdp or rdesktop, and tigervnc
0. ./setup-chroot
1. Update pkfile with new version number and url (if needed), for example /ts/ports/contrib/rdesktop/PkgFile
2. cd /ts/ports/contrib/packagename for example cd /ts/ports/contrib/rdesktop
3. pkgmk -u -d -um
4. pkgmk -u
5. pkgmk -uf
6. pkgmk -u
7. update packagename, for example update rdesktop, or update vncviewer
8. Delete source packages of new version
9. Delete old source related with old version
10. Rebuild thinstation image with new packages versions
11. Test and upload to Thinstation master branch
During update package ccid, is required to use update ccidreader

@ -0,0 +1,34 @@
After some time you will certainly want to update your clone of the ThinStation repository to include the latest bugfixes. **Before you start** with this, you should save a copy of your `build.conf` and `thinstation.conf.*` files (or any other files you changed by intention) to a place outside the repository.
It is **highly advisable to [[use Git|Using-Git]] for managing your local changes** (e.g. on config files) instead of copying config files around.
## Staying within the original branch
Lets assume you want to stay within the [ThinStation branch](https://github.com/Thinstation/thinstation/branches) you initially [[cloned|Getting-Started-with-ThinStation#cloning-the-thinstation-git-repository]].
Then enter these lines:
cd thinstation
./setup-chroot
clean_chroot
exit
git pull
This could take some time, depending on your internet connection and the activity of ThinStation development since your last update. After Git has finished you are free to reenter the chroot environment (`./setup-chroot`), restore your config files and continue development.
## Changing to a newer branch
From time to time, a new [ThinStation branch](https://github.com/Thinstation/thinstation/branches) (e.g. `6.3-Stable`) emerges. If you want to jump to a branch that was not a part of your [[original clone|Getting-Started-with-ThinStation#cloning-the-thinstation-git-repository]], you can use the following commands to do so.
git fetch origin <Branch Name>:<Branch Name>
git branch --set-upstream-to=origin/<Branch Name> <Branch Name>
git checkout <Branch Name>
For example
git fetch origin 5.5-Stable:5.5-Stable
git branch --set-upstream-to=origin/5.5-Stable 5.5-Stable
git checkout 5.5-Stable
You might also need to make sure your working area is compatible with a “factory reset”. Make sure all your changes are backed-up, then nuke your checkout like this.
cd /thinstation
rm -rf *
git checkout -f

126
Using-Git.md Normal file

@ -0,0 +1,126 @@
*Disclaimer:This is not a general Git introdution. Instead this page is geared towards people who only need Git in combination with ThinStation.*
## Introduction
[Git](https://git-scm.com/) is the version control system used to develop ThinStation. It also allows you to switch to a different version of ThinStation with ease.
You can use Git to efficiently “save” your ThinStation [[configuration files|Configuration]]. This gives you the opportunity to return to a known working state if your development is stuck. It also allows you to elegantly migrate your personal configuration to a new version of ThinStation.
## Git related terms and concepts
### Linear development
When you initially cloned ThinStation you created a **“working directory”**. It contains all ThinStation related files and is under Gits control, i.e. Git watches over all files.
If you changed (files in) the working directory and want to save certain changes, its time to create a **“commit”**. Thats a *recursive* snapshot of all *tracked* files in the working directory. Only carefully chosen changes (compared to the previous snapshot) will be a part of the snapshot.
Example: To persist changes in the files `build.conf` and `thinstation.conf.buildtime` type
git add build.conf thinstation.conf.buildtime
git commit
If you continue development you will create more commits.
git add …
git commit
git add …
git commit
This leads to a linear line of development:
o--o--o (a series of commits “o”)
-> direction of development ->
### Branched development
The above is a simple example for a **branch**. Each branch has a *unique* name refering to the newest commit in a series. In ThinStation branches are used for example to develop different major versions of the framework. Thats why you cloned a certain branch from the ThinStation repository (e.g. `5.5-Stable`). Lets call these branches “**system branches**” for claritys sake.
o--o--o 5.5-Stable (a system branch)
In addition to system branches you can create personal branches to store tuned configuration files. We will call them “**config branches**” here. A config branch starts at a certain well defined commit, typically the newest in a system branch. This reflects the fact that you based your work on top of ThinStation.
git checkout -b mybranch
git add …
git commit
git add …
git commit
leads to
o--o--o 5.5-Stable
\
o--o mybranch (a config branch)
Note that your own “local” branching does not affect system branches at all. “Official” ThinStation development goes on, i.e. system branches continuously grow by new commits. To locally see the latest changes to ThinStation you have to “fetch” them:
git fetch
o--o--o--o--o--o--o 5.5-Stable
\
o--o mybranch
In such a situation you will want to update your config branch to be based on the latest system branch commit. Git calles this a **rebase**:
git checkout mybranch
git rebase 5.5-Stable
o--o--o--o--o--o--o 5.5-Stable
\
o--o mybranch
To avoid problems afterwards, it is best to reset the build environment
./setup-chroot # entering
clean_chroot # cleaning
exit
before you start with the rebase.
Sometimes you want to tranfer a commit from one branch to another without merging the two branches. Enter (checkout) the destination branch first. Then
git cherry-pick commit-ID
This is called **“cherry picking”** and will create a new commit by default.
## Example use of config branches
Lets assume you have a powerful development workstation but pretty slow thin clients. For this reason you may *prefer developping and testing your software configuration within a virtual machine*. Only after everything is working as expected in the virtual machine you switch to using real hardware (thin clients).
This could be achieved like this:
1. Start by creating a new config branch (e.g. called `vbox`) on top of the latest ThinStation stable system branch.
o--o--o 5.5-Stable
\
vbox
2. Depending on your desktop virtualization software (VMware or VirtualBox) tune to the appropriate machine profile and make a first commit. Then develop until you are satisfied with the user facing software configuration. Make commits whenever appropriate.
o--o--o 5.5-Stable
\
o--o--o--o vbox
3. Now create a second config branch (e.g. called `myclient`). Switch the machine profile and test. If necessary fix remaining issues. Then commit your changed files.
o--o--o 5.5-Stable
\
o--o--o--o vbox
\
o--o myclient
Which is equivalent to:
o--o--o 5.5-Stable
\
o--o--o--o--o--o myclient
\
vbox
4. If you need to change your software configuration, switch to the branch `vbox` before developing.
git checkout vbox # note the missing -b
git add …
git commit
o--o--o 5.5-Stable
\
o--o--o--o--o--o myclient
\
o vbox
5. Finally cherry-pick (i.e. transfer) the most recent commit into myclient:
git checkout myclient
git cherry-pick vbox

@ -0,0 +1,32 @@
If you [[use GRUB to boot ThinStation|Deployment#booting-from-removable-media-or-internal-storage]] it is possible to make thin clients automatically update themselves via network.
In order to do so you have to identify each release of boot files with a version number. If the number on the server is newer than on a client, it will upgrade itself on bootup.
## Prerequesites
You need a HTTP (or TFTP or SCP) server for serving the kernel `vmlinuz` and the initial ramdisk file `initrd`.
Naturally *one initial* version of ThinStation **including hdupdate** needs to be installed on the thin client *before* automatic updates (carried out by hdupdate) can take place.
## How to
1. Uncomment `package hdupdate` in `buid.conf`. Set the familiy of `HDUPDATE` variables in `thinstation.conf.buildtime` according to your configuration. For example:
HDUPDATE_ENABLED=Y
HDUPDATE_SERVER=172.16.0.98
HDUPDATE_SERVER_TYPE=wget
HDUPDATE_PATH=/update
HDUPDATE_WS_VERSION=1
HDUPDATE_TEMP=RAM
HDUPDATE_FORCE=N
2. Build ThinStation and install this version on each client that should be updated through hdupdate.
3. Add at least the following variables to a [[network configuration file|Configuration#boot-time-configuration]] read by all clients in question:
HDUPDATE_SERVER_VERSION=1
HDUPDATE_FILES="initrd"
4. If a new release of your ThinStation boot files (`initrd` or even the kernel `vmlinuz`) is due to be rolled out, you have to:
1. Change `HDUPDATE_WS_VERSION` to a higher number and build ThinStation.
2. Copy all necessary files (usually only `initrd`; `vmlinuz` only if you switched to a newer ThinStation release/branch) to the HTTP/TFTP/SCP (depending on `HDUPDATE_SERVER_TYPE`) servers directory. Put the files in the subdirectory `HDUPDATE_PATH`.
3. Increase `HDUPDATE_SERVER_VERSION` to the same value as the latest `HDUPDATE_WS_VERSION`. If a new kernel is to be delivered, change `HDUPDATE_FILES` to `"initrd vmlinuz"`.
4. Boot up all affected thin clients and check the update process. **Note:** The client will *not reboot* after a sucessful update but start up the previous version for the last time.

@ -0,0 +1,3 @@
## Proprietary Applications
We try and make it easy for you to integrate these kinds of applications into your builds, but we can only go so far. You will need to go to the owner of the application like VMWare for Horizon View or Citrix for ICA, and agree to their terms and conditions of use before downloading the software package necessary for integration. Once downloaded, place the bundle in /downloads of your TS build env. You might need to update `/build/build.urls` with the filename.

25
_Sidebar.md Normal file

@ -0,0 +1,25 @@
# Basics
- [[Getting Started|Getting-Started-with-ThinStation]]
- [[Configuration]]
- [[build.conf|build.conf]]
- [[thinstation.conf|thinstation.conf]]
- [[Examples|Examples]]
- [[Booting Modes and Compression|Booting-Modes-and-Compression]]
- [[VMWare View & Citrix ICA]]
- [[Certificates]]
- [[Secureboot]]
- [[Deployment]]
- [[Packaging]]
- [[Machine profiles|Machine-profiles]]
- [[CD to USB disk|Making bootable media on Windows]]
- [[Persistence]]
- [[Updating ThinStation|Updating-your-repository]]
- [[Debugging]]
- [[FAQ]]
# Using …
- [[Git with ThinStation|Using-Git]]
- [[hdupdate|Using-the-hdupdate-package]]
- [[Printers|Printer-configuration]]
- [[Smartcards|Smart-Cards]]
- [[Update a Port|Update-a-Port]]

43
build.conf.md Normal file

@ -0,0 +1,43 @@
## General description
`build.conf` is ThinStations basic setup file in which you define which hardware drivers, programs and features will be included in boot images (generated by running `./build`).
Initially `build.conf` is a symbolic link to [`build.conf.example`](https://github.com/Thinstation/thinstation/blob/5.4-Stable/ts/build/build.conf.example). Thus we recommend
```
rm build.conf
cp build.conf.example build.conf
```
before you start.
The file itself is *verbosely* commented so **dont hesitate to directly dive into the source *before* reading this page**.
## Syntax
Anything *after* a `#` is a comment. You “deactivate” whole lines by putting a `#` in front of them and “reactivate” them by removing the `#` again. Empty lines are also allowed.
Apart from the above `build.conf` consists of lines containing exactly one of the following keywords (“directives”)
- `machine`
- `firmware`
- `module`
- `package`
followed by (any amount of) whitespace and a keyword specific string (value). The `param` keyword is also valid, but it needs to be followed by a key value pair of strings.
## Content
Although you can reorder all lines arbitrarily it is advisable to stick to the given order of topics:
1. machine profiles
2. support for wireless communication
3. filesystem support
4. system level software
5. X.org drivers
6. localization
7. user facing applications
8. window managers and utilities
9. miscellaneous services
10. fonts and icons
11. parameters
ThinStation uses and incorporates many [OSS](http://en.wikipedia.org/wiki/Open_source_software) applications and even includes installers for some proprietary applications. Make sure not to include too many fonts in your build. Also Firefox and Java are extremely RAM demanding.

BIN
r1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
r10.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
r11.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
r12.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
r13.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
r14.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

BIN
r2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
r3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
r4.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
r5.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
r6.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
r7.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
r8.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
r9.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

15
thinstation.conf.md Normal file

@ -0,0 +1,15 @@
ThinStation attempts to parameterize many of the major functions available in those applications, but only covers a small percentage of what each application uses. Other parameters can be passed via the `SESSION_n_<package>_OPTIONS` parameter.
For a list of all parameters supported by an application and the general usage of those applications, please refer to the documentation for those parameters and applications on their respective websites. The list below
will help find some of the major applications/packages used by ThinStation.
- [Blackbox](http://blackboxwm.sourceforge.net/) as the Window Manager (desktop)
- [BootSplash](http://bootsplash.org) [FAQ](http://bootsplash.org/FAQ) for the bootsplash whilst loading
- [BusyBox](http://busybox.net) as the major command line tool
- [Citrix Receiver (ICA Client)](http://support.citrix.com/product/ica/unix/)
- [IceWM](http://www.icewm.org/) as the Window Manager (desktop)
- [xtdesk](http://garuda.newmail.ru/xtdesk_e.dhtml) for icons etc. on the desktop (\< v2.4)
- [idesk](http://idesk.sourceforge.net/) for icons etc. on the desktop (v 2.4 \>)
- [NoMachine NX](http://www.nomachine.com/)
- [Cendio ThinLinc](http://www.cendio.com/products/thinlinc/)
- [RDesktoP](http://www.rdesktop.org), [man page](http://linux.die.net/man/1/rdesktop)