If you haven't already, you might want to brush up on how to create a symbol store on Windows because to create one on Linux you would need to create a compatible file structure.
First, it's important to note that sharing a symbol server over http is not special at all. Once a symbol store is created, it is just a matter of having it somewhere that is accessible via http. So, what is really important is the work that symstore.exe
does.
I know you do not want to entertain the idea of using emulation, but you really have 2 choices:
- Directly execute
symstore.exe
on a Linux box using something like Wine. (I don't know how well KVM would work here.)
- Recreate the features of
symstore.exe
that you need to use.
Recreating symstore.exe
can be pretty simple if you don't want to use any of its more advanced features like transactions, file links, or multiple users being able to import.
A simplified view of what symstore.exe
does:
- Creates a subdirectory in the output subdirectory with the name of each
pdb
imported.
- Hashes the
pdb
file and creates a subfolder with the name of the hash.
- Copies the
pdb
to the hash directory, optionally compressing it. (Or, depending on flags, stores a file file.ptr
with the location the pdb
is being imported from.)
- Appends a line to
refs.ptr
in the hash directory with some information about the PDB that was imported. (I don't believe this file is actually used by the client, dgbhelp.dll
, so this step could possibly be omitted.)
- Updates files in the
[output directory]\000Admin
to support things like transactions. (Again, this is just here for future runs of symstore.exe
.)
- Touches
pingme.txt
in the output folder.
(More info here.)
This doesn't sound too complicated, but no doubt, it could take some time to get right. To start with, you might want to take a look at Mozilla's build script which places pdb
s in a structure that Windows debuggers know how to read. And some more information on it is available here.