Bonjour Jipé,

C'est une de nos pistes d'amélioration à court terme. L'idéal serait de pouvoir faire tourner le logiciel directement sous Windows, théoriquement il n'y a rien d'impossible, le blocage vient surtout de l'architecture fichiers de Novius OS qui repose fortement sur les liens symboliques, c'est théoriquement possible sous windows, mais il faut qu'on étudit (notamment la notion de droit de création de lien symbolique)

L'autre piste est de pouvoir fournir des machines virtuelles contenant Novius OS clés en main, pour une utilisation sous windows. Via sans doute l'utilisation de Vagrant.
By Gilles FELIX , 13 April 2013 ·
Bonjour et merci pour la réponse rapide.
Concernant l'utilisation de liens symboliques dans Novius-OS, c'est effectivement embêtant. Ça met un paquet de monde sur la touche. Il y a une raison particulière à ce choix technique ou ça vient de l'histoire de Novius-OS ?
By Jipé , 13 April 2013 ·
Le lien symbolique est possible sous windows depuis vista il me semble (je ne suis pas un spécialiste windows, ayant abandonné cet OS depuis de nombreuses années même en perso).
L'utilisation des liens symboliques est très courante sous linux, et l'architecture de Novius OS a effectivement été pensée dans un premier temps pour un hébergement linux.
Dans le cadre Novius OS les liens symbolique servent pour la gestion des applications et pour la gestion des medias (redimensionnement à la volée avec mise en cache et sécurisation potentiel).

Mais j'ai bon espoir. Ton message nous pousse un peu plus vers la recherche d'une solution rapide.
By Gilles FELIX , 13 April 2013 ·
Bon, ben si y'a moyen de faire quelque chose, je suis volontaire.
By Jipé , 13 April 2013 ·
Bonjour Jipé,

J'ai attendu d'être au boulot pour te répondre, je voulais en discuter avec l'équipe.

Premier point : Merci beaucoup pour ta proposition !
Deuxième point : Si tu veux aider, on va pas te dire non :)
Troisième point : travailles sur la branche rel/0.2.1 (dispo dans chacun des sous-dépôts)

Une fois que je t'ai dit ça, tu es pas beaucoup plus avancé pour savoir par où commencer. On va y aller par étape pour éviter de te noyer.
By Gilles FELIX , 15 April 2013 ·

Autoloader

On a déjà identifié le premier problème, souvent remonté sur le forum par les gens essayant d'installer Novius Os sous windows : l'autoload des classes ne marche pas.

Concrètement ça se déclenche à l'étape 3 de l'install. L'install regarde s'il y a déjà un user créé dans la base. Elle charge donc l'objet Nos\User\Model_User (voir lien ci-dessous), et là paf "Class Nos\User\Model_User not found"

Le problème doit pas être bien méchant. Il doit se trouver dans la classe Autoloader (2ème lien ci-dessous), qui est une surcouche de celle de FuelPHP.
Au début on a codé directement avec des '/' en dur au lieu d'utiliser la constante DS (alias FuelPHP de DIRECTORY_SEPARATOR) qui contient le séparateur de répertoire de l'OS. Il doit en rester quelques-uns qui font planter la recherche du bon chemin des classes sous windows.

Ce que je te propose, c'est d'arriver à faire fonctionner l'autoloader pour que l'étape 3 de l'install passe sous windows.

Quand tu as trouvé, tu nous fais une pull request sur github (toujours dans la branch rel/0.2.1 ou directement la master/0.2.1 si d'ici là elle est sortie). On valide et on passe au problème suivant qui est les liens symboliques sous windows.

Toujours tenté ?

Bonjour,

Ça roule, je récupère les sources de la branche en question et je jette un œil.

Normalement le fait d'avoir codé des slashs en dur pour les séparateurs de dossiers ne devrait pas poser de problème particulier.

En fait, à ma connaissance la constante DIRECTORY_SEPARATOR est inutile ; sous Windows, les chemins utilisant des slashs à la place d'antislashs sont correctement interprétés par le couple Apache/PHP. L'existence de la constante DS de FuelPHP est donc probablement discutable. Mais bon : il y a très certainement une raison qui m'échappe ^^ (comme par exemple un problème d’interprétation des chemins par IIS/PHP ou autre ?)

Quoi qu'il en soit je vous tiens au jus concentrant mes pérégrinations.
By Jipé , 15 April 2013 ·
Bonsoir Jipé,

Tu as raison, les slashs ne sont pas génant quand tu donnes un chemin au serveur. Par contre quand c'est lui qui te le donne, il te le file avec des anti-slash. Et c'est bien possible que ça soit dans le décodage d'un chemin donné par l'OS que le bât blesse.

Bonne recherche
By Gilles FELIX , 15 April 2013 ·
Bonsoir,

J'ai commencé une investigation du code de la rel/0.2.1 et j'ai corrigé 1-2 trucs dans le fichier index.php (probleme de chemin)

Step 1/4 j'ai modifié le code afin de passer le test "anti Windows".Chez moi les problèmes commencent au niveau des lignes 512 et 515 du fichier install.php avec des liens symbolique qui ne peuvent pas être crées. Ces 2 erreurs passent toutefois inaperçues à ce stade car le code jump directement en step 2/4.

En step 2/4, je rentre les données de ma base et je valide. Des tables sont crées dans ma base (4 tables vides sauf 1 enregistrement dans la table migration), et la page step 2/4 se ré affiche avec un joli message : Error : Can't create symlink for "static\apps\noviusos_appmanager".

Voili voilou ; fin de cette rapide petite investigation. Effectivement, sans liens symboliques on va pas aller très loin ; on s’arrête même avant le step 3. Je pull quand même les modifs ?
By Jipé , 16 April 2013 ·
Il y a un "mystère" avec ces liens symboliques. Visiblement cela ne pose pas de soucis (la création via symlink en PHP à l'étape 2) pour certains puisqu'il arrive jusqu'au bug de l'autoloader en étape 3. Alors que pour d'autres ça s'arrête plus tôt.

Il faut donc commencer par le problème des liens symboliques. Qu'est-ce qui fonctionne, quand et pourquoi ? Version de windows, droits de création de liens symboliques ?

Selon la doc PHP de symlink "Les utilisateurs de Windows doivent garder à l'esprit que cette fonction n'est disponible que pour Windows Vista/Windows Server 2008 ou supérieur. Pour les versions antérieures, cette fonction ne supporte pas les liens symboliques. "
Il semble aussi que sous windows, la création de lien symbolique n’accepte pas les chemins relatifs (lu dans les commentaires) : notre pb vient-il de là ? Dans ce cas il faudra faire une détection windows et du code spécifique à l'OS, sous linux les chemins relatifs sont bien pratiques.

Dans les commentaires ça parle aussi d'outils externes à installer (linkd.exe, delrp.exe, Junction) et de faire une fonction interne qui simule symlink avec ces outils.
By Gilles FELIX , 16 April 2013 ·
Bonjour Gilles,

Environnement de dev actuel : Windows Vista sp2 - PHP v5.3.13 - Apache v2.2.22 - MySQL v5.5.24.

Concernant l'utilisation de liens symboliques, si tu veux mon avis perso : il s'agit d'une facilité intéressante dans le cadre de la gestion des fichiers d'un système d'exploitation de type Unix, mais d'une mauvaise pratique dans le cadre d'un développement Web.

Je posais un peu plus haut la question de leur présence historique dans Novius-OS parce que je pressentais qu'il s'agissait d'avantage d'une marotte de développeur que d'un impératif de programmation.

A mon humble avis, plutôt que d'essayer de bricoler une solution au problème des symlinks, il serait peut être intéressant de remettre carrément en question leur réelle utilité dans le cadre de Novius-OS.

Les éliminer demandera certainement un peu de travail, mais permettra de s’affranchir d'un problème qui ne devrait pas exister, de simplifier la procédure d'installation et d'éviter de futur pertes de temps en support technique ; libérant d'avantage de temps pour se concentrer sur l'essentiel.

Je ne fais ici que proposer une idée visant a améliorer les chances de diffusions de Novius-OS. Et je suis même prêt à participer parce qu'en ce moment j'ai un peu de temps, que je trouve le projet sympa et que l'idée que ce soit un initiative FR me plait bien (oué, je suis un peu chauvin ;-) ). Mais à ce stade je ne sais pas dans quelle mesure elle est réalisable, ni quelles sont les ressources (humaines) qui peuvent lui être affectés, ni dans quelle mesure vous êtes accrochés à l'utilisation de symlinks.

Quoi qu'il en soit je vais investiguer un peu plus en avant la création de symlinks sous Windows via les infos que tu as donné. Mais à mon avis c'est pas la bonne voie. Je vous tiens au jus ; dites moi ce que vous pensez de l'idée.
By Jipé , 16 April 2013 ·
Rebonjour Jipé,

Je vais prendre un exemple pour expliquer pourquoi on utilise les liens symboliques.

Une application est installée dans local/applications/. Le DOCUMENT_ROOT du serveur pointe sur public/. Donc par défaut, tous les fichiers de l'application ne sont pas accessible via URL. C'est une bonne pratique niveau sécurité. Mais l'application contient tout de même des fichiers qui doivent être dispo via URL (css, js, images, voir points d'entrés php). Les liens symboliques permettent de rendre ces répertoires de l'application accessibles via URL sans pour autant les séparer "physiquement" des autres fichiers de l'application. En cas de mise à jour de l'application, ces répertoires sont automatiquement mis à jour dans public/.

Une des pistes pour windows serait de copier ces répertoires dans public/. Techniquement c'est très simple. La contrainte : il faut coder le système de mise à jour pour synchroniser les répertoires quand l'application est mise à jour.

Rien d'insurmontable.

Là où je te rejoins, c'est que pour facilité l'adoption, un fonctionnement natif windows (sans passer par une VM, même bien packagée) est important.
Novius OS est un projet jeune. Il y a peu, il n'était utilisé qu'en interne par notre agence web et notre service d'hébergement, donc pour utilisation 100% linux.
Windows n'était simplement pas intégré à la réflexion. Mais les demandes se multipliant, sa prise en compte devient évidente, à moins de se couper d'une partie de la communauté potentielle.

Je ne veux pas trop m'avancer, la définition de la roadmap étant une œuvre collective, mais je pense que cette avancée a de bonne chance d'être au menu rapidement.
Je te conseille de répondre à l'enquête (2ème lien ci-dessous), dedans il est demandé si tu es intéressé pour participer au conseil de la communauté. Ce conseil, basé sur la méritocratie, pourrait prendre part aux discussions sur l'avenir du logiciel. Je ne veux pas prendre des engagements que je ne peux tenir. Or, pour le moment, j'ai une validation sur conseil consultatif.

Bref en résumé : l'idée de se passer des liens symboliques (de façon configurable, et notamment pour windows) n'est pas tabou. Pour l'instant cela ne fait pas partie des priorités immédiates, mais si la communauté pousse cela peut le devenir.
By Gilles FELIX , 16 April 2013 ·
Merci pour tes réponses, j'y vois un peu plus clair ^^
Je viens de remplir le formulaire d'enquête.
By Jipé , 16 April 2013 ·
Re,

Étape 3 de l'install : ErrorException [ Error ]: Class 'Nos\User\Model_User' not found
Une piste ?
By Jipé , 17 April 2013 ·
On en revient au pb de l'autoloader, et de la piste d'un mauvais décodage d'un chemin windows à cause d'une / en dur

Et tu as passé la 2 du symlink comment ?
By Gilles FELIX , 17 April 2013 ·
Bonjour Gilles,

Désolé pour le temps mort, j'étais occupé ailleurs.
Pour répondre à ta question : le problème de liens vient essentiellement du l'utilisation de la fonction is_link() de PHP. Sous Windows cette fonction ne renvoie pas un résultat fiable. Par exemple, un lien vers un dossier n'est pas considéré comme un lien, mais comme... un dossier ; la fonction is_link( $dirPath ) retournera donc systématiquement un joli FALSE. En revanche, depuis Windows Vista (Windows version 6), la création de liens "symboliques" est normalement possible via la fonction symlink() et en se passant des outils systèmes ou tierce partie.

Je reste toujours bloqué sur cette histoire de Class 'Nos\User\Model_User' not found. Si tu veux bien me signaler quels sont les fichiers potentiellement incriminés, je veux bien les investiguer. Pour info, j'ai réécrit complètement l'installeur. Je pullerai quand j'en aurai fini avec cette histoire de chargement de classe.
By Jipé , 23 April 2013 ·
Bonjour,

Gilles étant en vacances, je prends le relai.

Merci pour cette démystification sur is_link(). Nous nous en servons effectivement pour tester si le lien existe et on du coup on sait vers où chercher pour corriger le problème maintenant !

Pour la classe Nos\Use\Model_User le problème est vraisemblablement dans la classe Autoloader. Le 3e commentaire de Gilles explique pas mal la situation.

https://github.com/novius-os/core/blob/rel/0.2.1/framework/classes/fuel/autoloader.php#L97

Encore merci pour toute ton aide !
By Julian Espérat , 24 April 2013 ·
Bonjour Julian,

Pas de soucis pour le coup de main, ça fait plaisir.

Concernant le remplacement de l'utilisation de is_link(), il suffit de faire un is_dir() lorsque l'environnement est Windows ; ce test sera suffisant dans la mesure où les liens symboliques que vous créez ne sont que des liens vers des dossiers (dans le cas inverse il faudra trouver une autre solution). Voici le test en question :

$is_link = ( strtoupper( substr( PHP_OS, 0, 3 ) ) !== 'WIN' ) ? is_link( $public ) : is_dir( $public );

Dans le fichier framework/classes/application.php, il faut modifier les méthodes suivantes pour y ajouter le test ci dessus :
- protected function symlink($folder){}
- protected function unsymlink($folder){}
- protected function is_link($folder){}

Concernant la classe Autoloader je vais jeter un œil.
By Jipé , 24 April 2013 ·
Re,

Le problème provient effectivement de la classe Autoloader du framework :
https://github.com/novius-os/core/blob/rel/0.2.1/framework/classes/fuel/autoloader.php

Méthode load(), Ligne 76 il y a un test "if (!$loaded)" suivi d'une tentative de résolution du chemin de la classe fournie en entrée qui ne mène à rien de consistant (via la méthode get_valid_class_path($path)).

Concernant notre classe Nos\User\Model_User, la résolution de son chemin retourne :
{INSTALL_PATH}/local/classes/nos/user/model/user.php

Ce chemin n'existe effectivement pas, et l'emplacement réel de la classe que l'on cherche à charger est :
{INSTALL_PATH}/novius-os/framework/applications/noviusos_user/classes/model/user.model.php

Il y a donc un sérieux problème avec la gestion des chemins. Ce que je ne comprends pas c'est qu'au départ il s'agissait uniquement d'un problème de liens sous Windows. Or là, le problème soulevé implique également les autres OS. Avec un tel problème, personne ne devrait logiquement être en mesure d'installer Novius-OS correctement, en tout cas avec la procédure d'install de la rel/0.2.1. (me trompais-je ?)

Une idée du pourquoi de la chose ?
By Jipé , 24 April 2013 ·
Hum. Non ça marche bien sous Linux :)

En fait il croit que la classe est dans local, ce qui est faux. Elle est dans applications/noviusos_user.

Le nom de classe complet est Nos\User\Model_User, normalement il sépare ça en 2 parties : Nos\User (le namespace) et Model_User (la classe sans namespace).
Ensuite, il cherche l'application ayant le namespace 'Nos\User' et il va chercher la classe Model_User dedans.

Le séparateur de namespace est toujours \\ (peu importe l'OS) tandis que le séparateur de dossiers est soit / soit \\ (en fonction de l'OS). Peut-être qu'il se mélange un peu avec ?

Un moyen facile de debuguer serait de faire un fichier séparé contenant uniquement l'appel au bootstrap et le chargement de la classe problématique.
By Julian Espérat , 25 April 2013 ·
Merci pour tes réponses.
By Jipé , 27 April 2013 ·
Salut Jipé,

La version Chiba 2 de Novius OS est sortie récemment et le support de l'installation sous Windows fait parti des nouveautés.
By Gilles FELIX , 9 September 2013 ·
J'ai poster hier soir une question, mais elle est invisible aujourd'hui ???? A croire que les questions sur le CMS sous windows géne un peu ou beaucoup. C'est dommage, beaucoup de monde sont mis hord circuit. Il ne me rete plus qu'à trouver un autre cms ou les createurs sont beaucoup plus rectif et que leur CMS foctionne bien sous windows.
By papychris , 24 September 2013 ·
Salut @Papychris, tu veux parler de cette discussion ?
By Gilles FELIX , 24 September 2013 ·
To
    ou Annuler
Novius et développement sous Windows
By Jipé , 12 April 2013
To

Bonjour,

Est il prévu que Novius-OS soit un jour compatible avec les environnements de développement WAMP (Windows Apache MySQL PHP) ?