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 pdbs in a structure that Windows debuggers know how to read. And some more information on it is available here.